Plugin Directory

Changeset 3376557


Ignore:
Timestamp:
10/11/2025 07:43:01 AM (3 months ago)
Author:
badasswp
Message:

Deploy version 1.8.0 for ai-plus-block-editor

Location:
ai-plus-block-editor
Files:
112 added
20 edited

Legend:

Unmodified
Added
Removed
  • ai-plus-block-editor/trunk/ai-plus-block-editor.php

    r3365034 r3376557  
    44 * Plugin URI:  https://github.com/badasswp/ai-plus-block-editor
    55 * Description: Add AI Capabilities to the WP Block Editor.
    6  * Version:     1.7.1
     6 * Version:     1.8.0
    77 * Author:      badasswp
    88 * Author URI:  https://github.com/badasswp
  • ai-plus-block-editor/trunk/composer.json

    r3235704 r3376557  
    1616        }
    1717    ],
    18   "require": {
    19     "orhanerday/open-ai": "^5.1"
    20   },
     18    "require": {
     19        "orhanerday/open-ai": "^5.1"
     20    },
    2121    "require-dev": {
     22        "badasswp/wp-mock-tc": "^1.0",
    2223        "phpunit/phpunit": "^9.6",
    2324        "mockery/mockery": "^1.6",
     
    4243        "test": "vendor/bin/phpunit --testdox",
    4344        "analyse": "vendor/bin/phpstan analyse --memory-limit=2048M",
    44     "coverage": "XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-cobertura cobertura.xml && coveralls --repo-token=bDrttxr9v8g9lhyT05a0AqPzZPubS1hJq --file=cobertura.xml"
     45        "coverage": "XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-cobertura cobertura.xml && coveralls --repo-token=bDrttxr9v8g9lhyT05a0AqPzZPubS1hJq --file=cobertura.xml"
    4546    }
    4647}
  • ai-plus-block-editor/trunk/dist/app.asset.php

    r3365021 r3376557  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives'), 'version' => 'a2bd6a8efd0af26c1ffa');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives'), 'version' => 'dc4e07b2ea253d802277');
  • ai-plus-block-editor/trunk/dist/app.js

    r3365021 r3376557  
    1 (()=>{"use strict";var t={20:(t,e,o)=>{var n=o(609),r=Symbol.for("react.element"),i=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function l(t,e,o){var n,i={},l=null,d=null;for(n in void 0!==o&&(l=""+o),void 0!==e.key&&(l=""+e.key),void 0!==e.ref&&(d=e.ref),e)s.call(e,n)&&!c.hasOwnProperty(n)&&(i[n]=e[n]);if(t&&t.defaultProps)for(n in e=t.defaultProps)void 0===i[n]&&(i[n]=e[n]);return{$$typeof:r,type:t,key:l,ref:d,props:i,_owner:a.current}}e.Fragment=i,e.jsx=l,e.jsxs=l},21:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSocial:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSocial:null===(e=i("meta"))||void 0===e?void 0:e.apbe_social,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Social Media Hashtags","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"social"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_social:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Hashtags. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({meta:{apbe_social:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},56:(t,e,o)=>{t.exports=function(t){var e=o.nc;e&&t.setAttribute("nonce",e)}},72:t=>{var e=[];function o(t){for(var o=-1,n=0;n<e.length;n++)if(e[n].identifier===t){o=n;break}return o}function n(t,n){for(var i={},s=[],a=0;a<t.length;a++){var c=t[a],l=n.base?c[0]+n.base:c[0],d=i[l]||0,p="".concat(l," ").concat(d);i[l]=d+1;var u=o(p),f={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==u)e[u].references++,e[u].updater(f);else{var h=r(f,n);n.byIndex=a,e.splice(a,0,{identifier:p,updater:h,references:1})}s.push(p)}return s}function r(t,e){var o=e.domAPI(e);return o.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;o.update(t=e)}else o.remove()}}t.exports=function(t,r){var i=n(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=o(i[s]);e[a].references--}for(var c=n(t,r),l=0;l<i.length;l++){var d=o(i[l]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}i=c}}},87:t=>{t.exports=window.wp.element},100:(t,e,o)=>{o.d(e,{A:()=>a});var n=o(354),r=o.n(n),i=o(314),s=o.n(i)()(r());s.push([t.id,".apbe-toast{position:fixed;background:#000;color:#fff;bottom:-50px;opacity:0;left:15px;padding:20px;border-radius:5px;font-size:13px;z-index:1;box-shadow:0 0 15px rgba(0,0,0,.1);animation:slideUp .5s ease-out forwards}.apbe-sidebar p{margin-top:0 !important;margin-bottom:7.5px !important}.apbe-sidebar button{height:auto;padding:11.5px 15px;justify-content:center}.apbe-sidebar ul{margin:0;padding:0;display:flex;flex-direction:column}.apbe-sidebar ul li{padding:0 0 22.5px 0;margin:0}.apbe-sidebar ul li:first-child{padding-top:0}.apbe-button-group{display:flex;justify-content:space-between;margin-top:8.5px}.apbe-button-group button{height:38px;border-radius:3px}.apbe-button-group button.is-secondary{padding-left:9px;padding-right:9px}@keyframes slideUp{to{bottom:40px;opacity:1}}","",{version:3,sources:["webpack://./src/styles/app.scss"],names:[],mappings:"AACC,YACC,cAAA,CACA,eAAA,CACA,UAAA,CACA,YAAA,CACA,SAAA,CACA,SAAA,CACA,YAAA,CACA,iBAAA,CACA,cAAA,CACA,SAAA,CACA,kCAAA,CACE,uCAAA,CAIF,gBACC,uBAAA,CACA,8BAAA,CAGD,qBACC,WAAA,CACA,mBAAA,CACA,sBAAA,CAGD,iBACC,QAAA,CACA,SAAA,CACA,YAAA,CACA,qBAAA,CAEA,oBACC,oBAAA,CACA,QAAA,CAEA,gCACC,aAAA,CAOH,mBACC,YAAA,CACA,6BAAA,CACA,gBAAA,CAEA,0BACC,WAAA,CACA,iBAAA,CAEA,uCACC,gBAAA,CACA,iBAAA,CAOL,mBACE,GACD,WAAA,CACG,SAAA,CAAA",sourcesContent:[".apbe {\n\t&-toast {\n\t\tposition: fixed;\n\t\tbackground: #000;\n\t\tcolor: #FFF;\n\t\tbottom: -50px;\n\t\topacity: 0;\n\t\tleft: 15px;\n\t\tpadding: 20px;\n\t\tborder-radius: 5px;\n\t\tfont-size: 13px;\n\t\tz-index: 1;\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.1);\n  \t\tanimation: slideUp 0.5s ease-out forwards;\n\t}\n\n\t&-sidebar {\n\t\tp {\n\t\t\tmargin-top: 0 !important;\n\t\t\tmargin-bottom: 7.5px !important;\n\t\t}\n\n\t\tbutton {\n\t\t\theight: auto;\n\t\t\tpadding: 11.5px 15px;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\n\t\t\tli {\n\t\t\t\tpadding: 0 0 22.5px 0;\n\t\t\t\tmargin: 0;\n\n\t\t\t\t&:first-child {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&-button {\n\t\t&-group {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin-top: 8.5px;\n\n\t\t\tbutton {\n\t\t\t\theight: 38px;\n\t\t\t\tborder-radius: 3px;\n\n\t\t\t\t&.is-secondary {\n\t\t\t\t\tpadding-left: 9px;\n\t\t\t\t\tpadding-right: 9px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n@keyframes slideUp {\n  to {\n\tbottom: 40px;\n    opacity: 1;\n  }\n}\n"],sourceRoot:""}]);const a=s},105:(t,e,o)=>{o.d(e,{D:()=>i,h:()=>s});var n=o(723),r=o(619);const i=t=>{const e=[],o=(0,r.applyFilters)("apbe.blockMenuOptions",{casual:(0,n.__)("Use Casual Tone","ai-plus-block-editor"),official:(0,n.__)("Use Official Tone","ai-plus-block-editor"),descriptive:(0,n.__)("Use Descriptive Tone","ai-plus-block-editor"),narrative:(0,n.__)("Use Narrative Tone","ai-plus-block-editor"),aggressive:(0,n.__)("Use Aggressive Tone","ai-plus-block-editor")});return Object.keys(o).forEach(n=>{e.push({title:o[n],onClick:()=>{t(n)}})}),e},s=()=>(0,r.applyFilters)("apbe.allowedBlocks",["core/paragraph"])},113:t=>{t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},143:t=>{t.exports=window.wp.data},213:(t,e,o)=>{var n=o(848),r=o(723),i=o(830),s=o(619),a=o(715),c=o(143),l=o(427),d=o(455),p=o.n(d),u=o(105),f=o(814),h=(o(533),function(t,e,o,n){return new(o||(o=Promise))(function(r,i){function s(t){try{c(n.next(t))}catch(t){i(t)}}function a(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof o?e:new o(function(t){t(e)})).then(s,a)}c((n=n.apply(t,e||[])).next())})});(0,s.addFilter)("blocks.registerBlockType","apbe/ai",t=>{const{name:e,edit:o}=t;return-1===(0,u.h)().indexOf(e)||(t.edit=t=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.BlockControls,{children:(0,n.jsx)(l.ToolbarGroup,{children:(0,n.jsx)(l.ToolbarDropdownMenu,{icon:i.A,label:(0,r.__)("AI + Block Editor"),controls:(0,u.D)(t=>h(void 0,void 0,void 0,function*(){const{postId:e,blockId:o,blockContent:n}=(()=>{var t,e;const{getCurrentPostId:o}=(0,c.select)(f.FI),{getSelectedBlock:n,getSelectedBlockClientId:r}=(0,c.select)(f.Os);return{postId:o(),blockId:r(),blockContent:(null===(e=null===(t=n())||void 0===t?void 0:t.attributes)||void 0===e?void 0:e.content)||""}})(),{createNotice:i,createErrorNotice:s,removeNotice:a}=(0,c.dispatch)(f.DS),{updateBlockAttributes:l}=(0,c.dispatch)(f.Os),{getNotices:d}=(0,c.select)(f.DS);i("success",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-tone-success",type:"snackbar"});try{const r=yield p()({path:"/ai-plus-block-editor/v1/tone",method:"POST",data:{id:e,text:(null==n?void 0:n.text)||n,newTone:t}});let i=1;const s=setInterval(()=>{r.length===i&&clearInterval(s),l(o,{content:r.substring(0,i)}),i++},5);d().forEach(t=>a(t.id))}catch(t){s(t.message,{type:"snackbar",isDismissible:!0})}}))})})}),o(t)]})),t})},258:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSummary:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSummary:null===(e=i("meta"))||void 0===e?void 0:e.apbe_summary,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Summary","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"summary"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({excerpt:t}),o({meta:{apbe_summary:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Summary. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({excerpt:t}),o({meta:{apbe_summary:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},279:t=>{t.exports=window.wp.plugins},309:t=>{t.exports=window.wp.editPost},314:t=>{t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var o="",n=void 0!==e[5];return e[4]&&(o+="@supports (".concat(e[4],") {")),e[2]&&(o+="@media ".concat(e[2]," {")),n&&(o+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),o+=t(e),n&&(o+="}"),e[2]&&(o+="}"),e[4]&&(o+="}"),o}).join("")},e.i=function(t,o,n,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(n)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(s[c]=!0)}for(var l=0;l<t.length;l++){var d=[].concat(t[l]);n&&s[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=i),o&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=o):d[2]=o),r&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),e.push(d))}},e}},351:(t,e,o)=>{o.d(e,{A:()=>i});var n=o(609),r=o(573);const i=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"}))},354:t=>{t.exports=function(t){var e=t[1],o=t[3];if(!o)return e;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(o)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},427:t=>{t.exports=window.wp.components},455:t=>{t.exports=window.wp.apiFetch},457:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSlug:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSlug:null===(e=i("meta"))||void 0===e?void 0:e.apbe_slug,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Slug","ai-plus-block-editor")})}),(0,n.jsx)(c.TextControl,{placeholder:"your-article-slug",value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"slug"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({slug:t}),o({meta:{apbe_slug:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Slug. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({slug:t}),o({meta:{apbe_slug:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},533:(t,e,o)=>{var n=o(72),r=o.n(n),i=o(825),s=o.n(i),a=o(659),c=o.n(a),l=o(56),d=o.n(l),p=o(540),u=o.n(p),f=o(113),h=o.n(f),A=o(100),b={};b.styleTagTransform=h(),b.setAttributes=d(),b.insert=c().bind(null,"head"),b.domAPI=s(),b.insertStyleElement=u(),r()(A.A,b),A.A&&A.A.locals&&A.A.locals},540:t=>{t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},573:t=>{t.exports=window.wp.primitives},609:t=>{t.exports=window.React},619:t=>{t.exports=window.wp.hooks},659:t=>{var e={};t.exports=function(t,o){var n=function(t){if(void 0===e[t]){var o=document.querySelector(t);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(t){o=null}e[t]=o}return e[t]}(t);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(o)}},692:t=>{t.exports=window.wp.notices},715:t=>{t.exports=window.wp.blockEditor},723:t=>{t.exports=window.wp.i18n},814:(t,e,o)=>{o.d(e,{DS:()=>r,FI:()=>n,Os:()=>i});const n="core/editor",r="core/notices",i="core/block-editor"},825:t=>{t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(o){!function(t,e,o){var n="";o.supports&&(n+="@supports (".concat(o.supports,") {")),o.media&&(n+="@media ".concat(o.media," {"));var r=void 0!==o.layer;r&&(n+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),n+=o.css,r&&(n+="}"),o.media&&(n+="}"),o.supports&&(n+="}");var i=o.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(n,t,e.options)}(e,t,o)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},830:(t,e,o)=>{o.d(e,{A:()=>i});var n=o(609),r=o(573);const i=(0,n.createElement)(r.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(r.Path,{d:"M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z"}))},848:(t,e,o)=>{t.exports=o(20)},897:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postKeywords:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postKeywords:null===(e=i("meta"))||void 0===e?void 0:e.apbe_seo_keywords,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("SEO Keywords","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:7,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"keywords"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_seo_keywords:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch SEO Keywords. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({meta:{apbe_seo_keywords:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},922:(t,e,o)=>{o.d(e,{$j:()=>s.A,BD:()=>i.A,Gz:()=>c.A,Mw:()=>r.A,ij:()=>a.A,kW:()=>n.A});var n=o(897),r=o(457),i=o(258),s=o(924),a=o(973),c=o(21)},924:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(143),c=o(692),l=o(427),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,a.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,a.useDispatch)(c.store),{postId:b,postContent:v,postHeadline:x,notices:m}=(0,a.useSelect)(t=>{var e;const{getNotices:o}=t(c.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postHeadline:null===(e=i("meta"))||void 0===e?void 0:e.apbe_headline,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Headline","ai-plus-block-editor")})}),(0,n.jsx)(l.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(l.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=(yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"headline"}})).trim().replace(/^"|"$/g,"");(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_headline:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Headline. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(l.Button,{variant:"secondary",onClick:()=>{let e=1;new Promise(n=>{const r=setInterval(()=>{e===t.length&&(clearInterval(r),n(t)),o({title:t.substring(0,e)}),e++},5)}).then(t=>{o({meta:{apbe_headline:t}}),d()})},children:(0,n.jsx)(l.Icon,{icon:i.A})})]})]})}},953:(t,e,o)=>{var n=o(848),r=o(723),i=o(830),s=o(87),a=o(427),c=o(279),l=o(309),d=o(922);o(533),(0,c.registerPlugin)("ai-plus-block-editor",{render:()=>(0,n.jsxs)(s.Fragment,{children:[(0,n.jsx)(l.PluginSidebarMoreMenuItem,{icon:i.A,target:"apbe-sidebar",children:(0,r.__)("AI + Block Editor","ai-plus-block-editor")}),(0,n.jsx)(l.PluginSidebar,{name:"apbe-sidebar",title:(0,r.__)("AI + Block Editor","ai-plus-block-editor"),icon:i.A,children:(0,n.jsx)(a.PanelBody,{children:(0,n.jsx)("div",{className:"apbe-sidebar",children:(0,n.jsxs)("ul",{children:[(0,n.jsx)("li",{children:(0,n.jsx)(d.ij,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.$j,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.Mw,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.kW,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.BD,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.Gz,{})})]})})})})]})})},973:(t,e,o)=>{o.d(e,{A:()=>p});var n=o(848),r=o(87),i=o(143),s=o(723),a=o(427),c=o(692),l=o(455),d=o.n(l);const p=()=>{const{createNotice:t}=(0,i.useDispatch)(c.store),[e,o]=(0,r.useState)(apbe.provider||"");return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,s.__)("Switch AI Provider","ai-plus-block-editor")})}),(0,n.jsx)(a.SelectControl,{label:null,value:e,options:[{label:"ChatGPT",value:"OpenAI"},{label:"Gemini",value:"Gemini"},{label:"DeepSeek",value:"DeepSeek"},{label:"Grok",value:"Grok"}],onChange:e=>{return n=void 0,r=void 0,a=function*(){o(e);try{yield d()({path:"/ai-plus-block-editor/v1/switcher",method:"POST",data:{provider:e}}),t("success",(0,s.__)("Success! AI Provider switched successfully.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-success",type:"snackbar"})}catch(e){t("error",(0,s.__)("Error! Failed to switch AI Provider.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-error",type:"snackbar"}),console.error(e.message)}},new((i=void 0)||(i=Promise))(function(t,e){function o(t){try{c(a.next(t))}catch(t){e(t)}}function s(t){try{c(a.throw(t))}catch(t){e(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a},id:"switcher",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}},e={};function o(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={id:n,exports:{}};return t[n](i,i.exports,o),i.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.nc=void 0,o(213),o(953)})();
     1(()=>{"use strict";var t={20:(t,e,o)=>{var n=o(609),r=Symbol.for("react.element"),i=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function l(t,e,o){var n,i={},l=null,d=null;for(n in void 0!==o&&(l=""+o),void 0!==e.key&&(l=""+e.key),void 0!==e.ref&&(d=e.ref),e)s.call(e,n)&&!c.hasOwnProperty(n)&&(i[n]=e[n]);if(t&&t.defaultProps)for(n in e=t.defaultProps)void 0===i[n]&&(i[n]=e[n]);return{$$typeof:r,type:t,key:l,ref:d,props:i,_owner:a.current}}e.Fragment=i,e.jsx=l,e.jsxs=l},21:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSocial:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSocial:null===(e=i("meta"))||void 0===e?void 0:e.apbe_social,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Social Media Hashtags","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"social"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_social:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Hashtags. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({meta:{apbe_social:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},56:(t,e,o)=>{t.exports=function(t){var e=o.nc;e&&t.setAttribute("nonce",e)}},72:t=>{var e=[];function o(t){for(var o=-1,n=0;n<e.length;n++)if(e[n].identifier===t){o=n;break}return o}function n(t,n){for(var i={},s=[],a=0;a<t.length;a++){var c=t[a],l=n.base?c[0]+n.base:c[0],d=i[l]||0,p="".concat(l," ").concat(d);i[l]=d+1;var u=o(p),f={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==u)e[u].references++,e[u].updater(f);else{var h=r(f,n);n.byIndex=a,e.splice(a,0,{identifier:p,updater:h,references:1})}s.push(p)}return s}function r(t,e){var o=e.domAPI(e);return o.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;o.update(t=e)}else o.remove()}}t.exports=function(t,r){var i=n(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=o(i[s]);e[a].references--}for(var c=n(t,r),l=0;l<i.length;l++){var d=o(i[l]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}i=c}}},87:t=>{t.exports=window.wp.element},100:(t,e,o)=>{o.d(e,{A:()=>a});var n=o(354),r=o.n(n),i=o(314),s=o.n(i)()(r());s.push([t.id,".apbe-toast{position:fixed;background:#000;color:#fff;bottom:-50px;opacity:0;left:15px;padding:20px;border-radius:5px;font-size:13px;z-index:1;box-shadow:0 0 15px rgba(0,0,0,.1);animation:slideUp .5s ease-out forwards}.apbe-sidebar p{margin-top:0 !important;margin-bottom:7.5px !important}.apbe-sidebar button{height:auto;padding:11.5px 15px;justify-content:center}.apbe-sidebar ul{margin:0;padding:0;display:flex;flex-direction:column}.apbe-sidebar ul li{padding:0 0 22.5px 0;margin:0}.apbe-sidebar ul li:first-child{padding-top:0}.apbe-button-group{display:flex;justify-content:space-between;margin-top:8.5px}.apbe-button-group button{height:38px;border-radius:3px}.apbe-button-group button.is-secondary{padding-left:9px;padding-right:9px}@keyframes slideUp{to{bottom:40px;opacity:1}}","",{version:3,sources:["webpack://./src/styles/app.scss"],names:[],mappings:"AACC,YACC,cAAA,CACA,eAAA,CACA,UAAA,CACA,YAAA,CACA,SAAA,CACA,SAAA,CACA,YAAA,CACA,iBAAA,CACA,cAAA,CACA,SAAA,CACA,kCAAA,CACE,uCAAA,CAIF,gBACC,uBAAA,CACA,8BAAA,CAGD,qBACC,WAAA,CACA,mBAAA,CACA,sBAAA,CAGD,iBACC,QAAA,CACA,SAAA,CACA,YAAA,CACA,qBAAA,CAEA,oBACC,oBAAA,CACA,QAAA,CAEA,gCACC,aAAA,CAOH,mBACC,YAAA,CACA,6BAAA,CACA,gBAAA,CAEA,0BACC,WAAA,CACA,iBAAA,CAEA,uCACC,gBAAA,CACA,iBAAA,CAOL,mBACE,GACD,WAAA,CACG,SAAA,CAAA",sourcesContent:[".apbe {\n\t&-toast {\n\t\tposition: fixed;\n\t\tbackground: #000;\n\t\tcolor: #FFF;\n\t\tbottom: -50px;\n\t\topacity: 0;\n\t\tleft: 15px;\n\t\tpadding: 20px;\n\t\tborder-radius: 5px;\n\t\tfont-size: 13px;\n\t\tz-index: 1;\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.1);\n  \t\tanimation: slideUp 0.5s ease-out forwards;\n\t}\n\n\t&-sidebar {\n\t\tp {\n\t\t\tmargin-top: 0 !important;\n\t\t\tmargin-bottom: 7.5px !important;\n\t\t}\n\n\t\tbutton {\n\t\t\theight: auto;\n\t\t\tpadding: 11.5px 15px;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\n\t\t\tli {\n\t\t\t\tpadding: 0 0 22.5px 0;\n\t\t\t\tmargin: 0;\n\n\t\t\t\t&:first-child {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&-button {\n\t\t&-group {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin-top: 8.5px;\n\n\t\t\tbutton {\n\t\t\t\theight: 38px;\n\t\t\t\tborder-radius: 3px;\n\n\t\t\t\t&.is-secondary {\n\t\t\t\t\tpadding-left: 9px;\n\t\t\t\t\tpadding-right: 9px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n@keyframes slideUp {\n  to {\n\tbottom: 40px;\n    opacity: 1;\n  }\n}\n"],sourceRoot:""}]);const a=s},105:(t,e,o)=>{o.d(e,{D:()=>i,h:()=>s});var n=o(723),r=o(619);const i=t=>{const e=[],o=(0,r.applyFilters)("apbe.blockMenuOptions",{casual:(0,n.__)("Use Casual Tone","ai-plus-block-editor"),official:(0,n.__)("Use Official Tone","ai-plus-block-editor"),descriptive:(0,n.__)("Use Descriptive Tone","ai-plus-block-editor"),narrative:(0,n.__)("Use Narrative Tone","ai-plus-block-editor"),aggressive:(0,n.__)("Use Aggressive Tone","ai-plus-block-editor")});return Object.keys(o).forEach(n=>{e.push({title:o[n],onClick:()=>{t(n)}})}),e},s=()=>(0,r.applyFilters)("apbe.allowedBlocks",["core/paragraph"])},113:t=>{t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},143:t=>{t.exports=window.wp.data},213:(t,e,o)=>{var n=o(848),r=o(723),i=o(830),s=o(619),a=o(715),c=o(143),l=o(427),d=o(455),p=o.n(d),u=o(105),f=o(814),h=(o(533),function(t,e,o,n){return new(o||(o=Promise))(function(r,i){function s(t){try{c(n.next(t))}catch(t){i(t)}}function a(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof o?e:new o(function(t){t(e)})).then(s,a)}c((n=n.apply(t,e||[])).next())})});(0,s.addFilter)("blocks.registerBlockType","apbe/ai",t=>{const{name:e,edit:o}=t;return-1===(0,u.h)().indexOf(e)||(t.edit=t=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.BlockControls,{children:(0,n.jsx)(l.ToolbarGroup,{children:(0,n.jsx)(l.ToolbarDropdownMenu,{icon:i.A,label:(0,r.__)("AI + Block Editor"),controls:(0,u.D)(t=>h(void 0,void 0,void 0,function*(){const{postId:e,blockId:o,blockContent:n}=(()=>{var t,e;const{getCurrentPostId:o}=(0,c.select)(f.FI),{getSelectedBlock:n,getSelectedBlockClientId:r}=(0,c.select)(f.Os);return{postId:o(),blockId:r(),blockContent:(null===(e=null===(t=n())||void 0===t?void 0:t.attributes)||void 0===e?void 0:e.content)||""}})(),{createNotice:i,createErrorNotice:s,removeNotice:a}=(0,c.dispatch)(f.DS),{updateBlockAttributes:l}=(0,c.dispatch)(f.Os),{getNotices:d}=(0,c.select)(f.DS);i("success",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-tone-success",type:"snackbar"});try{const r=yield p()({path:"/ai-plus-block-editor/v1/tone",method:"POST",data:{id:e,text:(null==n?void 0:n.text)||n,newTone:t}});let i=1;const s=setInterval(()=>{r.length===i&&clearInterval(s),l(o,{content:r.substring(0,i)}),i++},5);d().forEach(t=>a(t.id))}catch(t){s(t.message,{type:"snackbar",isDismissible:!0})}}))})})}),o(t)]})),t})},258:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSummary:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSummary:null===(e=i("meta"))||void 0===e?void 0:e.apbe_summary,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Summary","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"summary"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({excerpt:t}),o({meta:{apbe_summary:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Summary. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({excerpt:t}),o({meta:{apbe_summary:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},279:t=>{t.exports=window.wp.plugins},309:t=>{t.exports=window.wp.editPost},314:t=>{t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var o="",n=void 0!==e[5];return e[4]&&(o+="@supports (".concat(e[4],") {")),e[2]&&(o+="@media ".concat(e[2]," {")),n&&(o+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),o+=t(e),n&&(o+="}"),e[2]&&(o+="}"),e[4]&&(o+="}"),o}).join("")},e.i=function(t,o,n,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(n)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(s[c]=!0)}for(var l=0;l<t.length;l++){var d=[].concat(t[l]);n&&s[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=i),o&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=o):d[2]=o),r&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),e.push(d))}},e}},351:(t,e,o)=>{o.d(e,{A:()=>i});var n=o(609),r=o(573);const i=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"}))},354:t=>{t.exports=function(t){var e=t[1],o=t[3];if(!o)return e;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(o)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},427:t=>{t.exports=window.wp.components},455:t=>{t.exports=window.wp.apiFetch},457:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postSlug:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postSlug:null===(e=i("meta"))||void 0===e?void 0:e.apbe_slug,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Slug","ai-plus-block-editor")})}),(0,n.jsx)(c.TextControl,{placeholder:"your-article-slug",value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"slug"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({slug:t}),o({meta:{apbe_slug:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Slug. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({slug:t}),o({meta:{apbe_slug:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},533:(t,e,o)=>{var n=o(72),r=o.n(n),i=o(825),s=o.n(i),a=o(659),c=o.n(a),l=o(56),d=o.n(l),p=o(540),u=o.n(p),f=o(113),h=o.n(f),A=o(100),b={};b.styleTagTransform=h(),b.setAttributes=d(),b.insert=c().bind(null,"head"),b.domAPI=s(),b.insertStyleElement=u(),r()(A.A,b),A.A&&A.A.locals&&A.A.locals},540:t=>{t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},573:t=>{t.exports=window.wp.primitives},609:t=>{t.exports=window.React},619:t=>{t.exports=window.wp.hooks},659:t=>{var e={};t.exports=function(t,o){var n=function(t){if(void 0===e[t]){var o=document.querySelector(t);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(t){o=null}e[t]=o}return e[t]}(t);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(o)}},692:t=>{t.exports=window.wp.notices},715:t=>{t.exports=window.wp.blockEditor},723:t=>{t.exports=window.wp.i18n},814:(t,e,o)=>{o.d(e,{DS:()=>r,FI:()=>n,Os:()=>i});const n="core/editor",r="core/notices",i="core/block-editor"},825:t=>{t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(o){!function(t,e,o){var n="";o.supports&&(n+="@supports (".concat(o.supports,") {")),o.media&&(n+="@media ".concat(o.media," {"));var r=void 0!==o.layer;r&&(n+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),n+=o.css,r&&(n+="}"),o.media&&(n+="}"),o.supports&&(n+="}");var i=o.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(n,t,e.options)}(e,t,o)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},830:(t,e,o)=>{o.d(e,{A:()=>i});var n=o(609),r=o(573);const i=(0,n.createElement)(r.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(r.Path,{d:"M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z"}))},848:(t,e,o)=>{t.exports=o(20)},897:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(692),c=o(427),l=o(143),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,l.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,l.useDispatch)(a.store),{postId:b,postContent:v,postKeywords:x,notices:m}=(0,l.useSelect)(t=>{var e;const{getNotices:o}=t(a.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postKeywords:null===(e=i("meta"))||void 0===e?void 0:e.apbe_seo_keywords,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("SEO Keywords","ai-plus-block-editor")})}),(0,n.jsx)(c.TextareaControl,{rows:7,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(c.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"keywords"}});(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_seo_keywords:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch SEO Keywords. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(c.Button,{variant:"secondary",onClick:()=>{o({meta:{apbe_seo_keywords:t}}),d()},children:(0,n.jsx)(c.Icon,{icon:i.A})})]})]})}},922:(t,e,o)=>{o.d(e,{$j:()=>s.A,BD:()=>i.A,Gz:()=>c.A,Mw:()=>r.A,ij:()=>a.A,kW:()=>n.A});var n=o(897),r=o(457),i=o(258),s=o(924),a=o(973),c=o(21)},924:(t,e,o)=>{o.d(e,{A:()=>f});var n=o(848),r=o(723),i=o(351),s=o(87),a=o(143),c=o(692),l=o(427),d=o(455),p=o.n(d),u=o(814);const f=()=>{const[t,e]=(0,s.useState)(""),{editPost:o,savePost:d}=(0,a.useDispatch)(u.FI),{createNotice:f,createErrorNotice:h,removeNotice:A}=(0,a.useDispatch)(c.store),{postId:b,postContent:v,postHeadline:x,notices:m}=(0,a.useSelect)(t=>{var e;const{getNotices:o}=t(c.store),{getCurrentPostId:n,getEditedPostContent:r,getEditedPostAttribute:i}=t(u.FI);return{postId:n(),postContent:r(),postHeadline:null===(e=i("meta"))||void 0===e?void 0:e.apbe_headline,notices:o()}},[]);return(0,s.useEffect)(()=>{e(x)},[x]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,r.__)("Headline","ai-plus-block-editor")})}),(0,n.jsx)(l.TextareaControl,{rows:4,value:t,onChange:t=>e(t),__nextHasNoMarginBottom:!0}),(0,n.jsxs)("div",{className:"apbe-button-group",children:[(0,n.jsx)(l.Button,{variant:"primary",onClick:()=>{return t=void 0,n=void 0,s=function*(){m.forEach(t=>A(t.id)),f("info",(0,r.__)("AI is generating text, please hold on for a bit.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-info",type:"snackbar"});try{const t=(yield p()({path:"/ai-plus-block-editor/v1/sidebar",method:"POST",data:{id:b,text:(null==v?void 0:v.text)||v,feature:"headline"}})).trim().replace(/^"|"$/g,"");(()=>{let o=1;return new Promise(n=>{const r=setInterval(()=>{t.length===o&&(clearInterval(r),n(t)),e(t.substring(0,o)),o++},5)})})().then(t=>{o({meta:{apbe_headline:t}})}),A("apbe-info")}catch(t){A("apbe-info"),h((0,r.__)("Error! Failed to fetch Headline. Please check your error logs or console for more info.","ai-plus-block-editor")),console.error(t.message)}},new((i=void 0)||(i=Promise))(function(e,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(t){t(o)})).then(r,a)}c((s=s.apply(t,n||[])).next())});var t,n,i,s},children:(0,r.__)("Generate","ai-plus-block-editor")}),(0,n.jsx)(l.Button,{variant:"secondary",onClick:()=>{let e=1;new Promise(n=>{const r=setInterval(()=>{e===t.length&&(clearInterval(r),n(t)),o({title:t.substring(0,e)}),e++},5)}).then(t=>{o({meta:{apbe_headline:t}}),d()})},children:(0,n.jsx)(l.Icon,{icon:i.A})})]})]})}},953:(t,e,o)=>{var n=o(848),r=o(723),i=o(830),s=o(87),a=o(427),c=o(279),l=o(309),d=o(922);o(533),(0,c.registerPlugin)("ai-plus-block-editor",{render:()=>(0,n.jsxs)(s.Fragment,{children:[(0,n.jsx)(l.PluginSidebarMoreMenuItem,{icon:i.A,target:"apbe-sidebar",children:(0,r.__)("AI + Block Editor","ai-plus-block-editor")}),(0,n.jsx)(l.PluginSidebar,{name:"apbe-sidebar",title:(0,r.__)("AI + Block Editor","ai-plus-block-editor"),icon:i.A,children:(0,n.jsx)(a.PanelBody,{children:(0,n.jsx)("div",{className:"apbe-sidebar",children:(0,n.jsxs)("ul",{children:[(0,n.jsx)("li",{children:(0,n.jsx)(d.ij,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.$j,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.Mw,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.kW,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.BD,{})}),(0,n.jsx)("li",{children:(0,n.jsx)(d.Gz,{})})]})})})})]})})},973:(t,e,o)=>{o.d(e,{A:()=>p});var n=o(848),r=o(87),i=o(143),s=o(723),a=o(427),c=o(692),l=o(455),d=o.n(l);const p=()=>{const{createNotice:t}=(0,i.useDispatch)(c.store),[e,o]=(0,r.useState)(apbe.provider||"");return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{children:(0,n.jsx)("strong",{children:(0,s.__)("Switch AI Provider","ai-plus-block-editor")})}),(0,n.jsx)(a.SelectControl,{label:null,value:e,options:(null===apbe||void 0===apbe?void 0:apbe.providers)||[],onChange:e=>{return n=void 0,r=void 0,a=function*(){o(e);try{yield d()({path:"/ai-plus-block-editor/v1/switcher",method:"POST",data:{provider:e}}),t("success",(0,s.__)("Success! AI Provider switched successfully.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-success",type:"snackbar"})}catch(e){t("error",(0,s.__)("Error! Failed to switch AI Provider.","ai-plus-block-editor"),{isDismissible:!0,id:"apbe-error",type:"snackbar"}),console.error(e.message)}},new((i=void 0)||(i=Promise))(function(t,e){function o(t){try{c(a.next(t))}catch(t){e(t)}}function s(t){try{c(a.throw(t))}catch(t){e(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a},id:"switcher",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}},e={};function o(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={id:n,exports:{}};return t[n](i,i.exports,o),i.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.nc=void 0,o(213),o(953)})();
    22//# sourceMappingURL=app.js.map
  • ai-plus-block-editor/trunk/dist/app.js.map

    r3365021 r3376557  
    1 {"version":3,"file":"app.js","mappings":"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","sources":["webpack://ai-plus-block-editor/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://ai-plus-block-editor/./src/components/Social.tsx","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://ai-plus-block-editor/external window [\"wp\",\"element\"]","webpack://ai-plus-block-editor/./src/styles/app.scss","webpack://ai-plus-block-editor/./src/utils/index.tsx","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://ai-plus-block-editor/external window [\"wp\",\"data\"]","webpack://ai-plus-block-editor/./src/core/AiTone.tsx","webpack://ai-plus-block-editor/./src/components/Summary.tsx","webpack://ai-plus-block-editor/external window [\"wp\",\"plugins\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"editPost\"]","webpack://ai-plus-block-editor/./node_modules/css-loader/dist/runtime/api.js","webpack://ai-plus-block-editor/./node_modules/@wordpress/icons/build-module/library/check.js","webpack://ai-plus-block-editor/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://ai-plus-block-editor/external window [\"wp\",\"components\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"apiFetch\"]","webpack://ai-plus-block-editor/./src/components/Slug.tsx","webpack://ai-plus-block-editor/./src/styles/app.scss?4dc7","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://ai-plus-block-editor/external window [\"wp\",\"primitives\"]","webpack://ai-plus-block-editor/external window \"React\"","webpack://ai-plus-block-editor/external window [\"wp\",\"hooks\"]","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://ai-plus-block-editor/external window [\"wp\",\"notices\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"blockEditor\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"i18n\"]","webpack://ai-plus-block-editor/./src/utils/store.ts","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://ai-plus-block-editor/./node_modules/@wordpress/icons/build-module/library/verse.js","webpack://ai-plus-block-editor/./node_modules/react/jsx-runtime.js","webpack://ai-plus-block-editor/./src/components/SEO.tsx","webpack://ai-plus-block-editor/./src/components/Headline.tsx","webpack://ai-plus-block-editor/./src/core/AiSideBar.tsx","webpack://ai-plus-block-editor/./src/components/Switcher.tsx","webpack://ai-plus-block-editor/webpack/bootstrap","webpack://ai-plus-block-editor/webpack/runtime/compat get default export","webpack://ai-plus-block-editor/webpack/runtime/define property getters","webpack://ai-plus-block-editor/webpack/runtime/hasOwnProperty shorthand","webpack://ai-plus-block-editor/webpack/runtime/nonce"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Social.\n *\n * This Component returns the Social media\n * trending hash-tags & keywords.\n *\n * @since 1.5.0\n *\n * @return {JSX.Element} Social Hashtags.\n */\nconst Social = (): JSX.Element => {\n\tconst [ social, setSocial ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSocial, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSocial: getEditedPostAttribute( 'meta' )?.apbe_social,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSocial( postSocial );\n\t}, [ postSocial ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.5.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSocial: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'social',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated social media hashtags and keywords\n\t\t\t * when the Animation responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.5.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSocial.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSocial );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSocial( aiSocial.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSocial ) => {\n\t\t\t\teditPost( { meta: { apbe_social: newSocial } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Hashtags. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.5.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { meta: { apbe_social: social } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'Social Media Hashtags', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ social }\n\t\t\t\tonChange={ ( text ) => setSocial( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Social;\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n  if (nonce) {\n    styleElement.setAttribute(\"nonce\", nonce);\n  }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n  return result;\n}\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n    identifiers.push(identifier);\n  }\n  return identifiers;\n}\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n  return updater;\n}\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n    var newLastIdentifiers = modulesToDom(newList, options);\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n      var _index = getIndexByIdentifier(_identifier);\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n    lastIdentifiers = newLastIdentifiers;\n  };\n};","module.exports = window[\"wp\"][\"element\"];","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.apbe-toast{position:fixed;background:#000;color:#fff;bottom:-50px;opacity:0;left:15px;padding:20px;border-radius:5px;font-size:13px;z-index:1;box-shadow:0 0 15px rgba(0,0,0,.1);animation:slideUp .5s ease-out forwards}.apbe-sidebar p{margin-top:0 !important;margin-bottom:7.5px !important}.apbe-sidebar button{height:auto;padding:11.5px 15px;justify-content:center}.apbe-sidebar ul{margin:0;padding:0;display:flex;flex-direction:column}.apbe-sidebar ul li{padding:0 0 22.5px 0;margin:0}.apbe-sidebar ul li:first-child{padding-top:0}.apbe-button-group{display:flex;justify-content:space-between;margin-top:8.5px}.apbe-button-group button{height:38px;border-radius:3px}.apbe-button-group button.is-secondary{padding-left:9px;padding-right:9px}@keyframes slideUp{to{bottom:40px;opacity:1}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/app.scss\"],\"names\":[],\"mappings\":\"AACC,YACC,cAAA,CACA,eAAA,CACA,UAAA,CACA,YAAA,CACA,SAAA,CACA,SAAA,CACA,YAAA,CACA,iBAAA,CACA,cAAA,CACA,SAAA,CACA,kCAAA,CACE,uCAAA,CAIF,gBACC,uBAAA,CACA,8BAAA,CAGD,qBACC,WAAA,CACA,mBAAA,CACA,sBAAA,CAGD,iBACC,QAAA,CACA,SAAA,CACA,YAAA,CACA,qBAAA,CAEA,oBACC,oBAAA,CACA,QAAA,CAEA,gCACC,aAAA,CAOH,mBACC,YAAA,CACA,6BAAA,CACA,gBAAA,CAEA,0BACC,WAAA,CACA,iBAAA,CAEA,uCACC,gBAAA,CACA,iBAAA,CAOL,mBACE,GACD,WAAA,CACG,SAAA,CAAA\",\"sourcesContent\":[\".apbe {\\n\\t&-toast {\\n\\t\\tposition: fixed;\\n\\t\\tbackground: #000;\\n\\t\\tcolor: #FFF;\\n\\t\\tbottom: -50px;\\n\\t\\topacity: 0;\\n\\t\\tleft: 15px;\\n\\t\\tpadding: 20px;\\n\\t\\tborder-radius: 5px;\\n\\t\\tfont-size: 13px;\\n\\t\\tz-index: 1;\\n\\t\\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.1);\\n  \\t\\tanimation: slideUp 0.5s ease-out forwards;\\n\\t}\\n\\n\\t&-sidebar {\\n\\t\\tp {\\n\\t\\t\\tmargin-top: 0 !important;\\n\\t\\t\\tmargin-bottom: 7.5px !important;\\n\\t\\t}\\n\\n\\t\\tbutton {\\n\\t\\t\\theight: auto;\\n\\t\\t\\tpadding: 11.5px 15px;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t}\\n\\n\\t\\tul {\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\n\\t\\t\\tli {\\n\\t\\t\\t\\tpadding: 0 0 22.5px 0;\\n\\t\\t\\t\\tmargin: 0;\\n\\n\\t\\t\\t\\t&:first-child {\\n\\t\\t\\t\\t\\tpadding-top: 0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&-button {\\n\\t\\t&-group {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: space-between;\\n\\t\\t\\tmargin-top: 8.5px;\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\theight: 38px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\n\\t\\t\\t\\t&.is-secondary {\\n\\t\\t\\t\\t\\tpadding-left: 9px;\\n\\t\\t\\t\\t\\tpadding-right: 9px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n@keyframes slideUp {\\n  to {\\n\\tbottom: 40px;\\n    opacity: 1;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { __ } from '@wordpress/i18n';\nimport { applyFilters } from '@wordpress/hooks';\n\ntype DropdownOption = {\n\ttitle: string;\n\tonClick: () => void;\n};\n\n/**\n * Get Options.\n *\n * This function filters the Block Menu AI Options\n * available when the user selects a block.\n *\n * @since 1.1.0\n *\n * @param {Function} getTone Function to get the tone.\n * @return {DropdownOption[]} Dropdown options.\n */\nexport const getBlockMenuOptions = ( getTone: Function ): DropdownOption[] => {\n\tconst menu = [];\n\n\t/**\n\t * Filter Menu Options.\n\t *\n\t * By default the passed object should contain\n\t * menu options.\n\t *\n\t * @since 1.1.0\n\t * @since 1.5.0 Pass in menu options before returning menu.\n\t *\n\t * @param {Object} menu Menu options.\n\t * @return {Object}\n\t */\n\tconst options = applyFilters( 'apbe.blockMenuOptions', {\n\t\tcasual: __( 'Use Casual Tone', 'ai-plus-block-editor' ),\n\t\tofficial: __( 'Use Official Tone', 'ai-plus-block-editor' ),\n\t\tdescriptive: __( 'Use Descriptive Tone', 'ai-plus-block-editor' ),\n\t\tnarrative: __( 'Use Narrative Tone', 'ai-plus-block-editor' ),\n\t\taggressive: __( 'Use Aggressive Tone', 'ai-plus-block-editor' ),\n\t} );\n\n\tObject.keys( options ).forEach( ( key ) => {\n\t\tmenu.push( {\n\t\t\ttitle: options[ key ],\n\t\t\tonClick: () => {\n\t\t\t\tgetTone( key );\n\t\t\t},\n\t\t} );\n\t} );\n\n\treturn menu;\n};\n\n/**\n * Get Allowed Blocks.\n *\n * This function filters the allowed blocks\n * available to the AI tone feature.\n *\n * @since 1.4.0\n *\n * @return {string[]} Allowed blocks.\n */\nexport const getAllowedBlocks = (): string[] => {\n\tconst allowedBlocks = [ 'core/paragraph' ];\n\n\t/**\n\t * Filter Allowed Blocks.\n\t *\n\t * By default the passed option should contain\n\t * allowed blocks.\n\t *\n\t * @since 1.4.0\n\t *\n\t * @param {string[]} allowedBlocks Allowed blocks array.\n\t * @return {string[]}\n\t */\n\treturn applyFilters( 'apbe.allowedBlocks', allowedBlocks ) as string[];\n};\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\nmodule.exports = styleTagTransform;","module.exports = window[\"wp\"][\"data\"];","import { __ } from '@wordpress/i18n';\nimport { verse } from '@wordpress/icons';\nimport { addFilter } from '@wordpress/hooks';\nimport { BlockControls } from '@wordpress/block-editor';\nimport { select, dispatch } from '@wordpress/data';\nimport { ToolbarGroup, ToolbarDropdownMenu } from '@wordpress/components';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps, selectBlockProps, noticeProps } from '../utils/types';\nimport { getAllowedBlocks, getBlockMenuOptions } from '../utils';\nimport { editorStore, noticesStore, blockEditorStore } from '../utils/store';\n\nimport '../styles/app.scss';\n\n/**\n * Filter Blocks with AI.\n *\n * @since 1.0.0\n *\n * @param {Object} settings Original block settings\n * @return {Object}         Filtered block settings\n */\nexport const filterBlockTypesWithAI = ( settings: any ): object => {\n\tconst { name, edit } = settings;\n\n\tif ( getAllowedBlocks().indexOf( name ) === -1 ) {\n\t\treturn settings;\n\t}\n\n\tsettings.edit = ( props: any ) => {\n\t\t/**\n\t\t * Get Tone Params.\n\t\t *\n\t\t * This function retrieves the current post ID,\n\t\t * selected block ID, and block content.\n\t\t *\n\t\t * @since 1.4.0\n\t\t * @return {Object} Object containing postId, blockId and blockContent.\n\t\t */\n\t\tconst getToneParams = (): any => {\n\t\t\tconst { getCurrentPostId } = select( editorStore ) as selectProps;\n\t\t\tconst { getSelectedBlock, getSelectedBlockClientId } = select(\n\t\t\t\tblockEditorStore\n\t\t\t) as selectBlockProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tblockId: getSelectedBlockClientId(),\n\t\t\t\tblockContent: getSelectedBlock()?.attributes?.content || '',\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Get AI generated tone.\n\t\t *\n\t\t * @since 1.0.0\n\t\t *\n\t\t * @param {string} newTone AI tone sent to LLM endpoint.\n\t\t * @return {void}\n\t\t */\n\t\tconst getTone = async ( newTone: string ): Promise< void > => {\n\t\t\tconst { postId, blockId, blockContent } = getToneParams();\n\t\t\tconst { createNotice, createErrorNotice, removeNotice } = dispatch(\n\t\t\t\tnoticesStore\n\t\t\t) as any;\n\t\t\tconst { updateBlockAttributes } = dispatch(\n\t\t\t\tblockEditorStore\n\t\t\t) as any;\n\t\t\tconst { getNotices } = select( noticesStore ) as noticeProps;\n\n\t\t\tcreateNotice(\n\t\t\t\t'success',\n\t\t\t\t__(\n\t\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-tone-success',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\n\t\t\ttry {\n\t\t\t\tconst aiTone: string = await apiFetch( {\n\t\t\t\t\tpath: '/ai-plus-block-editor/v1/tone',\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tid: postId,\n\t\t\t\t\t\ttext: blockContent?.text || blockContent,\n\t\t\t\t\t\tnewTone,\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t\tlet limit = 1;\n\t\t\t\tconst displayWithEffect = setInterval( () => {\n\t\t\t\t\tif ( aiTone.length === limit ) {\n\t\t\t\t\t\tclearInterval( displayWithEffect );\n\t\t\t\t\t}\n\t\t\t\t\tupdateBlockAttributes( blockId, {\n\t\t\t\t\t\tcontent: aiTone.substring( 0, limit ),\n\t\t\t\t\t} );\n\t\t\t\t\tlimit++;\n\t\t\t\t}, 5 );\n\n\t\t\t\tgetNotices().forEach( ( notice: any ) =>\n\t\t\t\t\tremoveNotice( notice.id )\n\t\t\t\t);\n\t\t\t} catch ( e ) {\n\t\t\t\tcreateErrorNotice( e.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarDropdownMenu\n\t\t\t\t\t\t\ticon={ verse }\n\t\t\t\t\t\t\tlabel={ __( 'AI + Block Editor' ) }\n\t\t\t\t\t\t\tcontrols={ getBlockMenuOptions( getTone ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t\t{ edit( props ) }\n\t\t\t</>\n\t\t);\n\t};\n\n\treturn settings;\n};\n\naddFilter( 'blocks.registerBlockType', 'apbe/ai', filterBlockTypesWithAI );\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Summary.\n *\n * This Component returns the Summary\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Summary.\n */\nconst Summary = (): JSX.Element => {\n\tconst [ summary, setSummary ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSummary, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSummary: getEditedPostAttribute( 'meta' )?.apbe_summary,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSummary( postSummary );\n\t}, [ postSummary ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSummary: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'summary',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated summary when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSummary.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSummary );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSummary( aiSummary.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSummary ) => {\n\t\t\t\teditPost( { excerpt: newSummary } );\n\t\t\t\teditPost( { meta: { apbe_summary: newSummary } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Summary. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { excerpt: summary } );\n\t\teditPost( { meta: { apbe_summary: summary } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Summary', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ summary }\n\t\t\t\tonChange={ ( text ) => setSummary( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Summary;\n","module.exports = window[\"wp\"][\"plugins\"];","module.exports = window[\"wp\"][\"editPost\"];","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n  var list = [];\n\n  // return the list of modules as css string\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = \"\";\n      var needLayer = typeof item[5] !== \"undefined\";\n      if (item[4]) {\n        content += \"@supports (\".concat(item[4], \") {\");\n      }\n      if (item[2]) {\n        content += \"@media \".concat(item[2], \" {\");\n      }\n      if (needLayer) {\n        content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n      }\n      content += cssWithMappingToString(item);\n      if (needLayer) {\n        content += \"}\";\n      }\n      if (item[2]) {\n        content += \"}\";\n      }\n      if (item[4]) {\n        content += \"}\";\n      }\n      return content;\n    }).join(\"\");\n  };\n\n  // import a list of modules into the list\n  list.i = function i(modules, media, dedupe, supports, layer) {\n    if (typeof modules === \"string\") {\n      modules = [[null, modules, undefined]];\n    }\n    var alreadyImportedModules = {};\n    if (dedupe) {\n      for (var k = 0; k < this.length; k++) {\n        var id = this[k][0];\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n    for (var _k = 0; _k < modules.length; _k++) {\n      var item = [].concat(modules[_k]);\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        continue;\n      }\n      if (typeof layer !== \"undefined\") {\n        if (typeof item[5] === \"undefined\") {\n          item[5] = layer;\n        } else {\n          item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n          item[5] = layer;\n        }\n      }\n      if (media) {\n        if (!item[2]) {\n          item[2] = media;\n        } else {\n          item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n          item[2] = media;\n        }\n      }\n      if (supports) {\n        if (!item[4]) {\n          item[4] = \"\".concat(supports);\n        } else {\n          item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n          item[4] = supports;\n        }\n      }\n      list.push(item);\n    }\n  };\n  return list;\n};","import { createElement } from \"react\";\n/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\nconst check = createElement(SVG, {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 24 24\"\n}, createElement(Path, {\n  d: \"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z\"\n}));\nexport default check;\n//# sourceMappingURL=check.js.map","\"use strict\";\n\nmodule.exports = function (item) {\n  var content = item[1];\n  var cssMapping = item[3];\n  if (!cssMapping) {\n    return content;\n  }\n  if (typeof btoa === \"function\") {\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n    var sourceMapping = \"/*# \".concat(data, \" */\");\n    return [content].concat([sourceMapping]).join(\"\\n\");\n  }\n  return [content].join(\"\\n\");\n};","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"apiFetch\"];","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Slug.\n *\n * This Component returns the Slug\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Slug.\n */\nconst Slug = (): JSX.Element => {\n\tconst [ slug, setSlug ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSlug, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSlug: getEditedPostAttribute( 'meta' )?.apbe_slug,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSlug( postSlug );\n\t}, [ postSlug ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSlug: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'slug',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated slug when the Animation responsible\n\t\t\t * for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSlug.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSlug );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSlug( aiSlug.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSlug ) => {\n\t\t\t\teditPost( { slug: newSlug } );\n\t\t\t\teditPost( { meta: { apbe_slug: newSlug } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Slug. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { slug } );\n\t\teditPost( { meta: { apbe_slug: slug } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Slug', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextControl\n\t\t\t\tplaceholder=\"your-article-slug\"\n\t\t\t\tvalue={ slug }\n\t\t\t\tonChange={ ( text ) => setSlug( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t__next40pxDefaultSize\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Slug;\n","\n      import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./app.scss\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./app.scss\";\n       export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement(\"style\");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\nmodule.exports = insertStyleElement;","module.exports = window[\"wp\"][\"primitives\"];","module.exports = window[\"React\"];","module.exports = window[\"wp\"][\"hooks\"];","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next  */\nfunction getTarget(target) {\n  if (typeof memo[target] === \"undefined\") {\n    var styleTarget = document.querySelector(target);\n\n    // Special case to return head of iframe instead of iframe itself\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n    memo[target] = styleTarget;\n  }\n  return memo[target];\n}\n\n/* istanbul ignore next  */\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n  if (!target) {\n    throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n  }\n  target.appendChild(style);\n}\nmodule.exports = insertBySelector;","module.exports = window[\"wp\"][\"notices\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"i18n\"];","export const editorStore = 'core/editor';\nexport const noticesStore = 'core/notices';\nexport const blockEditorStore = 'core/block-editor';\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = \"\";\n  if (obj.supports) {\n    css += \"@supports (\".concat(obj.supports, \") {\");\n  }\n  if (obj.media) {\n    css += \"@media \".concat(obj.media, \" {\");\n  }\n  var needLayer = typeof obj.layer !== \"undefined\";\n  if (needLayer) {\n    css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n  }\n  css += obj.css;\n  if (needLayer) {\n    css += \"}\";\n  }\n  if (obj.media) {\n    css += \"}\";\n  }\n  if (obj.supports) {\n    css += \"}\";\n  }\n  var sourceMap = obj.sourceMap;\n  if (sourceMap && typeof btoa !== \"undefined\") {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  }\n\n  // For old IE\n  /* istanbul ignore if  */\n  options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n  styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next  */\nfunction domAPI(options) {\n  if (typeof document === \"undefined\") {\n    return {\n      update: function update() {},\n      remove: function remove() {}\n    };\n  }\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\nmodule.exports = domAPI;","import { createElement } from \"react\";\n/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\nconst verse = createElement(SVG, {\n  viewBox: \"0 0 24 24\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, createElement(Path, {\n  d: \"M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z\"\n}));\nexport default verse;\n//# sourceMappingURL=verse.js.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * SEO.\n *\n * This Component returns the SEO keywords,\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} SEO Keywords.\n */\nconst SEO = (): JSX.Element => {\n\tconst [ keywords, setKeywords ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postKeywords, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostKeywords:\n\t\t\t\t\tgetEditedPostAttribute( 'meta' )?.apbe_seo_keywords,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetKeywords( postKeywords );\n\t}, [ postKeywords ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiKeywords: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'keywords',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated SEO keywords when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiKeywords.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiKeywords );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetKeywords( aiKeywords.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newKeywords ) => {\n\t\t\t\teditPost( { meta: { apbe_seo_keywords: newKeywords } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch SEO Keywords. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { meta: { apbe_seo_keywords: keywords } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'SEO Keywords', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 7 }\n\t\t\t\tvalue={ keywords }\n\t\t\t\tonChange={ ( text ) => setKeywords( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default SEO;\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, Icon, TextareaControl } from '@wordpress/components';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Headline.\n *\n * This Component returns the Headline\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Headline.\n */\nconst Headline = (): JSX.Element => {\n\tconst [ headline, setHeadline ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postHeadline, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostHeadline: getEditedPostAttribute( 'meta' )?.apbe_headline,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetHeadline( postHeadline );\n\t}, [ postHeadline ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst response: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'headline',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst aiHeadline = response.trim().replace( /^\"|\"$/g, '' );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated headline when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiHeadline.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiHeadline );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetHeadline( aiHeadline.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newHeadline ) => {\n\t\t\t\teditPost( { meta: { apbe_headline: newHeadline } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Headline. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\tlet limit = 1;\n\n\t\t/**\n\t\t * This function returns a promise that\n\t\t * resolves to the headline when the Animation responsible\n\t\t * for showing the headline is completed.\n\t\t *\n\t\t * @since 1.2.0\n\t\t *\n\t\t * @return { Promise<string> } Animated text.\n\t\t */\n\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\tif ( limit === headline.length ) {\n\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\tresolve( headline );\n\t\t\t\t\t}\n\t\t\t\t\teditPost( { title: headline.substring( 0, limit ) } );\n\t\t\t\t\tlimit++;\n\t\t\t\t}, 5 );\n\t\t\t} );\n\t\t};\n\n\t\tshowAnimatedAiText().then( ( newHeadline ) => {\n\t\t\teditPost( { meta: { apbe_headline: newHeadline } } );\n\t\t\tsavePost();\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Headline', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ headline }\n\t\t\t\tonChange={ ( text ) => setHeadline( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Headline;\n","import { __ } from '@wordpress/i18n';\nimport { verse } from '@wordpress/icons';\nimport { Fragment } from '@wordpress/element';\nimport { PanelBody } from '@wordpress/components';\nimport { registerPlugin } from '@wordpress/plugins';\nimport { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post';\n\nimport { SEO, Slug, Summary, Headline, Switcher, Social } from '../components';\n\nimport '../styles/app.scss';\n\n/**\n * AI SideBar.\n *\n * This function returns a JSX component that comprises\n * the Plugin's Sidebar and controls.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} AI SideBar.\n */\nconst AiSideBar = (): JSX.Element => {\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginSidebarMoreMenuItem icon={ verse } target=\"apbe-sidebar\">\n\t\t\t\t{ __( 'AI + Block Editor', 'ai-plus-block-editor' ) }\n\t\t\t</PluginSidebarMoreMenuItem>\n\t\t\t<PluginSidebar\n\t\t\t\tname=\"apbe-sidebar\"\n\t\t\t\ttitle={ __( 'AI + Block Editor', 'ai-plus-block-editor' ) }\n\t\t\t\ticon={ verse }\n\t\t\t>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t<div className=\"apbe-sidebar\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Switcher />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Headline />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Slug />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<SEO />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Summary />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Social />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</PanelBody>\n\t\t\t</PluginSidebar>\n\t\t</Fragment>\n\t);\n};\n\nregisterPlugin( 'ai-plus-block-editor', { render: AiSideBar } );\n","import { useState } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { SelectControl } from '@wordpress/components';\nimport { store as noticesStore } from '@wordpress/notices';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Switcher.\n *\n * This Component handles the switching of AI providers,\n * for e.g. Open AI -> Gemini and so on.\n *\n * @since 1.5.0\n *\n * @return {JSX.Element} Switcher.\n */\nconst Switcher = (): JSX.Element => {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst [ provider, setProvider ] = useState< string >( apbe.provider || '' );\n\n\tconst handleChange = async ( value: string ) => {\n\t\tsetProvider( value );\n\n\t\ttry {\n\t\t\tawait apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/switcher',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tprovider: value,\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tcreateNotice(\n\t\t\t\t'success',\n\t\t\t\t__(\n\t\t\t\t\t'Success! AI Provider switched successfully.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-success',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t} catch ( e ) {\n\t\t\tcreateNotice(\n\t\t\t\t'error',\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to switch AI Provider.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-error',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'Switch AI Provider', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<SelectControl\n\t\t\t\tlabel={ null }\n\t\t\t\tvalue={ provider }\n\t\t\t\toptions={ [\n\t\t\t\t\t{ label: 'ChatGPT', value: 'OpenAI' },\n\t\t\t\t\t{ label: 'Gemini', value: 'Gemini' },\n\t\t\t\t\t{ label: 'DeepSeek', value: 'DeepSeek' },\n\t\t\t\t\t{ label: 'Grok', value: 'Grok' },\n\t\t\t\t] }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tid=\"switcher\"\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t</>\n\t);\n};\n\nexport default Switcher;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nc = undefined;"],"names":["f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","exports","Fragment","jsx","jsxs","social","setSocial","useState","editPost","savePost","useDispatch","createNotice","createErrorNotice","removeNotice","postId","postContent","postSocial","notices","useSelect","select","getNotices","getCurrentPostId","getEditedPostContent","getEditedPostAttribute","apbe_social","useEffect","__","TextareaControl","rows","value","onChange","text","__nextHasNoMarginBottom","className","Button","variant","onClick","forEach","notice","id","isDismissible","aiSocial","path","method","data","feature","limit","Promise","resolve","animatedTextInterval","setInterval","length","clearInterval","substring","showAnimatedAiText","then","newSocial","meta","console","error","message","Icon","icon","module","styleElement","nonce","setAttribute","stylesInDOM","getIndexByIdentifier","identifier","result","i","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","push","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","window","___CSS_LOADER_EXPORT___","getBlockMenuOptions","getTone","menu","applyFilters","casual","official","descriptive","narrative","aggressive","keys","title","getAllowedBlocks","styleSheet","cssText","firstChild","removeChild","appendChild","document","createTextNode","addFilter","settings","name","edit","indexOf","BlockControls","ToolbarGroup","ToolbarDropdownMenu","label","controls","newTone","blockId","blockContent","getSelectedBlock","getSelectedBlockClientId","attributes","content","getToneParams","dispatch","updateBlockAttributes","aiTone","displayWithEffect","summary","setSummary","postSummary","apbe_summary","aiSummary","newSummary","excerpt","cssWithMappingToString","toString","this","map","needLayer","join","modules","dedupe","undefined","alreadyImportedModules","_k","createElement","SVG","xmlns","viewBox","Path","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","sourceMapping","slug","setSlug","postSlug","apbe_slug","TextControl","placeholder","__next40pxDefaultSize","aiSlug","newSlug","styleTagTransform","setAttributes","insert","insertStyleElement","locals","element","memo","style","target","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","getTarget","Error","editorStore","noticesStore","blockEditorStore","apply","parentNode","removeStyleElement","keywords","setKeywords","postKeywords","apbe_seo_keywords","aiKeywords","newKeywords","headline","setHeadline","postHeadline","apbe_headline","aiHeadline","trim","replace","newHeadline","registerPlugin","render","PluginSidebarMoreMenuItem","PluginSidebar","PanelBody","provider","setProvider","apbe","SelectControl","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","prop","nc"],"sourceRoot":""}
     1{"version":3,"file":"app.js","mappings":"uCASa,IAAIA,EAAE,EAAQ,KAASC,EAAEC,OAAOC,IAAI,iBAAiBC,EAAEF,OAAOC,IAAI,kBAAkBE,EAAEC,OAAOC,UAAUC,eAAeC,EAAET,EAAEU,mDAAmDC,kBAAkBC,EAAE,CAACC,KAAI,EAAGC,KAAI,EAAGC,QAAO,EAAGC,UAAS,GAChP,SAASC,EAAEC,EAAEC,EAAEC,GAAG,IAAIC,EAAEC,EAAE,CAAC,EAAEC,EAAE,KAAKC,EAAE,KAAiF,IAAIH,UAAhF,IAASD,IAAIG,EAAE,GAAGH,QAAG,IAASD,EAAEN,MAAMU,EAAE,GAAGJ,EAAEN,UAAK,IAASM,EAAEL,MAAMU,EAAEL,EAAEL,KAAcK,EAAEd,EAAEoB,KAAKN,EAAEE,KAAKT,EAAEJ,eAAea,KAAKC,EAAED,GAAGF,EAAEE,IAAI,GAAGH,GAAGA,EAAEQ,aAAa,IAAIL,KAAKF,EAAED,EAAEQ,kBAAe,IAASJ,EAAED,KAAKC,EAAED,GAAGF,EAAEE,IAAI,MAAM,CAACM,SAAS1B,EAAE2B,KAAKV,EAAEL,IAAIU,EAAET,IAAIU,EAAEK,MAAMP,EAAEQ,OAAOrB,EAAEsB,QAAQ,CAACC,EAAQC,SAAS7B,EAAE4B,EAAQE,IAAIjB,EAAEe,EAAQG,KAAKlB,C,6HCW1W,MA6IA,EA7Ie,KACd,MAAQmB,EAAQC,IAAc,IAAAC,UAAU,KAClC,SAAEC,EAAQ,SAAEC,IAAa,IAAAC,aAAa,OACtC,aAAEC,EAAY,kBAAEC,EAAiB,aAAEC,IACxC,IAAAH,aAAa,UACR,OAAEI,EAAM,YAAEC,EAAW,WAAEC,EAAU,QAAEC,IAAY,IAAAC,WAClDC,I,MACD,MAAM,WAAEC,GAAeD,EAAQ,UACzB,iBACLE,EAAgB,qBAChBC,EAAoB,uBACpBC,GACGJ,EAAQ,MAEZ,MAAO,CACNL,OAAQO,IACRN,YAAaO,IACbN,WAA4C,QAAhC,EAAAO,EAAwB,eAAQ,eAAEC,YAC9CP,QAASG,MAGX,IA+FD,OA5FA,IAAAK,WAAW,KACVnB,EAAWU,IACT,CAAEA,KA2FJ,iCACC,wBACC,6BACG,IAAAU,IAAI,wBAAyB,6BAGjC,SAAC,EAAAC,gBAAe,CACfC,KAAO,EACPC,MAAQxB,EACRyB,SAAaC,GAAUzB,EAAWyB,GAClCC,yBAAuB,KAExB,iBAAKC,UAAU,oBAAmB,WACjC,SAAC,EAAAC,OAAM,CAACC,QAAQ,UAAUC,QA9FT,KAA6B,O,OAAD,E,OAAA,E,EAAA,YAC/CnB,EAAQoB,QAAWC,GAAYzB,EAAcyB,EAAOC,KACpD5B,EACC,QACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,YACJ1C,KAAM,aAIR,IACC,MAAM4C,QAAyB,IAAU,CACxCC,KAAM,mCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAMhB,aAAW,EAAXA,EAAagB,OAAQhB,EAC3B8B,QAAS,YAagB,MAC1B,IAAIC,EAAQ,EAEZ,OAAO,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpCT,EAASU,SAAWL,IACxBM,cAAeH,GACfD,EAASP,IAEVnC,EAAWmC,EAASY,UAAW,EAAGP,IAClCA,KACE,MAILQ,GAAqBC,KAAQC,IAC5BhD,EAAU,CAAEiD,KAAM,CAAEjC,YAAagC,OAElC3C,EAAc,YACf,CAAE,MAAQrB,GACTqB,EAAc,aACdD,GACC,IAAAc,IACC,0FACA,yBAIFgC,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAjEgD,K,2QA8FE,UAC5C,IAAAlC,IAAI,WAAY,2BAEnB,SAAC,EAAAQ,OAAM,CAACC,QAAQ,YAAYC,QAtBP,KACvB5B,EAAU,CAAEiD,KAAM,CAAEjC,YAAanB,KACjCI,KAoBuD,UACpD,SAAC,EAAAoD,KAAI,CAACC,KAAO,c,eClJlBC,EAAO9D,QANP,SAAwC+D,GACtC,IAAIC,EAAmD,KACnDA,GACFD,EAAaE,aAAa,QAASD,EAEvC,C,SCNA,IAAIE,EAAc,GAClB,SAASC,EAAqBC,GAE5B,IADA,IAAIC,GAAU,EACLC,EAAI,EAAGA,EAAIJ,EAAYhB,OAAQoB,IACtC,GAAIJ,EAAYI,GAAGF,aAAeA,EAAY,CAC5CC,EAASC,EACT,KACF,CAEF,OAAOD,CACT,CACA,SAASE,EAAaC,EAAMC,GAG1B,IAFA,IAAIC,EAAa,CAAC,EACdC,EAAc,GACTL,EAAI,EAAGA,EAAIE,EAAKtB,OAAQoB,IAAK,CACpC,IAAIM,EAAOJ,EAAKF,GACZhC,EAAKmC,EAAQI,KAAOD,EAAK,GAAKH,EAAQI,KAAOD,EAAK,GAClDE,EAAQJ,EAAWpC,IAAO,EAC1B8B,EAAa,GAAGW,OAAOzC,EAAI,KAAKyC,OAAOD,GAC3CJ,EAAWpC,GAAMwC,EAAQ,EACzB,IAAIE,EAAoBb,EAAqBC,GACzCa,EAAM,CACRC,IAAKN,EAAK,GACVO,MAAOP,EAAK,GACZQ,UAAWR,EAAK,GAChBS,SAAUT,EAAK,GACfU,MAAOV,EAAK,IAEd,IAA2B,IAAvBI,EACFd,EAAYc,GAAmBO,aAC/BrB,EAAYc,GAAmBQ,QAAQP,OAClC,CACL,IAAIO,EAAUC,EAAgBR,EAAKR,GACnCA,EAAQiB,QAAUpB,EAClBJ,EAAYyB,OAAOrB,EAAG,EAAG,CACvBF,WAAYA,EACZoB,QAASA,EACTD,WAAY,GAEhB,CACAZ,EAAYiB,KAAKxB,EACnB,CACA,OAAOO,CACT,CACA,SAASc,EAAgBR,EAAKR,GAC5B,IAAIoB,EAAMpB,EAAQqB,OAAOrB,GAYzB,OAXAoB,EAAIE,OAAOd,GACG,SAAiBe,GAC7B,GAAIA,EAAQ,CACV,GAAIA,EAAOd,MAAQD,EAAIC,KAAOc,EAAOb,QAAUF,EAAIE,OAASa,EAAOZ,YAAcH,EAAIG,WAAaY,EAAOX,WAAaJ,EAAII,UAAYW,EAAOV,QAAUL,EAAIK,MACzJ,OAEFO,EAAIE,OAAOd,EAAMe,EACnB,MACEH,EAAII,QAER,CAEF,CACAnC,EAAO9D,QAAU,SAAUwE,EAAMC,GAG/B,IAAIyB,EAAkB3B,EADtBC,EAAOA,GAAQ,GADfC,EAAUA,GAAW,CAAC,GAGtB,OAAO,SAAgB0B,GACrBA,EAAUA,GAAW,GACrB,IAAK,IAAI7B,EAAI,EAAGA,EAAI4B,EAAgBhD,OAAQoB,IAAK,CAC/C,IACI8B,EAAQjC,EADK+B,EAAgB5B,IAEjCJ,EAAYkC,GAAOb,YACrB,CAEA,IADA,IAAIc,EAAqB9B,EAAa4B,EAAS1B,GACtC6B,EAAK,EAAGA,EAAKJ,EAAgBhD,OAAQoD,IAAM,CAClD,IACIC,EAASpC,EADK+B,EAAgBI,IAEK,IAAnCpC,EAAYqC,GAAQhB,aACtBrB,EAAYqC,GAAQf,UACpBtB,EAAYyB,OAAOY,EAAQ,GAE/B,CACAL,EAAkBG,CACpB,CACF,C,SCnFAvC,EAAO9D,QAAUwG,OAAW,GAAW,O,gECGnCC,E,MAA0B,GAA4B,KAE1DA,EAAwBb,KAAK,CAAC9B,EAAOxB,GAAI,qxBAAsxB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mCAAmC,MAAQ,GAAG,SAAW,+ZAA+Z,eAAiB,CAAC,2pCAA2pC,WAAa,MAE5+E,S,+DCYO,MAAMoE,EAAwBC,IACpC,MAAMC,EAAO,GAcPnC,GAAU,IAAAoC,cAAc,wBAAyB,CACtDC,QAAQ,IAAArF,IAAI,kBAAmB,wBAC/BsF,UAAU,IAAAtF,IAAI,oBAAqB,wBACnCuF,aAAa,IAAAvF,IAAI,uBAAwB,wBACzCwF,WAAW,IAAAxF,IAAI,qBAAsB,wBACrCyF,YAAY,IAAAzF,IAAI,sBAAuB,0BAYxC,OATAnD,OAAO6I,KAAM1C,GAAUrC,QAAWvD,IACjC+H,EAAKhB,KAAM,CACVwB,MAAO3C,EAAS5F,GAChBsD,QAAS,KACRwE,EAAS9H,QAKL+H,GAaKS,EAAmB,KAcxB,IAAAR,cAAc,qBAbC,CAAE,kB,UCpDzB/C,EAAO9D,QAVP,SAA2BkF,EAAKnB,GAC9B,GAAIA,EAAauD,WACfvD,EAAauD,WAAWC,QAAUrC,MAC7B,CACL,KAAOnB,EAAayD,YAClBzD,EAAa0D,YAAY1D,EAAayD,YAExCzD,EAAa2D,YAAYC,SAASC,eAAe1C,GACnD,CACF,C,UCZApB,EAAO9D,QAAUwG,OAAW,GAAQ,I,maCuIpC,IAAAqB,WAAW,2BAA4B,UAjHCC,IACvC,MAAM,KAAEC,EAAI,KAAEC,GAASF,EAEvB,OAA6C,KAAxC,SAAmBG,QAASF,KAIjCD,EAASE,KAASnI,IAwFhB,iCACC,SAAC,EAAAqI,cAAa,WACb,SAAC,EAAAC,aAAY,WACZ,SAAC,EAAAC,oBAAmB,CACnBvE,KAAO,IACPwE,OAAQ,IAAA5G,IAAI,qBACZ6G,UAAW,OA/DQC,GAAsC,OAAD,4BAC5D,MAAM,OAAE1H,EAAM,QAAE2H,EAAO,aAAEC,GAtBJ,M,QACrB,MAAM,iBAAErH,IAAqB,IAAAF,QAAQ,OAC/B,iBAAEwH,EAAgB,yBAAEC,IAA6B,IAAAzH,QACtD,MAGD,MAAO,CACNL,OAAQO,IACRoH,QAASG,IACTF,cAA4C,QAA9B,EAAkB,QAAlB,EAAAC,WAAkB,eAAEE,kBAAU,eAAEC,UAAW,KAahBC,IACpC,aAAEpI,EAAY,kBAAEC,EAAiB,aAAEC,IAAiB,IAAAmI,UACzD,OAEK,sBAAEC,IAA0B,IAAAD,UACjC,OAEK,WAAE5H,IAAe,IAAAD,QAAQ,MAE/BR,EACC,WACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,oBACJ1C,KAAM,aAIR,IACC,MAAMqJ,QAAuB,IAAU,CACtCxG,KAAM,gCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAM2G,aAAY,EAAZA,EAAc3G,OAAQ2G,EAC5BF,aAIF,IAAI1F,EAAQ,EACZ,MAAMqG,EAAoBjG,YAAa,KACjCgG,EAAO/F,SAAWL,GACtBM,cAAe+F,GAEhBF,EAAuBR,EAAS,CAC/BK,QAASI,EAAO7F,UAAW,EAAGP,KAE/BA,KACE,GAEH1B,IAAaiB,QAAWC,GACvBzB,EAAcyB,EAAOC,IAEvB,CAAE,MAAQ/C,GACToB,EAAmBpB,EAAEoE,QAAS,CAC7B/D,KAAM,WACN2C,eAAe,GAEjB,CACD,UAaIyF,EAAMnI,OArGHiI,G,8HCLT,MA6IA,EA7IgB,KACf,MAAQqB,EAASC,IAAe,IAAA9I,UAAU,KACpC,SAAEC,EAAQ,SAAEC,IAAa,IAAAC,aAAa,OACtC,aAAEC,EAAY,kBAAEC,EAAiB,aAAEC,IACxC,IAAAH,aAAa,UACR,OAAEI,EAAM,YAAEC,EAAW,YAAEuI,EAAW,QAAErI,IAAY,IAAAC,WACnDC,I,MACD,MAAM,WAAEC,GAAeD,EAAQ,UACzB,iBACLE,EAAgB,qBAChBC,EAAoB,uBACpBC,GACGJ,EAAQ,MAEZ,MAAO,CACNL,OAAQO,IACRN,YAAaO,IACbgI,YAA6C,QAAhC,EAAA/H,EAAwB,eAAQ,eAAEgI,aAC/CtI,QAASG,MAGX,IAiGD,OA9FA,IAAAK,WAAW,KACV4H,EAAYC,IACV,CAAEA,KA6FJ,iCACC,wBACC,6BAAU,IAAA5H,IAAI,UAAW,6BAE1B,SAAC,EAAAC,gBAAe,CACfC,KAAO,EACPC,MAAQuH,EACRtH,SAAaC,GAAUsH,EAAYtH,GACnCC,yBAAuB,KAExB,iBAAKC,UAAU,oBAAmB,WACjC,SAAC,EAAAC,OAAM,CAACC,QAAQ,UAAUC,QA9FT,KAA6B,O,OAAD,E,OAAA,E,EAAA,YAC/CnB,EAAQoB,QAAWC,GAAYzB,EAAcyB,EAAOC,KACpD5B,EACC,QACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,YACJ1C,KAAM,aAIR,IACC,MAAM2J,QAA0B,IAAU,CACzC9G,KAAM,mCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAMhB,aAAW,EAAXA,EAAagB,OAAQhB,EAC3B8B,QAAS,aAagB,MAC1B,IAAIC,EAAQ,EAEZ,OAAO,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpCsG,EAAUrG,SAAWL,IACzBM,cAAeH,GACfD,EAASwG,IAEVH,EAAYG,EAAUnG,UAAW,EAAGP,IACpCA,KACE,MAILQ,GAAqBC,KAAQkG,IAC5BjJ,EAAU,CAAEkJ,QAASD,IACrBjJ,EAAU,CAAEiD,KAAM,CAAE8F,aAAcE,OAEnC5I,EAAc,YACf,CAAE,MAAQrB,GACTqB,EAAc,aACdD,GACC,IAAAc,IACC,yFACA,yBAIFgC,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAlEgD,K,2QA8FE,UAC5C,IAAAlC,IAAI,WAAY,2BAEnB,SAAC,EAAAQ,OAAM,CAACC,QAAQ,YAAYC,QArBP,KACvB5B,EAAU,CAAEkJ,QAASN,IACrB5I,EAAU,CAAEiD,KAAM,CAAE8F,aAAcH,KAClC3I,KAkBuD,UACpD,SAAC,EAAAoD,KAAI,CAACC,KAAO,c,UC3JlBC,EAAO9D,QAAUwG,OAAW,GAAW,O,UCAvC1C,EAAO9D,QAAUwG,OAAW,GAAY,Q,UCMxC1C,EAAO9D,QAAU,SAAU0J,GACzB,IAAIlF,EAAO,GA4EX,OAzEAA,EAAKmF,SAAW,WACd,OAAOC,KAAKC,IAAI,SAAUjF,GACxB,IAAIiE,EAAU,GACViB,OAA+B,IAAZlF,EAAK,GAoB5B,OAnBIA,EAAK,KACPiE,GAAW,cAAc9D,OAAOH,EAAK,GAAI,QAEvCA,EAAK,KACPiE,GAAW,UAAU9D,OAAOH,EAAK,GAAI,OAEnCkF,IACFjB,GAAW,SAAS9D,OAAOH,EAAK,GAAG1B,OAAS,EAAI,IAAI6B,OAAOH,EAAK,IAAM,GAAI,OAE5EiE,GAAWa,EAAuB9E,GAC9BkF,IACFjB,GAAW,KAETjE,EAAK,KACPiE,GAAW,KAETjE,EAAK,KACPiE,GAAW,KAENA,CACT,GAAGkB,KAAK,GACV,EAGAvF,EAAKF,EAAI,SAAW0F,EAAS7E,EAAO8E,EAAQ5E,EAAUC,GAC7B,iBAAZ0E,IACTA,EAAU,CAAC,CAAC,KAAMA,OAASE,KAE7B,IAAIC,EAAyB,CAAC,EAC9B,GAAIF,EACF,IAAK,IAAIhM,EAAI,EAAGA,EAAI2L,KAAK1G,OAAQjF,IAAK,CACpC,IAAIqE,EAAKsH,KAAK3L,GAAG,GACP,MAANqE,IACF6H,EAAuB7H,IAAM,EAEjC,CAEF,IAAK,IAAI8H,EAAK,EAAGA,EAAKJ,EAAQ9G,OAAQkH,IAAM,CAC1C,IAAIxF,EAAO,GAAGG,OAAOiF,EAAQI,IACzBH,GAAUE,EAAuBvF,EAAK,WAGrB,IAAVU,SACc,IAAZV,EAAK,KAGdA,EAAK,GAAK,SAASG,OAAOH,EAAK,GAAG1B,OAAS,EAAI,IAAI6B,OAAOH,EAAK,IAAM,GAAI,MAAMG,OAAOH,EAAK,GAAI,MAF/FA,EAAK,GAAKU,GAMVH,IACGP,EAAK,IAGRA,EAAK,GAAK,UAAUG,OAAOH,EAAK,GAAI,MAAMG,OAAOH,EAAK,GAAI,KAC1DA,EAAK,GAAKO,GAHVP,EAAK,GAAKO,GAMVE,IACGT,EAAK,IAGRA,EAAK,GAAK,cAAcG,OAAOH,EAAK,GAAI,OAAOG,OAAOH,EAAK,GAAI,KAC/DA,EAAK,GAAKS,GAHVT,EAAK,GAAK,GAAGG,OAAOM,IAMxBb,EAAKoB,KAAKhB,GACZ,CACF,EACOJ,CACT,C,uDC/EA,MAMA,GANc,IAAA6F,eAAc,EAAAC,IAAK,CAC/BC,MAAO,6BACPC,QAAS,cACR,IAAAH,eAAc,EAAAI,KAAM,CACrBnL,EAAG,sD,UCPLwE,EAAO9D,QAAU,SAAU4E,GACzB,IAAIiE,EAAUjE,EAAK,GACf8F,EAAa9F,EAAK,GACtB,IAAK8F,EACH,OAAO7B,EAET,GAAoB,mBAAT8B,KAAqB,CAC9B,IAAIC,EAASD,KAAKE,SAASC,mBAAmBC,KAAKC,UAAUN,MACzD/H,EAAO,+DAA+DoC,OAAO6F,GAC7EK,EAAgB,OAAOlG,OAAOpC,EAAM,OACxC,MAAO,CAACkG,GAAS9D,OAAO,CAACkG,IAAgBlB,KAAK,KAChD,CACA,MAAO,CAAClB,GAASkB,KAAK,KACxB,C,UCfAjG,EAAO9D,QAAUwG,OAAW,GAAc,U,UCA1C1C,EAAO9D,QAAUwG,OAAW,GAAY,Q,8HCqBxC,MA8IA,EA9Ia,KACZ,MAAQ0E,EAAMC,IAAY,IAAA7K,UAAU,KAC9B,SAAEC,EAAQ,SAAEC,IAAa,IAAAC,aAAa,OACtC,aAAEC,EAAY,kBAAEC,EAAiB,aAAEC,IACxC,IAAAH,aAAa,UACR,OAAEI,EAAM,YAAEC,EAAW,SAAEsK,EAAQ,QAAEpK,IAAY,IAAAC,WAChDC,I,MACD,MAAM,WAAEC,GAAeD,EAAQ,UACzB,iBACLE,EAAgB,qBAChBC,EAAoB,uBACpBC,GACGJ,EAAQ,MAEZ,MAAO,CACNL,OAAQO,IACRN,YAAaO,IACb+J,SAA0C,QAAhC,EAAA9J,EAAwB,eAAQ,eAAE+J,UAC5CrK,QAASG,MAGX,IAiGD,OA9FA,IAAAK,WAAW,KACV2J,EAASC,IACP,CAAEA,KA6FJ,iCACC,wBACC,6BAAU,IAAA3J,IAAI,OAAQ,6BAEvB,SAAC,EAAA6J,YAAW,CACXC,YAAY,oBACZ3J,MAAQsJ,EACRrJ,SAAaC,GAAUqJ,EAASrJ,GAChCC,yBAAuB,EACvByJ,uBAAqB,KAEtB,iBAAKxJ,UAAU,oBAAmB,WACjC,SAAC,EAAAC,OAAM,CAACC,QAAQ,UAAUC,QA/FT,KAA6B,O,OAAD,E,OAAA,E,EAAA,YAC/CnB,EAAQoB,QAAWC,GAAYzB,EAAcyB,EAAOC,KACpD5B,EACC,QACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,YACJ1C,KAAM,aAIR,IACC,MAAM6L,QAAuB,IAAU,CACtChJ,KAAM,mCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAMhB,aAAW,EAAXA,EAAagB,OAAQhB,EAC3B8B,QAAS,UAagB,MAC1B,IAAIC,EAAQ,EAEZ,OAAO,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpCwI,EAAOvI,SAAWL,IACtBM,cAAeH,GACfD,EAAS0I,IAEVN,EAASM,EAAOrI,UAAW,EAAGP,IAC9BA,KACE,MAILQ,GAAqBC,KAAQoI,IAC5BnL,EAAU,CAAE2K,KAAMQ,IAClBnL,EAAU,CAAEiD,KAAM,CAAE6H,UAAWK,OAEhC9K,EAAc,YACf,CAAE,MAAQrB,GACTqB,EAAc,aACdD,GACC,IAAAc,IACC,sFACA,yBAIFgC,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAlEgD,K,2QA+FE,UAC5C,IAAAlC,IAAI,WAAY,2BAEnB,SAAC,EAAAQ,OAAM,CAACC,QAAQ,YAAYC,QAtBP,KACvB5B,EAAU,CAAE2K,SACZ3K,EAAU,CAAEiD,KAAM,CAAE6H,UAAWH,KAC/B1K,KAmBuD,UACpD,SAAC,EAAAoD,KAAI,CAACC,KAAO,c,uICjJdY,EAAU,CAAC,EAEfA,EAAQkH,kBAAoB,IAC5BlH,EAAQmH,cAAgB,IAElBnH,EAAQoH,OAAS,SAAc,KAAM,QAE3CpH,EAAQqB,OAAS,IACjBrB,EAAQqH,mBAAqB,IAEhB,IAAI,IAASrH,GAKJ,KAAW,IAAQsH,QAAS,IAAQA,M,UCjB1DjI,EAAO9D,QANP,SAA4ByE,GAC1B,IAAIuH,EAAUrE,SAAS0C,cAAc,SAGrC,OAFA5F,EAAQmH,cAAcI,EAASvH,EAAQmE,YACvCnE,EAAQoH,OAAOG,EAASvH,EAAQA,SACzBuH,CACT,C,UCRAlI,EAAO9D,QAAUwG,OAAW,GAAc,U,UCA1C1C,EAAO9D,QAAUwG,OAAc,K,UCA/B1C,EAAO9D,QAAUwG,OAAW,GAAS,K,UCErC,IAAIyF,EAAO,CAAC,EA+BZnI,EAAO9D,QAPP,SAA0B6L,EAAQK,GAChC,IAAIC,EAtBN,SAAmBA,GACjB,QAA4B,IAAjBF,EAAKE,GAAyB,CACvC,IAAIC,EAAczE,SAAS0E,cAAcF,GAGzC,GAAI3F,OAAO8F,mBAAqBF,aAAuB5F,OAAO8F,kBAC5D,IAGEF,EAAcA,EAAYG,gBAAgBC,IAC5C,CAAE,MAAOjN,GAEP6M,EAAc,IAChB,CAEFH,EAAKE,GAAUC,CACjB,CACA,OAAOH,EAAKE,EACd,CAIeM,CAAUZ,GACvB,IAAKM,EACH,MAAM,IAAIO,MAAM,2GAElBP,EAAOzE,YAAYwE,EACrB,C,UChCApI,EAAO9D,QAAUwG,OAAW,GAAW,O,UCAvC1C,EAAO9D,QAAUwG,OAAW,GAAe,W,UCA3C1C,EAAO9D,QAAUwG,OAAW,GAAQ,I,oDCA7B,MAAMmG,EAAc,cACdC,EAAe,eACfC,EAAmB,mB,UC0DhC/I,EAAO9D,QAjBP,SAAgByE,GACd,GAAwB,oBAAbkD,SACT,MAAO,CACL5B,OAAQ,WAAmB,EAC3BE,OAAQ,WAAmB,GAG/B,IAAIlC,EAAeU,EAAQqH,mBAAmBrH,GAC9C,MAAO,CACLsB,OAAQ,SAAgBd,IAjD5B,SAAelB,EAAcU,EAASQ,GACpC,IAAIC,EAAM,GACND,EAAII,WACNH,GAAO,cAAcH,OAAOE,EAAII,SAAU,QAExCJ,EAAIE,QACND,GAAO,UAAUH,OAAOE,EAAIE,MAAO,OAErC,IAAI2E,OAAiC,IAAd7E,EAAIK,MACvBwE,IACF5E,GAAO,SAASH,OAAOE,EAAIK,MAAMpC,OAAS,EAAI,IAAI6B,OAAOE,EAAIK,OAAS,GAAI,OAE5EJ,GAAOD,EAAIC,IACP4E,IACF5E,GAAO,KAELD,EAAIE,QACND,GAAO,KAELD,EAAII,WACNH,GAAO,KAET,IAAIE,EAAYH,EAAIG,UAChBA,GAA6B,oBAATuF,OACtBzF,GAAO,uDAAuDH,OAAO4F,KAAKE,SAASC,mBAAmBC,KAAKC,UAAU5F,MAAe,QAKtIX,EAAQkH,kBAAkBzG,EAAKnB,EAAcU,EAAQA,QACvD,CAoBMqI,CAAM/I,EAAcU,EAASQ,EAC/B,EACAgB,OAAQ,YArBZ,SAA4BlC,GAE1B,GAAgC,OAA5BA,EAAagJ,WACf,OAAO,EAEThJ,EAAagJ,WAAWtF,YAAY1D,EACtC,CAgBMiJ,CAAmBjJ,EACrB,EAEJ,C,uDCtDA,MAMA,GANc,IAAAsG,eAAc,EAAAC,IAAK,CAC/BE,QAAS,YACTD,MAAO,+BACN,IAAAF,eAAc,EAAAI,KAAM,CACrBnL,EAAG,0b,gBCNHwE,EAAO9D,QAAU,EAAjB,G,8HCkBF,MA8IA,EA9IY,KACX,MAAQiN,EAAUC,IAAgB,IAAA5M,UAAU,KACtC,SAAEC,EAAQ,SAAEC,IAAa,IAAAC,aAAa,OACtC,aAAEC,EAAY,kBAAEC,EAAiB,aAAEC,IACxC,IAAAH,aAAa,UACR,OAAEI,EAAM,YAAEC,EAAW,aAAEqM,EAAY,QAAEnM,IAAY,IAAAC,WACpDC,I,MACD,MAAM,WAAEC,GAAeD,EAAQ,UACzB,iBACLE,EAAgB,qBAChBC,EAAoB,uBACpBC,GACGJ,EAAQ,MAEZ,MAAO,CACNL,OAAQO,IACRN,YAAaO,IACb8L,aACiC,QAAhC,EAAA7L,EAAwB,eAAQ,eAAE8L,kBACnCpM,QAASG,MAGX,IA+FD,OA5FA,IAAAK,WAAW,KACV0L,EAAaC,IACX,CAAEA,KA2FJ,iCACC,wBACC,6BACG,IAAA1L,IAAI,eAAgB,6BAGxB,SAAC,EAAAC,gBAAe,CACfC,KAAO,EACPC,MAAQqL,EACRpL,SAAaC,GAAUoL,EAAapL,GACpCC,yBAAuB,KAExB,iBAAKC,UAAU,oBAAmB,WACjC,SAAC,EAAAC,OAAM,CAACC,QAAQ,UAAUC,QA9FT,KAA6B,O,OAAD,E,OAAA,E,EAAA,YAC/CnB,EAAQoB,QAAWC,GAAYzB,EAAcyB,EAAOC,KACpD5B,EACC,QACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,YACJ1C,KAAM,aAIR,IACC,MAAMyN,QAA2B,IAAU,CAC1C5K,KAAM,mCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAMhB,aAAW,EAAXA,EAAagB,OAAQhB,EAC3B8B,QAAS,cAagB,MAC1B,IAAIC,EAAQ,EAEZ,OAAO,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpCoK,EAAWnK,SAAWL,IAC1BM,cAAeH,GACfD,EAASsK,IAEVH,EAAaG,EAAWjK,UAAW,EAAGP,IACtCA,KACE,MAILQ,GAAqBC,KAAQgK,IAC5B/M,EAAU,CAAEiD,KAAM,CAAE4J,kBAAmBE,OAExC1M,EAAc,YACf,CAAE,MAAQrB,GACTqB,EAAc,aACdD,GACC,IAAAc,IACC,8FACA,yBAIFgC,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAjEgD,K,2QA8FE,UAC5C,IAAAlC,IAAI,WAAY,2BAEnB,SAAC,EAAAQ,OAAM,CAACC,QAAQ,YAAYC,QAtBP,KACvB5B,EAAU,CAAEiD,KAAM,CAAE4J,kBAAmBH,KACvCzM,KAoBuD,UACpD,SAAC,EAAAoD,KAAI,CAACC,KAAO,c,iRCvIlB,MAuKA,EAvKiB,KAChB,MAAQ0J,EAAUC,IAAgB,IAAAlN,UAAU,KACtC,SAAEC,EAAQ,SAAEC,IAAa,IAAAC,aAAa,OACtC,aAAEC,EAAY,kBAAEC,EAAiB,aAAEC,IACxC,IAAAH,aAAa,UACR,OAAEI,EAAM,YAAEC,EAAW,aAAE2M,EAAY,QAAEzM,IAAY,IAAAC,WACpDC,I,MACD,MAAM,WAAEC,GAAeD,EAAQ,UACzB,iBACLE,EAAgB,qBAChBC,EAAoB,uBACpBC,GACGJ,EAAQ,MAEZ,MAAO,CACNL,OAAQO,IACRN,YAAaO,IACboM,aAA8C,QAAhC,EAAAnM,EAAwB,eAAQ,eAAEoM,cAChD1M,QAASG,MAGX,IA2HD,OAxHA,IAAAK,WAAW,KACVgM,EAAaC,IACX,CAAEA,KAuHJ,iCACC,wBACC,6BAAU,IAAAhM,IAAI,WAAY,6BAE3B,SAAC,EAAAC,gBAAe,CACfC,KAAO,EACPC,MAAQ2L,EACR1L,SAAaC,GAAU0L,EAAa1L,GACpCC,yBAAuB,KAExB,iBAAKC,UAAU,oBAAmB,WACjC,SAAC,EAAAC,OAAM,CAACC,QAAQ,UAAUC,QAxHT,KAA6B,O,OAAD,E,OAAA,E,EAAA,YAC/CnB,EAAQoB,QAAWC,GAAYzB,EAAcyB,EAAOC,KACpD5B,EACC,QACA,IAAAe,IACC,mDACA,wBAED,CACCc,eAAe,EACfD,GAAI,YACJ1C,KAAM,aAIR,IACC,MAUM+N,SAVyB,IAAU,CACxClL,KAAM,mCACNC,OAAQ,OACRC,KAAM,CACLL,GAAIzB,EACJiB,MAAMhB,aAAW,EAAXA,EAAagB,OAAQhB,EAC3B8B,QAAS,eAIiBgL,OAAOC,QAAS,SAAU,IAW3B,MAC1B,IAAIhL,EAAQ,EAEZ,OAAO,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpC0K,EAAWzK,SAAWL,IAC1BM,cAAeH,GACfD,EAAS4K,IAEVH,EAAaG,EAAWvK,UAAW,EAAGP,IACtCA,KACE,MAILQ,GAAqBC,KAAQwK,IAC5BvN,EAAU,CAAEiD,KAAM,CAAEkK,cAAeI,OAEpClN,EAAc,YACf,CAAE,MAAQrB,GACTqB,EAAc,aACdD,GACC,IAAAc,IACC,0FACA,yBAIFgC,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAnEgD,K,2QAwHE,UAC5C,IAAAlC,IAAI,WAAY,2BAEnB,SAAC,EAAAQ,OAAM,CAACC,QAAQ,YAAYC,QA9CP,KACvB,IAAIU,EAAQ,EAYJ,IAAIC,QAAWC,IACrB,MAAMC,EAAuBC,YAAa,KACpCJ,IAAU0K,EAASrK,SACvBC,cAAeH,GACfD,EAASwK,IAEVhN,EAAU,CAAE6G,MAAOmG,EAASnK,UAAW,EAAGP,KAC1CA,KACE,KAIgBS,KAAQwK,IAC5BvN,EAAU,CAAEiD,KAAM,CAAEkK,cAAeI,KACnCtN,OAmBsD,UACpD,SAAC,EAAAoD,KAAI,CAACC,KAAO,c,mGCxHlB,IAAAkK,gBAAgB,uBAAwB,CAAEC,OAxCxB,KAEhB,UAAC,EAAA/N,SAAQ,YACR,SAAC,EAAAgO,0BAAyB,CAACpK,KAAO,IAAQsI,OAAO,eAAc,UAC5D,IAAA1K,IAAI,oBAAqB,2BAE5B,SAAC,EAAAyM,cAAa,CACbnG,KAAK,eACLX,OAAQ,IAAA3F,IAAI,oBAAqB,wBACjCoC,KAAO,IAAK,UAEZ,SAAC,EAAAsK,UAAS,WACT,gBAAKnM,UAAU,eAAc,UAC5B,2BACC,yBACC,SAAC,KAAQ,OAEV,yBACC,SAAC,KAAQ,OAEV,yBACC,SAAC,KAAI,OAEN,yBACC,SAAC,KAAG,OAEL,yBACC,SAAC,KAAO,OAET,yBACC,SAAC,KAAM,mB,4GClCf,MAkEA,EAlEiB,KAChB,MAAM,aAAEtB,IAAiB,IAAAD,aAAa,UAC9B2N,EAAUC,IAAgB,IAAA/N,UAAoBgO,KAAKF,UAAY,IA4CvE,OACC,iCACC,wBACC,6BACG,IAAA3M,IAAI,qBAAsB,6BAG9B,SAAC,EAAA8M,cAAa,CACblG,MAAQ,KACRzG,MAAQwM,EACR3J,SAAc,OAAJ6J,WAAI,IAAJA,UAAI,EAAJA,KAAME,YAAa,GAC7B3M,SArD0BD,IAAmB,O,OAAD,E,OAAA,E,EAAA,YAC9CyM,EAAazM,GAEb,UACO,IAAU,CACfa,KAAM,oCACNC,OAAQ,OACRC,KAAM,CACLyL,SAAUxM,KAIZlB,EACC,WACA,IAAAe,IACC,8CACA,wBAED,CACCc,eAAe,EACfD,GAAI,eACJ1C,KAAM,YAGT,CAAE,MAAQL,GACTmB,EACC,SACA,IAAAe,IACC,uCACA,wBAED,CACCc,eAAe,EACfD,GAAI,aACJ1C,KAAM,aAIR6D,QAAQC,MAAOnE,EAAEoE,QAClB,CACD,E,YAxC+C,K,2QAsD5CrB,GAAG,WACHkJ,uBAAqB,EACrBzJ,yBAAuB,O,GC5EvB0M,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBzE,IAAjB0E,EACH,OAAOA,EAAa5O,QAGrB,IAAI8D,EAAS2K,EAAyBE,GAAY,CACjDrM,GAAIqM,EAEJ3O,QAAS,CAAC,GAOX,OAHA6O,EAAoBF,GAAU7K,EAAQA,EAAO9D,QAAS0O,GAG/C5K,EAAO9D,OACf,CCrBA0O,EAAoBjQ,EAAKqF,IACxB,IAAIgL,EAAShL,GAAUA,EAAOiL,WAC7B,IAAOjL,EAAiB,QACxB,IAAM,EAEP,OADA4K,EAAoBpP,EAAEwP,EAAQ,CAAE3P,EAAG2P,IAC5BA,GCLRJ,EAAoBpP,EAAI,CAACU,EAASgP,KACjC,IAAI,IAAInQ,KAAOmQ,EACXN,EAAoBO,EAAED,EAAYnQ,KAAS6P,EAAoBO,EAAEjP,EAASnB,IAC5EP,OAAO4Q,eAAelP,EAASnB,EAAK,CAAEsQ,YAAY,EAAMC,IAAKJ,EAAWnQ,MCJ3E6P,EAAoBO,EAAI,CAAChK,EAAKoK,IAAU/Q,OAAOC,UAAUC,eAAeiB,KAAKwF,EAAKoK,GCAlFX,EAAoBY,QAAKpF,E","sources":["webpack://ai-plus-block-editor/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://ai-plus-block-editor/./src/components/Social.tsx","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://ai-plus-block-editor/external window [\"wp\",\"element\"]","webpack://ai-plus-block-editor/./src/styles/app.scss","webpack://ai-plus-block-editor/./src/utils/index.tsx","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://ai-plus-block-editor/external window [\"wp\",\"data\"]","webpack://ai-plus-block-editor/./src/core/AiTone.tsx","webpack://ai-plus-block-editor/./src/components/Summary.tsx","webpack://ai-plus-block-editor/external window [\"wp\",\"plugins\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"editPost\"]","webpack://ai-plus-block-editor/./node_modules/css-loader/dist/runtime/api.js","webpack://ai-plus-block-editor/./node_modules/@wordpress/icons/build-module/library/check.js","webpack://ai-plus-block-editor/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://ai-plus-block-editor/external window [\"wp\",\"components\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"apiFetch\"]","webpack://ai-plus-block-editor/./src/components/Slug.tsx","webpack://ai-plus-block-editor/./src/styles/app.scss?4dc7","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://ai-plus-block-editor/external window [\"wp\",\"primitives\"]","webpack://ai-plus-block-editor/external window \"React\"","webpack://ai-plus-block-editor/external window [\"wp\",\"hooks\"]","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://ai-plus-block-editor/external window [\"wp\",\"notices\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"blockEditor\"]","webpack://ai-plus-block-editor/external window [\"wp\",\"i18n\"]","webpack://ai-plus-block-editor/./src/utils/store.ts","webpack://ai-plus-block-editor/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://ai-plus-block-editor/./node_modules/@wordpress/icons/build-module/library/verse.js","webpack://ai-plus-block-editor/./node_modules/react/jsx-runtime.js","webpack://ai-plus-block-editor/./src/components/SEO.tsx","webpack://ai-plus-block-editor/./src/components/Headline.tsx","webpack://ai-plus-block-editor/./src/core/AiSideBar.tsx","webpack://ai-plus-block-editor/./src/components/Switcher.tsx","webpack://ai-plus-block-editor/webpack/bootstrap","webpack://ai-plus-block-editor/webpack/runtime/compat get default export","webpack://ai-plus-block-editor/webpack/runtime/define property getters","webpack://ai-plus-block-editor/webpack/runtime/hasOwnProperty shorthand","webpack://ai-plus-block-editor/webpack/runtime/nonce"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Social.\n *\n * This Component returns the Social media\n * trending hash-tags & keywords.\n *\n * @since 1.5.0\n *\n * @return {JSX.Element} Social Hashtags.\n */\nconst Social = (): JSX.Element => {\n\tconst [ social, setSocial ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSocial, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSocial: getEditedPostAttribute( 'meta' )?.apbe_social,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSocial( postSocial );\n\t}, [ postSocial ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.5.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSocial: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'social',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated social media hashtags and keywords\n\t\t\t * when the Animation responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.5.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSocial.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSocial );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSocial( aiSocial.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSocial ) => {\n\t\t\t\teditPost( { meta: { apbe_social: newSocial } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Hashtags. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.5.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { meta: { apbe_social: social } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'Social Media Hashtags', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ social }\n\t\t\t\tonChange={ ( text ) => setSocial( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Social;\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n  if (nonce) {\n    styleElement.setAttribute(\"nonce\", nonce);\n  }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n  return result;\n}\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n    identifiers.push(identifier);\n  }\n  return identifiers;\n}\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n  return updater;\n}\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n    var newLastIdentifiers = modulesToDom(newList, options);\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n      var _index = getIndexByIdentifier(_identifier);\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n    lastIdentifiers = newLastIdentifiers;\n  };\n};","module.exports = window[\"wp\"][\"element\"];","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.apbe-toast{position:fixed;background:#000;color:#fff;bottom:-50px;opacity:0;left:15px;padding:20px;border-radius:5px;font-size:13px;z-index:1;box-shadow:0 0 15px rgba(0,0,0,.1);animation:slideUp .5s ease-out forwards}.apbe-sidebar p{margin-top:0 !important;margin-bottom:7.5px !important}.apbe-sidebar button{height:auto;padding:11.5px 15px;justify-content:center}.apbe-sidebar ul{margin:0;padding:0;display:flex;flex-direction:column}.apbe-sidebar ul li{padding:0 0 22.5px 0;margin:0}.apbe-sidebar ul li:first-child{padding-top:0}.apbe-button-group{display:flex;justify-content:space-between;margin-top:8.5px}.apbe-button-group button{height:38px;border-radius:3px}.apbe-button-group button.is-secondary{padding-left:9px;padding-right:9px}@keyframes slideUp{to{bottom:40px;opacity:1}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/app.scss\"],\"names\":[],\"mappings\":\"AACC,YACC,cAAA,CACA,eAAA,CACA,UAAA,CACA,YAAA,CACA,SAAA,CACA,SAAA,CACA,YAAA,CACA,iBAAA,CACA,cAAA,CACA,SAAA,CACA,kCAAA,CACE,uCAAA,CAIF,gBACC,uBAAA,CACA,8BAAA,CAGD,qBACC,WAAA,CACA,mBAAA,CACA,sBAAA,CAGD,iBACC,QAAA,CACA,SAAA,CACA,YAAA,CACA,qBAAA,CAEA,oBACC,oBAAA,CACA,QAAA,CAEA,gCACC,aAAA,CAOH,mBACC,YAAA,CACA,6BAAA,CACA,gBAAA,CAEA,0BACC,WAAA,CACA,iBAAA,CAEA,uCACC,gBAAA,CACA,iBAAA,CAOL,mBACE,GACD,WAAA,CACG,SAAA,CAAA\",\"sourcesContent\":[\".apbe {\\n\\t&-toast {\\n\\t\\tposition: fixed;\\n\\t\\tbackground: #000;\\n\\t\\tcolor: #FFF;\\n\\t\\tbottom: -50px;\\n\\t\\topacity: 0;\\n\\t\\tleft: 15px;\\n\\t\\tpadding: 20px;\\n\\t\\tborder-radius: 5px;\\n\\t\\tfont-size: 13px;\\n\\t\\tz-index: 1;\\n\\t\\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.1);\\n  \\t\\tanimation: slideUp 0.5s ease-out forwards;\\n\\t}\\n\\n\\t&-sidebar {\\n\\t\\tp {\\n\\t\\t\\tmargin-top: 0 !important;\\n\\t\\t\\tmargin-bottom: 7.5px !important;\\n\\t\\t}\\n\\n\\t\\tbutton {\\n\\t\\t\\theight: auto;\\n\\t\\t\\tpadding: 11.5px 15px;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t}\\n\\n\\t\\tul {\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\n\\t\\t\\tli {\\n\\t\\t\\t\\tpadding: 0 0 22.5px 0;\\n\\t\\t\\t\\tmargin: 0;\\n\\n\\t\\t\\t\\t&:first-child {\\n\\t\\t\\t\\t\\tpadding-top: 0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&-button {\\n\\t\\t&-group {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: space-between;\\n\\t\\t\\tmargin-top: 8.5px;\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\theight: 38px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\n\\t\\t\\t\\t&.is-secondary {\\n\\t\\t\\t\\t\\tpadding-left: 9px;\\n\\t\\t\\t\\t\\tpadding-right: 9px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n@keyframes slideUp {\\n  to {\\n\\tbottom: 40px;\\n    opacity: 1;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { __ } from '@wordpress/i18n';\nimport { applyFilters } from '@wordpress/hooks';\n\ntype DropdownOption = {\n\ttitle: string;\n\tonClick: () => void;\n};\n\n/**\n * Get Options.\n *\n * This function filters the Block Menu AI Options\n * available when the user selects a block.\n *\n * @since 1.1.0\n *\n * @param {Function} getTone Function to get the tone.\n * @return {DropdownOption[]} Dropdown options.\n */\nexport const getBlockMenuOptions = ( getTone: Function ): DropdownOption[] => {\n\tconst menu = [];\n\n\t/**\n\t * Filter Menu Options.\n\t *\n\t * By default the passed object should contain\n\t * menu options.\n\t *\n\t * @since 1.1.0\n\t * @since 1.5.0 Pass in menu options before returning menu.\n\t *\n\t * @param {Object} menu Menu options.\n\t * @return {Object}\n\t */\n\tconst options = applyFilters( 'apbe.blockMenuOptions', {\n\t\tcasual: __( 'Use Casual Tone', 'ai-plus-block-editor' ),\n\t\tofficial: __( 'Use Official Tone', 'ai-plus-block-editor' ),\n\t\tdescriptive: __( 'Use Descriptive Tone', 'ai-plus-block-editor' ),\n\t\tnarrative: __( 'Use Narrative Tone', 'ai-plus-block-editor' ),\n\t\taggressive: __( 'Use Aggressive Tone', 'ai-plus-block-editor' ),\n\t} );\n\n\tObject.keys( options ).forEach( ( key ) => {\n\t\tmenu.push( {\n\t\t\ttitle: options[ key ],\n\t\t\tonClick: () => {\n\t\t\t\tgetTone( key );\n\t\t\t},\n\t\t} );\n\t} );\n\n\treturn menu;\n};\n\n/**\n * Get Allowed Blocks.\n *\n * This function filters the allowed blocks\n * available to the AI tone feature.\n *\n * @since 1.4.0\n *\n * @return {string[]} Allowed blocks.\n */\nexport const getAllowedBlocks = (): string[] => {\n\tconst allowedBlocks = [ 'core/paragraph' ];\n\n\t/**\n\t * Filter Allowed Blocks.\n\t *\n\t * By default the passed option should contain\n\t * allowed blocks.\n\t *\n\t * @since 1.4.0\n\t *\n\t * @param {string[]} allowedBlocks Allowed blocks array.\n\t * @return {string[]}\n\t */\n\treturn applyFilters( 'apbe.allowedBlocks', allowedBlocks ) as string[];\n};\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\nmodule.exports = styleTagTransform;","module.exports = window[\"wp\"][\"data\"];","import { __ } from '@wordpress/i18n';\nimport { verse } from '@wordpress/icons';\nimport { addFilter } from '@wordpress/hooks';\nimport { BlockControls } from '@wordpress/block-editor';\nimport { select, dispatch } from '@wordpress/data';\nimport { ToolbarGroup, ToolbarDropdownMenu } from '@wordpress/components';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps, selectBlockProps, noticeProps } from '../utils/types';\nimport { getAllowedBlocks, getBlockMenuOptions } from '../utils';\nimport { editorStore, noticesStore, blockEditorStore } from '../utils/store';\n\nimport '../styles/app.scss';\n\n/**\n * Filter Blocks with AI.\n *\n * @since 1.0.0\n *\n * @param {Object} settings Original block settings\n * @return {Object}         Filtered block settings\n */\nexport const filterBlockTypesWithAI = ( settings: any ): object => {\n\tconst { name, edit } = settings;\n\n\tif ( getAllowedBlocks().indexOf( name ) === -1 ) {\n\t\treturn settings;\n\t}\n\n\tsettings.edit = ( props: any ) => {\n\t\t/**\n\t\t * Get Tone Params.\n\t\t *\n\t\t * This function retrieves the current post ID,\n\t\t * selected block ID, and block content.\n\t\t *\n\t\t * @since 1.4.0\n\t\t * @return {Object} Object containing postId, blockId and blockContent.\n\t\t */\n\t\tconst getToneParams = (): any => {\n\t\t\tconst { getCurrentPostId } = select( editorStore ) as selectProps;\n\t\t\tconst { getSelectedBlock, getSelectedBlockClientId } = select(\n\t\t\t\tblockEditorStore\n\t\t\t) as selectBlockProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tblockId: getSelectedBlockClientId(),\n\t\t\t\tblockContent: getSelectedBlock()?.attributes?.content || '',\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Get AI generated tone.\n\t\t *\n\t\t * @since 1.0.0\n\t\t *\n\t\t * @param {string} newTone AI tone sent to LLM endpoint.\n\t\t * @return {void}\n\t\t */\n\t\tconst getTone = async ( newTone: string ): Promise< void > => {\n\t\t\tconst { postId, blockId, blockContent } = getToneParams();\n\t\t\tconst { createNotice, createErrorNotice, removeNotice } = dispatch(\n\t\t\t\tnoticesStore\n\t\t\t) as any;\n\t\t\tconst { updateBlockAttributes } = dispatch(\n\t\t\t\tblockEditorStore\n\t\t\t) as any;\n\t\t\tconst { getNotices } = select( noticesStore ) as noticeProps;\n\n\t\t\tcreateNotice(\n\t\t\t\t'success',\n\t\t\t\t__(\n\t\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-tone-success',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\n\t\t\ttry {\n\t\t\t\tconst aiTone: string = await apiFetch( {\n\t\t\t\t\tpath: '/ai-plus-block-editor/v1/tone',\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tid: postId,\n\t\t\t\t\t\ttext: blockContent?.text || blockContent,\n\t\t\t\t\t\tnewTone,\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t\tlet limit = 1;\n\t\t\t\tconst displayWithEffect = setInterval( () => {\n\t\t\t\t\tif ( aiTone.length === limit ) {\n\t\t\t\t\t\tclearInterval( displayWithEffect );\n\t\t\t\t\t}\n\t\t\t\t\tupdateBlockAttributes( blockId, {\n\t\t\t\t\t\tcontent: aiTone.substring( 0, limit ),\n\t\t\t\t\t} );\n\t\t\t\t\tlimit++;\n\t\t\t\t}, 5 );\n\n\t\t\t\tgetNotices().forEach( ( notice: any ) =>\n\t\t\t\t\tremoveNotice( notice.id )\n\t\t\t\t);\n\t\t\t} catch ( e ) {\n\t\t\t\tcreateErrorNotice( e.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarDropdownMenu\n\t\t\t\t\t\t\ticon={ verse }\n\t\t\t\t\t\t\tlabel={ __( 'AI + Block Editor' ) }\n\t\t\t\t\t\t\tcontrols={ getBlockMenuOptions( getTone ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t\t{ edit( props ) }\n\t\t\t</>\n\t\t);\n\t};\n\n\treturn settings;\n};\n\naddFilter( 'blocks.registerBlockType', 'apbe/ai', filterBlockTypesWithAI );\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Summary.\n *\n * This Component returns the Summary\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Summary.\n */\nconst Summary = (): JSX.Element => {\n\tconst [ summary, setSummary ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSummary, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSummary: getEditedPostAttribute( 'meta' )?.apbe_summary,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSummary( postSummary );\n\t}, [ postSummary ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSummary: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'summary',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated summary when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSummary.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSummary );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSummary( aiSummary.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSummary ) => {\n\t\t\t\teditPost( { excerpt: newSummary } );\n\t\t\t\teditPost( { meta: { apbe_summary: newSummary } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Summary. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { excerpt: summary } );\n\t\teditPost( { meta: { apbe_summary: summary } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Summary', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ summary }\n\t\t\t\tonChange={ ( text ) => setSummary( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Summary;\n","module.exports = window[\"wp\"][\"plugins\"];","module.exports = window[\"wp\"][\"editPost\"];","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n  var list = [];\n\n  // return the list of modules as css string\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = \"\";\n      var needLayer = typeof item[5] !== \"undefined\";\n      if (item[4]) {\n        content += \"@supports (\".concat(item[4], \") {\");\n      }\n      if (item[2]) {\n        content += \"@media \".concat(item[2], \" {\");\n      }\n      if (needLayer) {\n        content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n      }\n      content += cssWithMappingToString(item);\n      if (needLayer) {\n        content += \"}\";\n      }\n      if (item[2]) {\n        content += \"}\";\n      }\n      if (item[4]) {\n        content += \"}\";\n      }\n      return content;\n    }).join(\"\");\n  };\n\n  // import a list of modules into the list\n  list.i = function i(modules, media, dedupe, supports, layer) {\n    if (typeof modules === \"string\") {\n      modules = [[null, modules, undefined]];\n    }\n    var alreadyImportedModules = {};\n    if (dedupe) {\n      for (var k = 0; k < this.length; k++) {\n        var id = this[k][0];\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n    for (var _k = 0; _k < modules.length; _k++) {\n      var item = [].concat(modules[_k]);\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        continue;\n      }\n      if (typeof layer !== \"undefined\") {\n        if (typeof item[5] === \"undefined\") {\n          item[5] = layer;\n        } else {\n          item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n          item[5] = layer;\n        }\n      }\n      if (media) {\n        if (!item[2]) {\n          item[2] = media;\n        } else {\n          item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n          item[2] = media;\n        }\n      }\n      if (supports) {\n        if (!item[4]) {\n          item[4] = \"\".concat(supports);\n        } else {\n          item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n          item[4] = supports;\n        }\n      }\n      list.push(item);\n    }\n  };\n  return list;\n};","import { createElement } from \"react\";\n/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\nconst check = createElement(SVG, {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 24 24\"\n}, createElement(Path, {\n  d: \"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z\"\n}));\nexport default check;\n//# sourceMappingURL=check.js.map","\"use strict\";\n\nmodule.exports = function (item) {\n  var content = item[1];\n  var cssMapping = item[3];\n  if (!cssMapping) {\n    return content;\n  }\n  if (typeof btoa === \"function\") {\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n    var sourceMapping = \"/*# \".concat(data, \" */\");\n    return [content].concat([sourceMapping]).join(\"\\n\");\n  }\n  return [content].join(\"\\n\");\n};","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"apiFetch\"];","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Slug.\n *\n * This Component returns the Slug\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Slug.\n */\nconst Slug = (): JSX.Element => {\n\tconst [ slug, setSlug ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postSlug, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostSlug: getEditedPostAttribute( 'meta' )?.apbe_slug,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetSlug( postSlug );\n\t}, [ postSlug ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiSlug: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'slug',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated slug when the Animation responsible\n\t\t\t * for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiSlug.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiSlug );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetSlug( aiSlug.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newSlug ) => {\n\t\t\t\teditPost( { slug: newSlug } );\n\t\t\t\teditPost( { meta: { apbe_slug: newSlug } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Slug. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { slug } );\n\t\teditPost( { meta: { apbe_slug: slug } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Slug', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextControl\n\t\t\t\tplaceholder=\"your-article-slug\"\n\t\t\t\tvalue={ slug }\n\t\t\t\tonChange={ ( text ) => setSlug( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t__next40pxDefaultSize\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Slug;\n","\n      import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./app.scss\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./app.scss\";\n       export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement(\"style\");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\nmodule.exports = insertStyleElement;","module.exports = window[\"wp\"][\"primitives\"];","module.exports = window[\"React\"];","module.exports = window[\"wp\"][\"hooks\"];","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next  */\nfunction getTarget(target) {\n  if (typeof memo[target] === \"undefined\") {\n    var styleTarget = document.querySelector(target);\n\n    // Special case to return head of iframe instead of iframe itself\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n    memo[target] = styleTarget;\n  }\n  return memo[target];\n}\n\n/* istanbul ignore next  */\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n  if (!target) {\n    throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n  }\n  target.appendChild(style);\n}\nmodule.exports = insertBySelector;","module.exports = window[\"wp\"][\"notices\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"i18n\"];","export const editorStore = 'core/editor';\nexport const noticesStore = 'core/notices';\nexport const blockEditorStore = 'core/block-editor';\n","\"use strict\";\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = \"\";\n  if (obj.supports) {\n    css += \"@supports (\".concat(obj.supports, \") {\");\n  }\n  if (obj.media) {\n    css += \"@media \".concat(obj.media, \" {\");\n  }\n  var needLayer = typeof obj.layer !== \"undefined\";\n  if (needLayer) {\n    css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n  }\n  css += obj.css;\n  if (needLayer) {\n    css += \"}\";\n  }\n  if (obj.media) {\n    css += \"}\";\n  }\n  if (obj.supports) {\n    css += \"}\";\n  }\n  var sourceMap = obj.sourceMap;\n  if (sourceMap && typeof btoa !== \"undefined\") {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  }\n\n  // For old IE\n  /* istanbul ignore if  */\n  options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n  styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next  */\nfunction domAPI(options) {\n  if (typeof document === \"undefined\") {\n    return {\n      update: function update() {},\n      remove: function remove() {}\n    };\n  }\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\nmodule.exports = domAPI;","import { createElement } from \"react\";\n/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\nconst verse = createElement(SVG, {\n  viewBox: \"0 0 24 24\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, createElement(Path, {\n  d: \"M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z\"\n}));\nexport default verse;\n//# sourceMappingURL=verse.js.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, TextareaControl, Icon } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * SEO.\n *\n * This Component returns the SEO keywords,\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} SEO Keywords.\n */\nconst SEO = (): JSX.Element => {\n\tconst [ keywords, setKeywords ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postKeywords, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostKeywords:\n\t\t\t\t\tgetEditedPostAttribute( 'meta' )?.apbe_seo_keywords,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetKeywords( postKeywords );\n\t}, [ postKeywords ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst aiKeywords: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'keywords',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated SEO keywords when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiKeywords.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiKeywords );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetKeywords( aiKeywords.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newKeywords ) => {\n\t\t\t\teditPost( { meta: { apbe_seo_keywords: newKeywords } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch SEO Keywords. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\teditPost( { meta: { apbe_seo_keywords: keywords } } );\n\t\tsavePost();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'SEO Keywords', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 7 }\n\t\t\t\tvalue={ keywords }\n\t\t\t\tonChange={ ( text ) => setKeywords( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default SEO;\n","import { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { useState, useEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { Button, Icon, TextareaControl } from '@wordpress/components';\nimport apiFetch from '@wordpress/api-fetch';\n\nimport { selectProps } from '../utils/types';\nimport { editorStore } from '../utils/store';\n\n/**\n * Headline.\n *\n * This Component returns the Headline\n * label and button.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} Headline.\n */\nconst Headline = (): JSX.Element => {\n\tconst [ headline, setHeadline ] = useState( '' );\n\tconst { editPost, savePost } = useDispatch( editorStore ) as any;\n\tconst { createNotice, createErrorNotice, removeNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { postId, postContent, postHeadline, notices } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getNotices } = select( noticesStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetEditedPostContent,\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t} = select( editorStore ) as selectProps;\n\n\t\t\treturn {\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostContent: getEditedPostContent(),\n\t\t\t\tpostHeadline: getEditedPostAttribute( 'meta' )?.apbe_headline,\n\t\t\t\tnotices: getNotices(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\tsetHeadline( postHeadline );\n\t}, [ postHeadline ] );\n\n\t/**\n\t * This function fires when the user clicks\n\t * the `Generate` button.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleClick = async (): Promise< void > => {\n\t\tnotices.forEach( ( notice ) => removeNotice( notice.id ) );\n\t\tcreateNotice(\n\t\t\t'info',\n\t\t\t__(\n\t\t\t\t'AI is generating text, please hold on for a bit.',\n\t\t\t\t'ai-plus-block-editor'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t\tid: 'apbe-info',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\n\t\ttry {\n\t\t\tconst response: string = await apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/sidebar',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tid: postId,\n\t\t\t\t\ttext: postContent?.text || postContent,\n\t\t\t\t\tfeature: 'headline',\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst aiHeadline = response.trim().replace( /^\"|\"$/g, '' );\n\n\t\t\t/**\n\t\t\t * This function returns a promise that resolves\n\t\t\t * to the AI generated headline when the Animation\n\t\t\t * responsible for showing same is completed.\n\t\t\t *\n\t\t\t * @since 1.2.0\n\t\t\t *\n\t\t\t * @return { Promise<string> } Animated text.\n\t\t\t */\n\t\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\t\tlet limit = 1;\n\n\t\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\t\tif ( aiHeadline.length === limit ) {\n\t\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\t\tresolve( aiHeadline );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetHeadline( aiHeadline.substring( 0, limit ) );\n\t\t\t\t\t\tlimit++;\n\t\t\t\t\t}, 5 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tshowAnimatedAiText().then( ( newHeadline ) => {\n\t\t\t\teditPost( { meta: { apbe_headline: newHeadline } } );\n\t\t\t} );\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t} catch ( e ) {\n\t\t\tremoveNotice( 'apbe-info' );\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to fetch Headline. Please check your error logs or console for more info.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t)\n\t\t\t);\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\t/**\n\t * This function fires when the user selects\n\t * the AI generated result.\n\t *\n\t * @since 1.1.0\n\t *\n\t * @return { void }\n\t */\n\tconst handleSelection = (): void => {\n\t\tlet limit = 1;\n\n\t\t/**\n\t\t * This function returns a promise that\n\t\t * resolves to the headline when the Animation responsible\n\t\t * for showing the headline is completed.\n\t\t *\n\t\t * @since 1.2.0\n\t\t *\n\t\t * @return { Promise<string> } Animated text.\n\t\t */\n\t\tconst showAnimatedAiText = (): Promise< string > => {\n\t\t\treturn new Promise( ( resolve ) => {\n\t\t\t\tconst animatedTextInterval = setInterval( () => {\n\t\t\t\t\tif ( limit === headline.length ) {\n\t\t\t\t\t\tclearInterval( animatedTextInterval );\n\t\t\t\t\t\tresolve( headline );\n\t\t\t\t\t}\n\t\t\t\t\teditPost( { title: headline.substring( 0, limit ) } );\n\t\t\t\t\tlimit++;\n\t\t\t\t}, 5 );\n\t\t\t} );\n\t\t};\n\n\t\tshowAnimatedAiText().then( ( newHeadline ) => {\n\t\t\teditPost( { meta: { apbe_headline: newHeadline } } );\n\t\t\tsavePost();\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>{ __( 'Headline', 'ai-plus-block-editor' ) }</strong>\n\t\t\t</p>\n\t\t\t<TextareaControl\n\t\t\t\trows={ 4 }\n\t\t\t\tvalue={ headline }\n\t\t\t\tonChange={ ( text ) => setHeadline( text ) }\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t\t<div className=\"apbe-button-group\">\n\t\t\t\t<Button variant=\"primary\" onClick={ handleClick }>\n\t\t\t\t\t{ __( 'Generate', 'ai-plus-block-editor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"secondary\" onClick={ handleSelection }>\n\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Headline;\n","import { __ } from '@wordpress/i18n';\nimport { verse } from '@wordpress/icons';\nimport { Fragment } from '@wordpress/element';\nimport { PanelBody } from '@wordpress/components';\nimport { registerPlugin } from '@wordpress/plugins';\nimport { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post';\n\nimport { SEO, Slug, Summary, Headline, Switcher, Social } from '../components';\n\nimport '../styles/app.scss';\n\n/**\n * AI SideBar.\n *\n * This function returns a JSX component that comprises\n * the Plugin's Sidebar and controls.\n *\n * @since 1.1.0\n *\n * @return {JSX.Element} AI SideBar.\n */\nconst AiSideBar = (): JSX.Element => {\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginSidebarMoreMenuItem icon={ verse } target=\"apbe-sidebar\">\n\t\t\t\t{ __( 'AI + Block Editor', 'ai-plus-block-editor' ) }\n\t\t\t</PluginSidebarMoreMenuItem>\n\t\t\t<PluginSidebar\n\t\t\t\tname=\"apbe-sidebar\"\n\t\t\t\ttitle={ __( 'AI + Block Editor', 'ai-plus-block-editor' ) }\n\t\t\t\ticon={ verse }\n\t\t\t>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t<div className=\"apbe-sidebar\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Switcher />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Headline />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Slug />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<SEO />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Summary />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<Social />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</PanelBody>\n\t\t\t</PluginSidebar>\n\t\t</Fragment>\n\t);\n};\n\nregisterPlugin( 'ai-plus-block-editor', { render: AiSideBar } );\n","import { useState } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { SelectControl } from '@wordpress/components';\nimport { store as noticesStore } from '@wordpress/notices';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Switcher.\n *\n * This Component handles the switching of AI providers,\n * for e.g. Open AI -> Gemini and so on.\n *\n * @since 1.5.0\n *\n * @return {JSX.Element} Switcher.\n */\nconst Switcher = (): JSX.Element => {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst [ provider, setProvider ] = useState< string >( apbe.provider || '' );\n\n\tconst handleChange = async ( value: string ) => {\n\t\tsetProvider( value );\n\n\t\ttry {\n\t\t\tawait apiFetch( {\n\t\t\t\tpath: '/ai-plus-block-editor/v1/switcher',\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tprovider: value,\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tcreateNotice(\n\t\t\t\t'success',\n\t\t\t\t__(\n\t\t\t\t\t'Success! AI Provider switched successfully.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-success',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t} catch ( e ) {\n\t\t\tcreateNotice(\n\t\t\t\t'error',\n\t\t\t\t__(\n\t\t\t\t\t'Error! Failed to switch AI Provider.',\n\t\t\t\t\t'ai-plus-block-editor'\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t\tid: 'apbe-error',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( e.message );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<p>\n\t\t\t\t<strong>\n\t\t\t\t\t{ __( 'Switch AI Provider', 'ai-plus-block-editor' ) }\n\t\t\t\t</strong>\n\t\t\t</p>\n\t\t\t<SelectControl\n\t\t\t\tlabel={ null }\n\t\t\t\tvalue={ provider }\n\t\t\t\toptions={ apbe?.providers || [] }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tid=\"switcher\"\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t/>\n\t\t</>\n\t);\n};\n\nexport default Switcher;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nc = undefined;"],"names":["f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","exports","Fragment","jsx","jsxs","social","setSocial","useState","editPost","savePost","useDispatch","createNotice","createErrorNotice","removeNotice","postId","postContent","postSocial","notices","useSelect","select","getNotices","getCurrentPostId","getEditedPostContent","getEditedPostAttribute","apbe_social","useEffect","__","TextareaControl","rows","value","onChange","text","__nextHasNoMarginBottom","className","Button","variant","onClick","forEach","notice","id","isDismissible","aiSocial","path","method","data","feature","limit","Promise","resolve","animatedTextInterval","setInterval","length","clearInterval","substring","showAnimatedAiText","then","newSocial","meta","console","error","message","Icon","icon","module","styleElement","nonce","setAttribute","stylesInDOM","getIndexByIdentifier","identifier","result","i","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","push","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","window","___CSS_LOADER_EXPORT___","getBlockMenuOptions","getTone","menu","applyFilters","casual","official","descriptive","narrative","aggressive","keys","title","getAllowedBlocks","styleSheet","cssText","firstChild","removeChild","appendChild","document","createTextNode","addFilter","settings","name","edit","indexOf","BlockControls","ToolbarGroup","ToolbarDropdownMenu","label","controls","newTone","blockId","blockContent","getSelectedBlock","getSelectedBlockClientId","attributes","content","getToneParams","dispatch","updateBlockAttributes","aiTone","displayWithEffect","summary","setSummary","postSummary","apbe_summary","aiSummary","newSummary","excerpt","cssWithMappingToString","toString","this","map","needLayer","join","modules","dedupe","undefined","alreadyImportedModules","_k","createElement","SVG","xmlns","viewBox","Path","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","sourceMapping","slug","setSlug","postSlug","apbe_slug","TextControl","placeholder","__next40pxDefaultSize","aiSlug","newSlug","styleTagTransform","setAttributes","insert","insertStyleElement","locals","element","memo","style","target","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","getTarget","Error","editorStore","noticesStore","blockEditorStore","apply","parentNode","removeStyleElement","keywords","setKeywords","postKeywords","apbe_seo_keywords","aiKeywords","newKeywords","headline","setHeadline","postHeadline","apbe_headline","aiHeadline","trim","replace","newHeadline","registerPlugin","render","PluginSidebarMoreMenuItem","PluginSidebar","PanelBody","provider","setProvider","apbe","SelectControl","providers","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","prop","nc"],"sourceRoot":""}
  • ai-plus-block-editor/trunk/inc/Abstracts/Route.php

    r3235704 r3376557  
    9696     * Get AI Client.
    9797     *
    98      * @since TBD
     98     * @since 1.1.2
    9999     *
    100100     * @param Provider $provider
  • ai-plus-block-editor/trunk/inc/Admin/Options.php

    r3365021 r3376557  
    1010
    1111namespace AiPlusBlockEditor\Admin;
     12
     13use AiPlusBlockEditor\Abstracts\Provider;
    1214
    1315class Options {
     
    132134                        'label'   => esc_html__( 'AI Provider', 'ai-plus-block-editor' ),
    133135                        'summary' => 'e.g. Open AI (Chat GPT)',
    134                         'options' => [
    135                             'OpenAI'   => 'ChatGPT',
    136                             'Gemini'   => 'Gemini',
    137                             'DeepSeek' => 'DeepSeek',
    138                             'Grok'     => 'Grok',
    139                         ],
     136                        'options' => Provider::get_providers(),
    140137                    ],
    141138                ],
     
    205202                ],
    206203            ],
     204            'claude_options'        => [
     205                'heading'  => esc_html__( 'Claude', 'ai-plus-block-editor' ),
     206                'controls' => [
     207                    'claude_enable' => [
     208                        'control' => esc_attr( 'checkbox' ),
     209                        'label'   => esc_html__( 'Enable Claude', 'ai-plus-block-editor' ),
     210                        'summary' => esc_html__( 'Use Claude capabilities in Block Editor', 'ai-plus-block-editor' ),
     211                    ],
     212                    'claude_token'  => [
     213                        'control'     => esc_attr( 'password' ),
     214                        'placeholder' => esc_attr( '' ),
     215                        'label'       => esc_html__( 'API Keys', 'ai-plus-block-editor' ),
     216                        'summary'     => esc_html__( 'e.g. ae2kgch7ib9eqcbeveq9a923nv87392av', 'ai-plus-block-editor' ),
     217                    ],
     218                ],
     219            ],
    207220        ];
    208221    }
  • ai-plus-block-editor/trunk/inc/Core/AI.php

    r3319323 r3376557  
    1414use AiPlusBlockEditor\Providers\Gemini;
    1515use AiPlusBlockEditor\Providers\DeepSeek;
     16use AiPlusBlockEditor\Providers\Grok;
     17use AiPlusBlockEditor\Providers\Claude;
     18
    1619use AiPlusBlockEditor\Interfaces\Provider;
    1720
     
    4245                $ai_provider = DeepSeek::class;
    4346                break;
     47
     48            case 'Grok':
     49                $ai_provider = Grok::class;
     50                break;
     51
     52            case 'Claude':
     53                $ai_provider = Claude::class;
     54                break;
    4455        }
    4556
     
    5465     * `get_provider` method.
    5566     *
    56      * @since TBD
     67     * @since 1.1.2
    5768     *
    5869     * @param Provider $provider
  • ai-plus-block-editor/trunk/inc/Core/Container.php

    r3226770 r3376557  
    1212
    1313use AiPlusBlockEditor\Services\Admin;
     14use AiPlusBlockEditor\Services\Boot;
    1415use AiPlusBlockEditor\Services\PostMeta;
    15 use AiPlusBlockEditor\Services\Boot;
    1616use AiPlusBlockEditor\Services\Routes;
    1717use AiPlusBlockEditor\Interfaces\Kernel;
     
    3535        static::$services = [
    3636            Admin::class,
     37            Boot::class,
    3738            PostMeta::class,
    38             Boot::class,
    3939            Routes::class,
    4040        ];
  • ai-plus-block-editor/trunk/inc/Providers/DeepSeek.php

    r3319323 r3376557  
    1111namespace AiPlusBlockEditor\Providers;
    1212
    13 use AiPlusBlockEditor\Interfaces\Provider;
    1413use AiPlusBlockEditor\Admin\Options;
     14use AiPlusBlockEditor\Abstracts\Provider;
     15use AiPlusBlockEditor\Interfaces\Provider as ProviderInterface;
    1516
    16 class DeepSeek implements Provider {
     17class DeepSeek extends Provider implements ProviderInterface {
     18    /**
     19     * Provider name.
     20     *
     21     * @since 1.8.0
     22     *
     23     * @var string
     24     */
     25    protected static $name = 'DeepSeek';
     26
    1727    /**
    1828     * Get Default Args.
     
    5767     */
    5868    protected function get_api_url(): string {
    59         $url = esc_url( 'https://api.deepseek.com/chat/completions' );
     69        $url = 'https://api.deepseek.com/chat/completions';
    6070
    6171        /**
     
    6777         * @return string
    6878         */
    69         return apply_filters( 'apbe_deepseek_api_url', $url );
     79        return esc_url( (string) apply_filters( 'apbe_deepseek_api_url', $url ) );
    7080    }
    7181
     
    97107        }
    98108
     109        /**
     110         * Filter DeepSeek System Prompt.
     111         *
     112         * @since 1.8.0
     113         *
     114         * @param string $prompt DeepSeek System prompt.
     115         * @return string
     116         */
     117        $system_prompt = apply_filters( 'apbe_deepseek_system_prompt', 'You are a helpful assistant.' );
     118
    99119        // DeepSeek API expects a specific body structure.
    100120        $body = wp_parse_args(
     
    103123                    [
    104124                        'role'    => 'system',
    105                         'content' => 'You are a helpful assistant.',
     125                        'content' => $system_prompt,
    106126                    ],
    107127                    [
     
    127147
    128148        if ( is_wp_error( $response ) ) {
    129             return $this->get_json_error( $response->get_error_message() );
     149            return $this->get_json_error( $response->get_error_message(), $body );
    130150        }
    131151
    132152        $data = json_decode( wp_remote_retrieve_body( $response ), true );
    133153
    134         return $data['choices'][0]['message']['content'] ?? '';
    135     }
     154        // Notify user, if JSON yields null.
     155        if ( empty( $data ) || ! isset( $data['choices'][0]['message']['content'] ) ) {
     156            return $this->get_json_error(
     157                $data['error']['message'] ?? __( 'Unexpected DeepSeek API response.', 'ai-plus-block-editor' ),
     158                $body
     159            );
     160        }
    136161
    137     /**
    138      * Get JSON Error.
    139      *
    140      * @since 1.6.0
    141      *
    142      * @param string $message Error Message.
    143      * @return \WP_Error
    144      */
    145     protected function get_json_error( $message ) {
    146         return new \WP_Error(
    147             'ai-plus-block-editor-json-error',
    148             $message,
    149             [ 'status' => 500 ]
    150         );
     162        // Get API response.
     163        $response = $data['choices'][0]['message']['content'] ?? '';
     164
     165        // Return filtered response.
     166        return $this->get_provider_response( $response, wp_json_encode( $body ) );
    151167    }
    152168}
  • ai-plus-block-editor/trunk/inc/Providers/Gemini.php

    r3319323 r3376557  
    1111namespace AiPlusBlockEditor\Providers;
    1212
    13 use AiPlusBlockEditor\Interfaces\Provider;
    1413use AiPlusBlockEditor\Admin\Options;
     14use AiPlusBlockEditor\Abstracts\Provider;
     15use AiPlusBlockEditor\Interfaces\Provider as ProviderInterface;
    1516
    16 class Gemini implements Provider {
     17class Gemini extends Provider implements ProviderInterface {
     18    /**
     19     * Provider name.
     20     *
     21     * @since 1.8.0
     22     *
     23     * @var string
     24     */
     25    protected static $name = 'Gemini';
     26
    1727    /**
    1828     * Get Default Args.
     
    5767     */
    5868    protected function get_api_url(): string {
    59         $url = esc_url(
    60             sprintf(
    61                 'https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent',
    62                 $this->get_default_args()['model'] ?? ''
    63             )
     69        $url = sprintf(
     70            'https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent',
     71            $this->get_default_args()['model'] ?? ''
    6472        );
    6573
     
    7280         * @return string
    7381         */
    74         return apply_filters( 'apbe_gemini_api_url', $url );
     82        return esc_url( (string) apply_filters( 'apbe_gemini_api_url', $url ) );
    7583    }
    7684
     
    130138
    131139        if ( is_wp_error( $response ) ) {
    132             return $this->get_json_error( $response->get_error_message() );
     140            return $this->get_json_error( $response->get_error_message(), $body );
    133141        }
    134142
    135143        $data = json_decode( wp_remote_retrieve_body( $response ), true );
    136144
    137         if ( isset( $data['error'] ) ) {
    138             return $this->get_json_error( $data['error']['message'] ?? 'Unknown Gemini API error.' );
     145        // Notify user, if JSON yields null.
     146        if ( empty( $data ) || ! isset( $data['candidates'][0]['content']['parts'][0]['text'] ) ) {
     147            return $this->get_json_error(
     148                $data['error']['message'] ?? __( 'Unexpected Gemini API response.', 'ai-plus-block-editor' ),
     149                $body
     150            );
    139151        }
    140152
    141         return $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
    142     }
     153        // Get API response.
     154        $response = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
    143155
    144     /**
    145      * Get JSON Error.
    146      *
    147      * @since 1.5.0
    148      *
    149      * @param string $message Error Message.
    150      * @return \WP_Error
    151      */
    152     protected function get_json_error( $message ) {
    153         return new \WP_Error(
    154             'ai-plus-block-editor-json-error',
    155             $message,
    156             [ 'status' => 500 ]
    157         );
     156        // Return filtered response.
     157        return $this->get_provider_response( $response, wp_json_encode( $body ) );
    158158    }
    159159}
  • ai-plus-block-editor/trunk/inc/Providers/Grok.php

    r3365021 r3376557  
    1111namespace AiPlusBlockEditor\Providers;
    1212
    13 use AiPlusBlockEditor\Interfaces\Provider;
    1413use AiPlusBlockEditor\Admin\Options;
     14use AiPlusBlockEditor\Abstracts\Provider;
     15use AiPlusBlockEditor\Interfaces\Provider as ProviderInterface;
    1516
    16 class Grok implements Provider {
     17class Grok extends Provider implements ProviderInterface {
     18    /**
     19     * Provider name.
     20     *
     21     * @since 1.8.0
     22     *
     23     * @var string
     24     */
     25    protected static $name = 'Grok';
     26
    1727    /**
    1828     * Get Default Args.
     
    5363     */
    5464    protected function get_api_url(): string {
    55         $url = esc_url( 'https://api.x.ai/v1/chat/completions' );
     65        $url = 'https://api.x.ai/v1/chat/completions';
    5666
    5767        /**
     
    6373         * @return string
    6474         */
    65         return apply_filters( 'apbe_grok_api_url', $url );
     75        return esc_url( (string) apply_filters( 'apbe_grok_api_url', $url ) );
    6676    }
    6777
     
    105115        // Grok API expects a specific body structure.
    106116        $body = wp_parse_args(
    107             $this->get_default_args(),
    108117            [
    109118                'messages' => [
     
    117126                    ],
    118127                ],
    119             ]
     128            ],
     129            $this->get_default_args(),
    120130        );
    121131
     
    133143
    134144        if ( is_wp_error( $response ) ) {
    135             return $this->get_json_error( $response->get_error_message() );
     145            return $this->get_json_error( $response->get_error_message(), $body );
    136146        }
    137147
     
    141151        if ( empty( $data ) || ! isset( $data['choices'][0]['message']['content'] ) ) {
    142152            return $this->get_json_error(
    143                 $data['error']['message'] ?? __( 'Unexpected Grok API response.', 'ai-plus-block-editor' )
     153                $data['error']['message'] ?? __( 'Unexpected Grok API response.', 'ai-plus-block-editor' ),
     154                $body
    144155            );
    145156        }
    146157
    147         return $data['choices'][0]['message']['content'] ?? '';
    148     }
     158        // Get API response.
     159        $response = $data['choices'][0]['message']['content'] ?? '';
    149160
    150     /**
    151      * Get JSON Error.
    152      *
    153      * @since 1.7.0
    154      *
    155      * @param string $message Error Message.
    156      * @return \WP_Error
    157      */
    158     protected function get_json_error( $message ) {
    159         return new \WP_Error(
    160             'ai-plus-block-editor-json-error',
    161             $message,
    162             [ 'status' => 500 ]
    163         );
     161        // Return filtered response.
     162        return $this->get_provider_response( $response, wp_json_encode( $body ) );
    164163    }
    165164}
  • ai-plus-block-editor/trunk/inc/Providers/OpenAI.php

    r3316042 r3376557  
    1212
    1313use Orhanerday\OpenAi\OpenAi as ChatGPT;
     14
    1415use AiPlusBlockEditor\Admin\Options;
    15 use AiPlusBlockEditor\Interfaces\Provider;
     16use AiPlusBlockEditor\Abstracts\Provider;
     17use AiPlusBlockEditor\Interfaces\Provider as ProviderInterface;
    1618
    17 class OpenAI implements Provider {
     19class OpenAI extends Provider implements ProviderInterface {
     20    /**
     21     * Provider name.
     22     *
     23     * @since 1.8.0
     24     *
     25     * @var string
     26     */
     27    protected static $name = 'OpenAI';
     28
    1829    /**
    1930     * Get Default Args.
     
    8798        }
    8899
    89         $payload = wp_parse_args( [ 'role' => 'user' ], $payload );
     100        /**
     101         * Filter OpenAI System Prompt.
     102         *
     103         * @since 1.8.0
     104         *
     105         * @param string $prompt OpenAI System prompt.
     106         * @return string
     107         */
     108        $system_prompt = apply_filters( 'apbe_open_ai_system_prompt', 'You are ChatGPT, a highly intelligent, helpful AI assistant.' );
     109
     110        // ChatGPT expects a specific body structure.
     111        $body = wp_parse_args(
     112            [
     113                'messages' => [
     114                    [
     115                        'role'    => 'system',
     116                        'content' => $system_prompt,
     117                    ],
     118                    [
     119                        'role'    => 'user',
     120                        'content' => $prompt_text,
     121                    ],
     122                ],
     123            ],
     124            $this->get_default_args()
     125        );
    90126
    91127        try {
    92             $response = $this->get_client()->chat(
    93                 wp_parse_args(
    94                     [ 'messages' => [ $payload ] ],
    95                     $this->get_default_args()
    96                 )
    97             );
     128            $response = $this->get_client()->chat( $body );
    98129
    99             $response = json_decode( $response, true );
     130            if ( is_wp_error( $response ) ) {
     131                return $this->get_json_error( $response->get_error_message(), $body );
     132            }
     133
     134            // Get JSON response.
     135            $data = json_decode( $response, true );
    100136
    101137            // Deal gracefully, with API error.
    102             if ( isset( $response['error'] ) ) {
    103                 $error_msg = $response['error']['message'] ?? '';
    104                 error_log( $error_msg );
    105 
    106                 return $this->get_json_error( $error_msg );
     138            if ( empty( $data ) || isset( $data['error'] ) ) {
     139                return $this->get_json_error(
     140                    $data['error']['message'] ?? __( 'Unexpected OpenAI API response.', 'ai-plus-block-editor' ),
     141                    $body
     142                );
    107143            }
    108144        } catch ( \Exception $e ) {
    109             $error_msg = sprintf(
    110                 'Error: OpenAI API call failed... %s',
    111                 $e->getMessage()
     145            return $this->get_json_error(
     146                sprintf(
     147                    'Error: OpenAI API call failed... %s',
     148                    $e->getMessage()
     149                ),
     150                $body
    112151            );
    113             error_log( $error_msg );
    114 
    115             return $this->get_json_error( $error_msg );
    116152        }
    117153
    118         if ( is_null( $response ) ) {
    119             $error_msg = 'Error: OpenAI API call returned malformed JSON.';
    120             error_log( $error_msg );
    121 
    122             return $this->get_json_error( $error_msg );
     154        if ( is_null( $data ) ) {
     155            return $this->get_json_error(
     156                __( 'Error: OpenAI API call returned malformed JSON.', 'ai-plus-block-editor' ),
     157                $body
     158            );
    123159        }
    124160
    125         return $response['choices'][0]['message']['content'] ?? '';
    126     }
     161        // Get API response.
     162        $response = $data['choices'][0]['message']['content'] ?? '';
    127163
    128     /**
    129      * Get JSON Error.
    130      *
    131      * @since 1.0.0
    132      *
    133      * @param string $message Error Message.
    134      * @return \WP_Error
    135      */
    136     protected function get_json_error( $message ) {
    137         return new \WP_Error(
    138             'ai-plus-block-editor-json-error',
    139             $message,
    140             [ 'status' => 500 ]
    141         );
     164        // Return filtered response.
     165        return $this->get_provider_response( $response, wp_json_encode( $body ) );
    142166    }
    143167}
  • ai-plus-block-editor/trunk/inc/Services/Admin.php

    r3217971 r3376557  
    4646            Options::get_page_slug(),
    4747            [ $this, 'register_options_page' ],
    48             'dashicons-superhero',
     48            'data:image/svg+xml;base64,' . base64_encode(
     49                '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
     50                    <path d="M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z" />
     51                </svg>'
     52            ),
    4953            100
    5054        );
  • ai-plus-block-editor/trunk/inc/Services/Boot.php

    r3316042 r3376557  
    1414use AiPlusBlockEditor\Abstracts\Service;
    1515use AiPlusBlockEditor\Interfaces\Kernel;
     16use AiPlusBlockEditor\Abstracts\Provider;
    1617
    1718class Boot extends Service implements Kernel {
     
    5152            'apbe',
    5253            [
    53                 'provider' => get_option( Options::get_page_option(), [] )['ai_provider'] ?? '',
     54                'provider'  => get_option( Options::get_page_option(), [] )['ai_provider'] ?? '',
     55                'providers' => $this->get_providers(),
    5456            ]
    5557        );
     
    100102        return $assets;
    101103    }
     104
     105    /**
     106     * Get Providers.
     107     *
     108     * Return processed array with label and value
     109     * key-pairs for block editor use.
     110     *
     111     * @since 1.8.0
     112     *
     113     * @return array
     114     */
     115    protected function get_providers(): array {
     116        $providers = Provider::get_providers();
     117
     118        return array_map(
     119            function ( $key, $value ) {
     120                return [
     121                    'label' => $value,
     122                    'value' => $key,
     123                ];
     124            },
     125            array_keys( $providers ),
     126            array_values( $providers ),
     127        );
     128    }
    102129}
  • ai-plus-block-editor/trunk/readme.txt

    r3365034 r3376557  
    44Requires at least: 6.0
    55Tested up to: 6.8
    6 Stable tag: 1.7.1
     6Stable tag: 1.8.0
    77Requires PHP: 7.4
    88License: GPLv2 or later
     
    3333Our plugin comes with everything you need to add AI capabilities to your Block Editor.
    3434
    35 ✔️ <strong>Support for LLMs</strong> such as <strong>ChatGPT, Gemini, Deepseek, Grok</strong> and a host of others.
     35✔️ <strong>Support for LLMs</strong> such as <strong>ChatGPT, Gemini, Deepseek, Grok, Claude</strong> and a host of others.
    3636✔️ <strong>Change Text Tone (casual, official, narrative, and so on...)</strong> in block editor.
    3737✔️ <strong>Generate Title/Headline</strong> using AI.
     
    6868
    6969== Changelog ==
     70
     71= 1.8.0 =
     72* Feat: Implement Claude AI provider.
     73* Fix: Load missing Grok provider correctly.
     74* Feat: Implement AI provider abstraction.
     75* Refactor: Improve AI providers.
     76* Feat: Enable filtering of AI Switcher options.
     77* Feat: Add error logging capabilities.
     78* Chore: Update plugin menu icon.
     79* Feat: Add custom filters:
     80  - `apbe_ai_provider_success_call`.
     81  - `apbe_ai_provider_fail_call`.
     82  - `apbe_ai_provider_response`.
     83  - `apbe_ai_providers`.
     84  - `apbe_claude_api_url`.
     85  - `apbe_claude_args`.
     86  - `apbe_claude_system_prompt`.
     87  - `apbe_deepseek_system_prompt`.
     88  - `apbe_open_ai_system_prompt`.
     89* Docs: Update README docs.
     90* Test: Update unit tests.
     91* Tested up to WP 6.8.2.
    7092
    7193= 1.7.1 =
  • ai-plus-block-editor/trunk/vendor/autoload.php

    r3271395 r3376557  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInit814ef90cdff375a916f0f768d951d18f::getLoader();
     22return ComposerAutoloaderInit77424733094727f7b3216a40ad3d0de2::getLoader();
  • ai-plus-block-editor/trunk/vendor/composer/autoload_real.php

    r3217971 r3376557  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit814ef90cdff375a916f0f768d951d18f
     5class ComposerAutoloaderInit77424733094727f7b3216a40ad3d0de2
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit814ef90cdff375a916f0f768d951d18f', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit77424733094727f7b3216a40ad3d0de2', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit814ef90cdff375a916f0f768d951d18f', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit77424733094727f7b3216a40ad3d0de2', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInit814ef90cdff375a916f0f768d951d18f::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInit77424733094727f7b3216a40ad3d0de2::getInitializer($loader));
    3333
    3434        $loader->register(true);
  • ai-plus-block-editor/trunk/vendor/composer/autoload_static.php

    r3217971 r3376557  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit814ef90cdff375a916f0f768d951d18f
     7class ComposerStaticInit77424733094727f7b3216a40ad3d0de2
    88{
    99    public static $prefixLengthsPsr4 = array (
     
    4141    {
    4242        return \Closure::bind(function () use ($loader) {
    43             $loader->prefixLengthsPsr4 = ComposerStaticInit814ef90cdff375a916f0f768d951d18f::$prefixLengthsPsr4;
    44             $loader->prefixDirsPsr4 = ComposerStaticInit814ef90cdff375a916f0f768d951d18f::$prefixDirsPsr4;
    45             $loader->classMap = ComposerStaticInit814ef90cdff375a916f0f768d951d18f::$classMap;
     43            $loader->prefixLengthsPsr4 = ComposerStaticInit77424733094727f7b3216a40ad3d0de2::$prefixLengthsPsr4;
     44            $loader->prefixDirsPsr4 = ComposerStaticInit77424733094727f7b3216a40ad3d0de2::$prefixDirsPsr4;
     45            $loader->classMap = ComposerStaticInit77424733094727f7b3216a40ad3d0de2::$classMap;
    4646
    4747        }, null, ClassLoader::class);
  • ai-plus-block-editor/trunk/vendor/composer/installed.php

    r3365034 r3376557  
    44        'pretty_version' => 'dev-master',
    55        'version' => 'dev-master',
    6         'reference' => 'f7468ae6862d0db243eafd7ebf7ed9d4537ad0dc',
     6        'reference' => 'b33df36c00abb77ece613efa44e5f6eca0a9048d',
    77        'type' => 'package',
    88        'install_path' => __DIR__ . '/../../',
     
    1414            'pretty_version' => 'dev-master',
    1515            'version' => 'dev-master',
    16             'reference' => 'f7468ae6862d0db243eafd7ebf7ed9d4537ad0dc',
     16            'reference' => 'b33df36c00abb77ece613efa44e5f6eca0a9048d',
    1717            'type' => 'package',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.