@qarakash/blockwriteai 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof module&&module.exports?module.exports=t(require("../blockwriteai")):t(e.BlockWriteAI)}("undefined"!=typeof window?window:this,function(e){"use strict";if(!e||e.__aiPluginInstalled)return e||null;e.__aiPluginInstalled=!0;var t=e.helpers||{},r=t.el||function(e,t,r){var o=document.createElement(e);return t&&(o.className=t),Object.keys(r||{}).forEach(function(e){"html"===e?o.innerHTML=r[e]:"text"===e?o.textContent=r[e]:"dataset"===e?Object.keys(r[e]||{}).forEach(function(t){o.dataset[t]=r[e][t]}):!1!==r[e]&&null!=r[e]&&o.setAttribute(e,!0===r[e]?"":r[e])}),o},o=t.escapeHTML||function(e){return String(null==e?"":e).replace(/[&<>"]/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[e]})},i=t.faIcon||function(e,t){return'<i class="fa-solid fa-'+o(e)+'" aria-hidden="true"></i><span class="rbe-sr-only">'+o(t||e)+"</span>"},a=[["improve","wand-magic-sparkles","Improve writing","Make selected writing clearer and smoother."],["grammar","spell-check","Fix grammar","Correct grammar, spelling, and punctuation."],["summarize","compress","Summarize","Create a shorter version of the selected text."],["expand","up-right-and-down-left-from-center","Expand","Add helpful detail while keeping the meaning."],["professional","briefcase","Make professional","Rewrite in a polished business tone."]];function n(){if(!document.querySelector("style[data-blockwriteai-ai]")){var e=document.createElement("style");e.dataset.blockwriteaiAi="true",e.textContent=".rbe-ai-inline-btn{width:34px;height:34px;border:1px solid #cbd5e1;border-radius:8px;background:#eef6ff;color:#155eef;display:inline-grid;place-items:center;cursor:pointer;font-weight:800;}.rbe-ai-inline-btn:hover,.rbe-ai-inline-btn:focus-visible{border-color:#2563eb;background:#dbeafe;color:#1d4ed8;}.rbe-ai-inline-btn.is-open{border-color:#16a34a;background:#eafaf1;color:#087443;}.rbe-ai-toolbar-btn{position:absolute;left:50%;top:0;transform:translateX(-50%);width:38px;min-width:38px;padding-left:0;padding-right:0;justify-content:center;border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8;box-shadow:0 8px 24px rgba(37,99,235,.14);}.rbe-ai-toolbar-btn:hover:not(:disabled),.rbe-ai-toolbar-btn:focus-visible{border-color:#2563eb;background:#dbeafe;color:#1d4ed8;}.rbe-ai-toolbar-btn.is-open{border-color:#16a34a;background:#eafaf1;color:#087443;}.rbe-ai-drawer{position:fixed;right:18px;top:18px;z-index:11000;width:390px;max-width:calc(100vw - 24px);height:calc(100vh - 36px);display:grid;grid-template-rows:auto 1fr auto;border:1px solid #cbd5e1;border-radius:14px;background:#fff;box-shadow:0 28px 80px rgba(15,23,42,.25);overflow:hidden;opacity:0;pointer-events:none;transform:translateX(calc(100% + 34px));transition:transform .28s cubic-bezier(.22,1,.36,1),opacity .2s ease;will-change:transform,opacity;}.rbe-ai-drawer.is-open{opacity:1;pointer-events:auto;transform:translateX(0);}.rbe-ai-drawer[hidden]{display:none!important;}.rbe-ai-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #e2e8f0;background:linear-gradient(135deg,#f8fbff,#eef6ff);}.rbe-ai-title{display:flex;align-items:center;gap:10px;font-weight:850;color:#0f172a;}.rbe-ai-title-icon{width:34px;height:34px;border-radius:10px;background:#eafaf2;color:#12a865;display:grid;place-items:center;}.rbe-ai-close{width:32px;height:32px;border:1px solid #cbd5e1;border-radius:999px;background:#fff;color:#172033;display:grid;place-items:center;cursor:pointer;}.rbe-ai-body{padding:14px 16px;overflow:auto;display:grid;gap:14px;align-content:start;}.rbe-ai-section{display:grid;gap:8px;}.rbe-ai-label{font-size:12px;font-weight:850;text-transform:uppercase;letter-spacing:.03em;color:#667085;}.rbe-ai-selection,.rbe-ai-result{border:1px solid #d7dee8;border-radius:10px;background:#f8fafc;color:#172033;padding:10px 12px;min-height:54px;max-height:132px;overflow:auto;font:13px/1.45 Arial,sans-serif;white-space:pre-wrap;}.rbe-ai-selection.is-empty{color:#98a2b3;}.rbe-ai-mode{display:flex;align-items:flex-start;gap:10px;border:1px solid #d7dee8;border-radius:10px;background:#fff;padding:10px 12px;cursor:pointer;}.rbe-ai-mode:hover{border-color:#93c5fd;background:#eff6ff;}.rbe-ai-mode input{width:18px;height:18px;margin:1px 0 0;accent-color:#16a34a;flex:0 0 auto;}.rbe-ai-mode strong{display:block;font-size:13px;line-height:1.2;color:#172033;}.rbe-ai-mode small{display:block;margin-top:3px;color:#667085;font-size:11px;line-height:1.3;}.rbe-ai-action-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;}.rbe-ai-action{border:1px solid #d7dee8;border-radius:10px;background:#fff;color:#172033;padding:10px;display:flex;gap:9px;align-items:flex-start;text-align:left;cursor:pointer;}.rbe-ai-action:hover,.rbe-ai-action:focus-visible{border-color:#2563eb;background:#eff6ff;}.rbe-ai-action i{margin-top:2px;color:#1d4ed8;}.rbe-ai-action strong{display:block;font-size:13px;line-height:1.2;}.rbe-ai-action small{display:block;margin-top:3px;color:#667085;font-size:11px;line-height:1.25;}.rbe-ai-prompt{width:100%;min-height:110px;resize:vertical;border:1px solid #d7dee8;border-radius:10px;padding:10px 12px;color:#172033;font:14px/1.45 Arial,sans-serif;}.rbe-ai-prompt:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.12);}.rbe-ai-primary,.rbe-ai-secondary{border:1px solid #cbd5e1;border-radius:9px;background:#fff;color:#172033;font-weight:850;padding:9px 12px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;}.rbe-ai-primary{border-color:#2563eb;background:#2563eb;color:#fff;}.rbe-ai-primary:hover{background:#1d4ed8;}.rbe-ai-secondary:hover{border-color:#2563eb;color:#1d4ed8;background:#eff6ff;}.rbe-ai-primary[disabled],.rbe-ai-secondary[disabled],.rbe-ai-action[disabled]{opacity:.55;cursor:not-allowed;}.rbe-ai-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:12px 16px;border-top:1px solid #e2e8f0;background:#f8fafc;}.rbe-ai-foot-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;min-width:0;width:100%;}.rbe-ai-apply{flex:0 1 112px;min-width:96px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.rbe-toast-stack{position:fixed;right:18px;bottom:18px;z-index:12000;display:grid;gap:10px;width:min(360px,calc(100vw - 24px));pointer-events:none;}.rbe-toast{display:flex;align-items:flex-start;gap:10px;border:1px solid #d7dee8;border-radius:12px;background:#fff;color:#172033;padding:12px 14px;box-shadow:0 18px 48px rgba(15,23,42,.18);opacity:0;transform:translateY(12px) scale(.98);transition:opacity .24s ease,transform .24s ease;pointer-events:auto;}.rbe-toast.is-show{opacity:1;transform:translateY(0) scale(1);}.rbe-toast.is-hiding{opacity:0;transform:translateY(10px) scale(.98);}.rbe-toast i{margin-top:2px;}.rbe-toast strong{display:block;font-size:13px;line-height:1.25;}.rbe-toast span{display:block;margin-top:2px;font-size:12px;line-height:1.4;color:#475467;}.rbe-toast.is-error{border-color:#fecaca;background:#fff7f7;}.rbe-toast.is-error i,.rbe-toast.is-error strong{color:#b42318;}.rbe-toast.is-warning{border-color:#fedf89;background:#fffbeb;}.rbe-toast.is-warning i,.rbe-toast.is-warning strong{color:#b54708;}@media (max-width:900px){.rbe-ai-toolbar-btn{position:static;transform:none;order:-1;}}@media (max-width:700px){.rbe-ai-drawer{inset:10px;width:auto;height:auto;max-height:calc(100dvh - 20px);border-radius:12px;}.rbe-ai-action-grid{grid-template-columns:1fr;}.rbe-ai-head,.rbe-ai-body,.rbe-ai-foot{padding-left:12px;padding-right:12px;}}@media (max-width:520px){.rbe-ai-foot-actions{justify-content:stretch;width:100%;}.rbe-ai-primary,.rbe-ai-secondary{width:100%;}.rbe-ai-apply{flex:1 1 auto;min-width:0;}.rbe-ai-title{min-width:0;}.rbe-ai-title span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.rbe-toast-stack{right:10px;bottom:10px;width:calc(100vw - 20px);}}",document.head.appendChild(e)}}function s(e,t){if(!e||!e.root||!t)return!1;var r=t.commonAncestorContainer;return r&&r.nodeType!==Node.ELEMENT_NODE&&(r=r.parentElement),!(!r||!e.root.contains(r))}function l(e){var t=function(e){var t=window.getSelection();if(t&&t.rangeCount&&!t.isCollapsed){var r=t.getRangeAt(0);if(s(e,r))return e.savedRange=r.cloneRange(),e.savedRange}return e.savedRange&&s(e,e.savedRange)?e.savedRange:null}(e);return t?t.toString().trim():""}function c(e,t,r){if(!(r=r||e.__blockwriteaiAI&&e.__blockwriteaiAI.lastRange||e.savedRange)||!s(e,r))return!1;var o=window.getSelection();o.removeAllRanges(),o.addRange(r),r.deleteContents();var i=function(e){var t=document.createDocumentFragment();return String(e||"").split(/\n/).forEach(function(e,r){r&&t.appendChild(document.createElement("br")),t.appendChild(document.createTextNode(e))}),t}(t),a=i.lastChild;if(r.insertNode(i),a&&a.parentNode){var n=document.createRange();n.setStartAfter(a),n.collapse(!0),o.removeAllRanges(),o.addRange(n),e.savedRange=n.cloneRange()}return"function"==typeof e.noteHistory&&e.noteHistory("AI","Text applied"),"function"==typeof e.changed&&e.changed(!0),"function"==typeof e.updateInlineToolbarState&&e.updateInlineToolbarState(),!0}function d(t){var r=t&&t.options?t.options.ai:null;return r&&"string"==typeof r.endpoint&&r.endpoint?r.endpoint:e.ai&&"string"==typeof e.ai.endpoint&&e.ai.endpoint?e.ai.endpoint:e.platformEndpoints&&"string"==typeof e.platformEndpoints.aiGenerate?e.platformEndpoints.aiGenerate:"api/ai.php"}function p(e){return/\/api\/ai_generate\.php(?:[?#].*)?$/i.test(String(e||""))}function u(e){if(!e||"function"!=typeof e.isPremiumFeatureEnabled)return!0;try{return e.isPremiumFeatureEnabled.call(e,"ai")}catch(e){return!1}}function f(e){if(e&&"function"==typeof e.premiumMessage)try{return e.premiumMessage.call(e,"ai")}catch(e){}return"AI is locked. Please add an active BlockWriteAI premium license."}function b(e){if(u(e))return!0;if(_(e,f(e),"warning"),e&&"function"==typeof e.showPremiumUpgradeModal)try{e.showPremiumUpgradeModal.call(e,"ai","locked")}catch(e){}return!1}function g(e,t){return(e=String(null==e?"":e).trim()).length>t?e.slice(0,t):e}function m(e){if(!e)return"";if("string"==typeof e.result)return e.result;if(Array.isArray(e.blocks))return"Generated "+e.blocks.length+" block(s).";if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch(e){return""}}function h(e,t,r,o){var i=function(e,t){return t&&t.usage_event_id?t.usage_event_id:t&&t.usage_result&&t.usage_result.event_id?t.usage_result.event_id:e&&e.lastPremiumUsageResult&&e.lastPremiumUsageResult.event_id?e.lastPremiumUsageResult.event_id:null}(e,t),a=e&&e.premiumOptions?e.premiumOptions:{},n=function(e){var t=e&&e.premiumOptions?e.premiumOptions:{};return t.usageDetailEndpoint?t.usageDetailEndpoint:t.usageEndpoint?t.usageEndpoint.replace(/ai_usage\.php(?:\?.*)?$/i,"ai_usage_detail.php"):""}(e);if(!i||!n||!a.licenseKey||"function"!=typeof fetch)return Promise.resolve();var s=Object.assign({action:"update",license_key:a.licenseKey,event_id:i,route:g(r&&r.route,80),prompt:g(r&&r.prompt,4e3),selected_text:g(r&&r.text,3e3)},o||{});return a.sessionToken&&(s.session_token=a.sessionToken),fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(s)}).catch(function(){})}function y(e){if(e&&e.root){var t=!u(e);Array.prototype.slice.call(e.root.querySelectorAll(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn")).forEach(function(r){r.classList.toggle("is-premium-locked",t),r.setAttribute("aria-disabled",t?"true":"false"),r.title=t?f(e):"BlockWriteAI"}),t&&S(e)&&E(e)}}function x(e,t){var r=d(e),o=Date.now();t=function(e,t,r){if(t=Object.assign({},t||{}),!p(r))return t;var o=e&&e.premiumOptions?e.premiumOptions:{};return o.licenseKey&&!t.license_key&&(t.license_key=o.licenseKey),o.sessionToken&&!t.session_token&&(t.session_token=o.sessionToken),t}(e,t,r);var i=null;return function(e,t){if(p(d(e)))return Promise.resolve();if(e&&"function"==typeof e.consumePremiumUsage)try{return Promise.resolve(e.consumePremiumUsage.call(e,"ai",{action:t&&t.action?t.action:"generate",source:"ai_plugin",prompt:t&&t.prompt?t.prompt:"",selected_text:t&&t.text?t.text:""}))}catch(e){return Promise.reject(e)}return Promise.resolve()}(e,t).then(function(a){i=a;var n=a&&(a.usage_result||a.lastPremiumUsageResult);return n&&(n.model&&(t.model=n.model),n.route&&(t.route=n.route),void 0!==n.credits_required&&(t.credits_required=n.credits_required)),fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)}).then(function(r){return r.json().catch(function(){return{}}).then(function(a){if(!r.ok||!1===a.ok){var n=new Error(a.error||"AI request failed");throw n.httpStatus=r.status,n}return h(e,i,t,{status:"completed",duration_ms:Date.now()-o,model:a.model||"",model_used:a.model_used||a.model||"",input_tokens:a.input_tokens||0,output_tokens:a.output_tokens||0,total_tokens:a.total_tokens||0,estimated_cost:a.estimated_cost||0,response_source:a.response_source||"",response_type:a.type||(Array.isArray(a.blocks)?"blocks":"text"),response:g(m(a),6e3),response_character_count:a.response_character_count||void 0,response_token_count:a.response_token_count||void 0,blocks_generated:Array.isArray(a.blocks)?a.blocks.length:void 0}),a})})}).catch(function(r){throw h(e,i,t,{status:"failed",duration_ms:Date.now()-o,http_status:r&&r.httpStatus?r.httpStatus:0,response_type:"error",error_reason:g(r&&r.message?r.message:"AI request failed",1200)}),r})}function v(e){return e.__blockwriteaiAI||(e.__blockwriteaiAI={drawer:null,lastRange:null,lastText:"",result:"",loading:!1,closeTimer:null,progressTimer:null}),e.__blockwriteaiAI}function w(e,t,r){e&&e.root&&"function"==typeof CustomEvent&&e.root.dispatchEvent(new CustomEvent("rbe:ai-progress",{bubbles:!0,detail:{active:!!t,message:r||""}}))}function k(e,t,r,o){var i=v(e);i.progressTimer&&(clearTimeout(i.progressTimer),i.progressTimer=null),t?w(e,!0,r||"Working with BlockWriteAI..."):i.progressTimer=setTimeout(function(){w(e,!1,""),i.progressTimer=null},"number"==typeof o?o:0)}function _(e,t,a){if(t&&"undefined"!=typeof document){n();var s=document.querySelector(".rbe-toast-stack");s||(s=r("div","rbe-toast-stack",{role:"status","aria-live":"polite"}),document.body.appendChild(s));var l="error"===a?"error":"warning",c=r("div","rbe-toast is-"+l,{});c.innerHTML=i("error"===l?"circle-exclamation":"triangle-exclamation",l)+"<div><strong>"+o("error"===l?"BlockWriteAI error":"BlockWriteAI warning")+"</strong><span>"+o(t)+"</span></div>",s.appendChild(c),requestAnimationFrame(function(){c.classList.add("is-show")}),setTimeout(function(){c.classList.remove("is-show"),c.classList.add("is-hiding"),setTimeout(function(){c.parentNode&&c.parentNode.removeChild(c),s&&!s.children.length&&s.parentNode&&s.parentNode.removeChild(s)},260)},5e3)}}function A(e,t){var r=v(e);r.loading=!!t,r.drawer&&Array.prototype.slice.call(r.drawer.querySelectorAll("button")).forEach(function(e){e.classList.contains("rbe-ai-close")||(e.disabled=!!t||e.classList.contains("rbe-ai-apply")&&!r.result)})}function T(e){var t=v(e);if(t.drawer){var r=l(e);t.lastRange=e.savedRange&&s(e,e.savedRange)?e.savedRange.cloneRange():null,t.lastText=r;var o=t.drawer.querySelector(".rbe-ai-selection");o&&(o.textContent=r||"Select text in the editor, then choose an AI action.",o.classList.toggle("is-empty",!r))}}function I(e,t){e&&e.root&&Array.prototype.slice.call(e.root.querySelectorAll(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn")).forEach(function(e){e.classList.toggle("is-open",!!t)})}function S(e){var t=v(e);return!(!t.drawer||t.drawer.hidden||!t.drawer.classList.contains("is-open"))}function C(e){if(b(e)){var t,s,l=v(e),c=function(e){var t=v(e);if(t.drawer)return t.drawer;n();var s=r("aside","rbe-ai-drawer",{hidden:!0,role:"dialog","aria-label":"BlockWriteAI"});return s.innerHTML='<div class="rbe-ai-head"><div class="rbe-ai-title"><span class="rbe-ai-title-icon">'+i("wand-magic-sparkles","BlockWriteAI")+'</span><span>BlockWriteAI</span></div><button type="button" class="rbe-ai-close" title="Close AI">'+i("xmark","Close")+'</button></div><div class="rbe-ai-body"><section class="rbe-ai-section"><div class="rbe-ai-label">Selection</div><div class="rbe-ai-selection is-empty"></div></section><section class="rbe-ai-section"><div class="rbe-ai-label">Actions</div><div class="rbe-ai-action-grid">'+a.map(function(e){return'<button type="button" class="rbe-ai-action" data-ai-action="'+o(e[0])+'">'+i(e[1],e[2])+"<span><strong>"+o(e[2])+"</strong><small>"+o(e[3])+"</small></span></button>"}).join("")+'</div></section><section class="rbe-ai-section"><div class="rbe-ai-label">Generate blocks from prompt</div><textarea class="rbe-ai-prompt" placeholder="Example: Create a short project proposal with a heading, summary, checklist, and next steps."></textarea><button type="button" class="rbe-ai-primary rbe-ai-generate">'+i("sparkles","Generate")+'<span>Generate blocks</span></button></section><section class="rbe-ai-section"><div class="rbe-ai-label">Result</div><div class="rbe-ai-result"></div></section></div><div class="rbe-ai-foot"><div class="rbe-ai-foot-actions"><button type="button" class="rbe-ai-secondary rbe-ai-apply" disabled>'+i("check","Apply")+"<span>Apply</span></button></div></div>",e.root.appendChild(s),t.drawer=s,s}(e);T(e),l.closeTimer&&(clearTimeout(l.closeTimer),l.closeTimer=null),c.hidden=!1,c.getBoundingClientRect(),requestAnimationFrame(function(){c.classList.add("is-open")}),I(e,!0),(t="")&&s&&_(0,t,"error"),l.lastText||setTimeout(function(){var e=c.querySelector(".rbe-ai-prompt");e&&e.focus()},0)}}function E(e){var t=v(e);t.drawer&&(t.closeTimer&&clearTimeout(t.closeTimer),t.drawer.classList.remove("is-open"),I(e,!1),t.closeTimer=setTimeout(function(){t.drawer&&(t.drawer.hidden=!0,t.closeTimer=null)},300))}function R(e,t){var r=v(e);if(r.result=String(t||"").trim(),r.drawer){var o=r.drawer.querySelector(".rbe-ai-result"),i=r.drawer.querySelector(".rbe-ai-apply");o&&(o.textContent=r.result),i&&(i.disabled=r.loading||!r.result)}}function P(e){return e&&"object"==typeof e?{type:String(e.type||"paragraph"),data:e.data&&"object"==typeof e.data?e.data:{}}:null}function B(e,t){if(!(t=(t||[]).map(P).filter(Boolean)).length)return 0;var r="function"==typeof e.getCurrentBlock?e.getCurrentBlock():null,o=r&&"function"==typeof e.indexOfBlock?e.indexOfBlock(r)+1:e.canvas.children.length,i=e.canvas&&1===e.canvas.children.length?e.canvas.children[0]:null;i&&function(e){if(!e||!e.dataset||"paragraph"!==e.dataset.type)return!1;var t=e.querySelector(".rbe-paragraph"),r=t?t.textContent:e.textContent;return!String(r||"").trim()}(i)&&(o=0,i.remove());var a=0;return t.forEach(function(t){if(function(t){if(!e||"function"!=typeof e.getPremiumFeatureForTool||"function"!=typeof e.isPremiumFeatureEnabled)return!0;var r=e.getPremiumFeatureForTool.call(e,t);return!(r&&!e.isPremiumFeatureEnabled.call(e,r)&&("function"==typeof e.showPremiumLocked&&e.showPremiumLocked.call(e,r),1))}(t.type))try{var r=null;"function"==typeof e.insertBlock?(r=e.insertBlock.call(e,t.type,t.data,o))&&(o+=1):"function"==typeof e.createBlock&&(r=e.createBlock.call(e,t.type,t.data),e.canvas.appendChild(r)),r&&(a+=1)}catch(e){_(0,e&&e.message?e.message:"Unable to insert generated block.","error")}}),a&&"function"==typeof e.noteHistory&&e.noteHistory("AI","Generated "+a+" blocks"),a&&"function"==typeof e.changed&&e.changed(!0),a}function q(e){e&&e.root&&!e.__blockwriteaiAIRefreshBound&&(e.root.addEventListener("rbe:premium-change",y.bind(null,e)),e.__blockwriteaiAIRefreshBound=!0)}function j(e,t){return t=t||e&&e.topToolbar,e&&!1!==e.options.ai&&t?(n(),t.querySelector(".rbe-ai-toolbar-btn")||t.appendChild(r("button","rbe-history-btn rbe-ai-toolbar-btn",{type:"button",title:"BlockWriteAI",html:i("wand-magic-sparkles","BlockWriteAI"),dataset:{aiToolbar:"true",premiumFeature:"ai",unlockedTitle:"BlockWriteAI"}})),q(e),y(e),t):t}function D(e,t){return t=t||e&&e.inlineToolbar,e&&!1!==e.options.ai&&t?(n(),t.querySelector(".rbe-ai-inline-btn")||t.appendChild(r("button","rbe-ai-inline-btn",{type:"button",title:"BlockWriteAI",html:i("wand-magic-sparkles","AI"),dataset:{aiInline:"true",premiumFeature:"ai",unlockedTitle:"BlockWriteAI"}})),q(e),y(e),t):t}var O=e.prototype.createTopToolbar;e.prototype.createTopToolbar=function(){return j(this,O.call(this))};var L=e.prototype.createInlineToolbar;e.prototype.createInlineToolbar=function(){return D(this,L.call(this))},e.prototype.openAI=function(){return!1===this.options.ai?null:b(this)?(C(this),this):null};var W=e.prototype.handleRootClick;e.prototype.handleRootClick=function(e){var t,r=e.target;if(r.closest&&r.closest(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn"))return e.preventDefault(),e.stopPropagation(),void(b(t=this)&&(S(t)?E(t):C(t)));if(r.closest&&r.closest(".rbe-ai-close"))return e.preventDefault(),e.stopPropagation(),void E(this);var o=r.closest&&r.closest(".rbe-ai-action");if(o)return e.preventDefault(),e.stopPropagation(),void function(e,t){if(b(e)){var r=v(e);T(e),r.lastText?(A(e,!0),R(e,""),k(e,!0,"Improving selected text with BlockWriteAI..."),x(e,{action:t,text:r.lastText,document:"function"==typeof e.getData?e.getData():null}).then(function(t){R(e,t.result||"")}).catch(function(e){_(0,e.message||"AI request failed","error")}).finally(function(){A(e,!1),k(e,!1,"",250)})):_(0,"Select text first, then run an AI action.","warning")}}(this,o.dataset.aiAction);if(r.closest&&r.closest(".rbe-ai-generate"))return e.preventDefault(),e.stopPropagation(),void function(e){if(b(e)){var t=v(e),r=t.drawer&&t.drawer.querySelector(".rbe-ai-prompt"),o=r?r.value.trim():"";o?(A(e,!0),R(e,""),k(e,!0,"Generating BlockWriteAI blocks..."),x(e,{action:"generate_blocks",prompt:o,document:"function"==typeof e.getData?e.getData():null}).then(function(t){B(e,t.blocks||[])||_(0,"AI returned no blocks.","warning")}).catch(function(e){_(0,e.message||"AI generation failed","error")}).finally(function(){A(e,!1),k(e,!1,"",250)})):_(0,"Write a prompt before generating blocks.","warning")}}(this);if(!r.closest||!r.closest(".rbe-ai-apply"))return W.call(this,e);e.preventDefault(),e.stopPropagation();var i=v(this);i.result&&c(this,i.result,i.lastRange)?(k(this,!0,"Applying BlockWriteAI result..."),R(this,""),T(this),k(this,!1,"",600)):_(0,"There is no AI result ready to apply.","warning")};var F=e.prototype.handleDocumentMouseDown;return e.prototype.handleDocumentMouseDown=function(e){if(!e.target.closest||!e.target.closest(".rbe-ai-drawer, .rbe-ai-inline-btn, .rbe-ai-toolbar-btn"))return S(this)&&E(this),F.call(this,e)},e.ai=e.ai||{},e.enableAI=function(t){return e.ai=Object.assign(e.ai||{},t||{}),e.configure({ai:Object.assign({},e.ai)}),e},"undefined"!=typeof document&&Array.prototype.slice.call(document.querySelectorAll(".rbe")).forEach(function(e){var t=e.__blockwriteaiInstance;t&&(j(t),D(t))}),e});
1
+ !function(e,t){"object"==typeof module&&module.exports?module.exports=t(require("../blockwriteai")):t(e.BlockWriteAI)}("undefined"!=typeof window?window:this,function(e){"use strict";if(!e||e.__aiPluginInstalled)return e||null;e.__aiPluginInstalled=!0;var t=e.helpers||{},r=t.el||function(e,t,r){var i=document.createElement(e);return t&&(i.className=t),Object.keys(r||{}).forEach(function(e){"html"===e?i.innerHTML=r[e]:"text"===e?i.textContent=r[e]:"dataset"===e?Object.keys(r[e]||{}).forEach(function(t){i.dataset[t]=r[e][t]}):!1!==r[e]&&null!=r[e]&&i.setAttribute(e,!0===r[e]?"":r[e])}),i},i=t.escapeHTML||function(e){return String(null==e?"":e).replace(/[&<>"]/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[e]})},o=t.faIcon||function(e,t){return'<i class="fa-solid fa-'+i(e)+'" aria-hidden="true"></i><span class="rbe-sr-only">'+i(t||e)+"</span>"},a=[["improve","wand-magic-sparkles","Improve writing","Make selected writing clearer and smoother."],["grammar","spell-check","Fix grammar","Correct grammar, spelling, and punctuation."],["summarize","compress","Summarize","Create a shorter version of the selected text."],["expand","up-right-and-down-left-from-center","Expand","Add helpful detail while keeping the meaning."],["professional","briefcase","Make professional","Rewrite in a polished business tone."]];function n(){if(!document.querySelector("style[data-blockwriteai-ai]")){var e=document.createElement("style");e.dataset.blockwriteaiAi="true",e.textContent=".rbe-ai-inline-btn{width:34px;height:34px;border:1px solid #cbd5e1;border-radius:8px;background:#eef6ff;color:#155eef;display:inline-grid;place-items:center;cursor:pointer;font-weight:800;}.rbe-ai-inline-btn:hover,.rbe-ai-inline-btn:focus-visible{border-color:#2563eb;background:#dbeafe;color:#1d4ed8;}.rbe-ai-inline-btn.is-open{border-color:#16a34a;background:#eafaf1;color:#087443;}.rbe-ai-toolbar-btn{position:absolute;left:50%;top:0;transform:translateX(-50%);width:38px;min-width:38px;padding-left:0;padding-right:0;justify-content:center;border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8;box-shadow:0 8px 24px rgba(37,99,235,.14);}.rbe-ai-toolbar-btn:hover:not(:disabled),.rbe-ai-toolbar-btn:focus-visible{border-color:#2563eb;background:#dbeafe;color:#1d4ed8;}.rbe-ai-toolbar-btn.is-open{border-color:#16a34a;background:#eafaf1;color:#087443;}.rbe-ai-drawer{position:fixed;right:18px;top:18px;z-index:11000;width:390px;max-width:calc(100vw - 24px);height:calc(100vh - 36px);display:grid;grid-template-rows:auto 1fr auto;border:1px solid #cbd5e1;border-radius:14px;background:#fff;box-shadow:0 28px 80px rgba(15,23,42,.25);overflow:hidden;opacity:0;pointer-events:none;transform:translateX(calc(100% + 34px));transition:transform .28s cubic-bezier(.22,1,.36,1),opacity .2s ease;will-change:transform,opacity;}.rbe-ai-drawer.is-open{opacity:1;pointer-events:auto;transform:translateX(0);}.rbe-ai-drawer[hidden]{display:none!important;}.rbe-ai-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #e2e8f0;background:linear-gradient(135deg,#f8fbff,#eef6ff);}.rbe-ai-title{display:flex;align-items:center;gap:10px;font-weight:850;color:#0f172a;}.rbe-ai-title-icon{width:34px;height:34px;border-radius:10px;background:#eafaf2;color:#12a865;display:grid;place-items:center;}.rbe-ai-close{width:32px;height:32px;border:1px solid #cbd5e1;border-radius:999px;background:#fff;color:#172033;display:grid;place-items:center;cursor:pointer;}.rbe-ai-body{padding:14px 16px;overflow:auto;display:grid;gap:14px;align-content:start;}.rbe-ai-section{display:grid;gap:8px;}.rbe-ai-label{font-size:12px;font-weight:850;text-transform:uppercase;letter-spacing:.03em;color:#667085;}.rbe-ai-selection,.rbe-ai-result{border:1px solid #d7dee8;border-radius:10px;background:#f8fafc;color:#172033;padding:10px 12px;min-height:54px;max-height:132px;overflow:auto;font:13px/1.45 Arial,sans-serif;white-space:pre-wrap;}.rbe-ai-selection.is-empty{color:#98a2b3;}.rbe-ai-mode{display:flex;align-items:flex-start;gap:10px;border:1px solid #d7dee8;border-radius:10px;background:#fff;padding:10px 12px;cursor:pointer;}.rbe-ai-mode:hover{border-color:#93c5fd;background:#eff6ff;}.rbe-ai-mode input{width:18px;height:18px;margin:1px 0 0;accent-color:#16a34a;flex:0 0 auto;}.rbe-ai-mode strong{display:block;font-size:13px;line-height:1.2;color:#172033;}.rbe-ai-mode small{display:block;margin-top:3px;color:#667085;font-size:11px;line-height:1.3;}.rbe-ai-action-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;}.rbe-ai-action{border:1px solid #d7dee8;border-radius:10px;background:#fff;color:#172033;padding:10px;display:flex;gap:9px;align-items:flex-start;text-align:left;cursor:pointer;}.rbe-ai-action:hover,.rbe-ai-action:focus-visible{border-color:#2563eb;background:#eff6ff;}.rbe-ai-action i{margin-top:2px;color:#1d4ed8;}.rbe-ai-action strong{display:block;font-size:13px;line-height:1.2;}.rbe-ai-action small{display:block;margin-top:3px;color:#667085;font-size:11px;line-height:1.25;}.rbe-ai-prompt{width:100%;min-height:110px;resize:vertical;border:1px solid #d7dee8;border-radius:10px;padding:10px 12px;color:#172033;font:14px/1.45 Arial,sans-serif;}.rbe-ai-prompt:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.12);}.rbe-ai-primary,.rbe-ai-secondary{border:1px solid #cbd5e1;border-radius:9px;background:#fff;color:#172033;font-weight:850;padding:9px 12px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;}.rbe-ai-primary{border-color:#2563eb;background:#2563eb;color:#fff;}.rbe-ai-primary:hover{background:#1d4ed8;}.rbe-ai-secondary:hover{border-color:#2563eb;color:#1d4ed8;background:#eff6ff;}.rbe-ai-primary[disabled],.rbe-ai-secondary[disabled],.rbe-ai-action[disabled]{opacity:.55;cursor:not-allowed;}.rbe-ai-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:12px 16px;border-top:1px solid #e2e8f0;background:#f8fafc;}.rbe-ai-foot-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;min-width:0;width:100%;}.rbe-ai-apply{flex:0 1 112px;min-width:96px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.rbe-toast-stack{position:fixed;right:18px;bottom:18px;z-index:12000;display:grid;gap:10px;width:min(360px,calc(100vw - 24px));pointer-events:none;}.rbe-toast{display:flex;align-items:flex-start;gap:10px;border:1px solid #d7dee8;border-radius:12px;background:#fff;color:#172033;padding:12px 14px;box-shadow:0 18px 48px rgba(15,23,42,.18);opacity:0;transform:translateY(12px) scale(.98);transition:opacity .24s ease,transform .24s ease;pointer-events:auto;}.rbe-toast.is-show{opacity:1;transform:translateY(0) scale(1);}.rbe-toast.is-hiding{opacity:0;transform:translateY(10px) scale(.98);}.rbe-toast i{margin-top:2px;}.rbe-toast strong{display:block;font-size:13px;line-height:1.25;}.rbe-toast span{display:block;margin-top:2px;font-size:12px;line-height:1.4;color:#475467;}.rbe-toast.is-error{border-color:#fecaca;background:#fff7f7;}.rbe-toast.is-error i,.rbe-toast.is-error strong{color:#b42318;}.rbe-toast.is-warning{border-color:#fedf89;background:#fffbeb;}.rbe-toast.is-warning i,.rbe-toast.is-warning strong{color:#b54708;}@media (max-width:900px){.rbe-ai-toolbar-btn{position:static;transform:none;order:-1;}}@media (max-width:700px){.rbe-ai-drawer{inset:10px;width:auto;height:auto;max-height:calc(100dvh - 20px);border-radius:12px;}.rbe-ai-action-grid{grid-template-columns:1fr;}.rbe-ai-head,.rbe-ai-body,.rbe-ai-foot{padding-left:12px;padding-right:12px;}}@media (max-width:520px){.rbe-ai-foot-actions{justify-content:stretch;width:100%;}.rbe-ai-primary,.rbe-ai-secondary{width:100%;}.rbe-ai-apply{flex:1 1 auto;min-width:0;}.rbe-ai-title{min-width:0;}.rbe-ai-title span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.rbe-toast-stack{right:10px;bottom:10px;width:calc(100vw - 20px);}}",document.head.appendChild(e)}}function s(e,t){if(!e||!e.root||!t)return!1;var r=t.commonAncestorContainer;return r&&r.nodeType!==Node.ELEMENT_NODE&&(r=r.parentElement),!(!r||!e.root.contains(r))}function l(e){var t=function(e){var t=window.getSelection();if(t&&t.rangeCount&&!t.isCollapsed){var r=t.getRangeAt(0);if(s(e,r))return e.savedRange=r.cloneRange(),e.savedRange}return e.savedRange&&s(e,e.savedRange)?e.savedRange:null}(e);return t?t.toString().trim():""}function c(e,t,r){if(!(r=r||e.__blockwriteaiAI&&e.__blockwriteaiAI.lastRange||e.savedRange)||!s(e,r))return!1;var i=window.getSelection();i.removeAllRanges(),i.addRange(r),r.deleteContents();var o=function(e){var t=document.createDocumentFragment();return String(e||"").split(/\n/).forEach(function(e,r){r&&t.appendChild(document.createElement("br")),t.appendChild(document.createTextNode(e))}),t}(t),a=o.lastChild;if(r.insertNode(o),a&&a.parentNode){var n=document.createRange();n.setStartAfter(a),n.collapse(!0),i.removeAllRanges(),i.addRange(n),e.savedRange=n.cloneRange()}return"function"==typeof e.changed&&e.changed(!0),"function"==typeof e.updateInlineToolbarState&&e.updateInlineToolbarState(),!0}function d(t){var r=t&&t.options?t.options.ai:null;return r&&"string"==typeof r.endpoint&&r.endpoint?r.endpoint:e.ai&&"string"==typeof e.ai.endpoint&&e.ai.endpoint?e.ai.endpoint:e.platformEndpoints&&"string"==typeof e.platformEndpoints.aiGenerate?e.platformEndpoints.aiGenerate:"api/ai.php"}function p(e){return/\/api\/ai_generate\.php(?:[?#].*)?$/i.test(String(e||""))}function u(e){if(!e||"function"!=typeof e.isPremiumFeatureEnabled)return!0;try{return e.isPremiumFeatureEnabled.call(e,"ai")}catch(e){return!1}}function f(e){if(e&&"function"==typeof e.premiumMessage)try{return e.premiumMessage.call(e,"ai")}catch(e){}return"AI is locked. Please add an active BlockWriteAI premium license."}function b(e){if(u(e))return!0;if(_(e,f(e),"warning"),e&&"function"==typeof e.showPremiumUpgradeModal)try{e.showPremiumUpgradeModal.call(e,"ai","locked")}catch(e){}return!1}function g(e,t){return(e=String(null==e?"":e).trim()).length>t?e.slice(0,t):e}function m(e){if(!e)return"";if("string"==typeof e.result)return e.result;if(Array.isArray(e.blocks))return"Generated "+e.blocks.length+" block(s).";if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch(e){return""}}function h(e,t,r,i){var o=function(e,t){return t&&t.usage_event_id?t.usage_event_id:t&&t.usage_result&&t.usage_result.event_id?t.usage_result.event_id:e&&e.lastPremiumUsageResult&&e.lastPremiumUsageResult.event_id?e.lastPremiumUsageResult.event_id:null}(e,t),a=e&&e.premiumOptions?e.premiumOptions:{},n=function(e){var t=e&&e.premiumOptions?e.premiumOptions:{};return t.usageDetailEndpoint?t.usageDetailEndpoint:t.usageEndpoint?t.usageEndpoint.replace(/ai_usage\.php(?:\?.*)?$/i,"ai_usage_detail.php"):""}(e);if(!o||!n||!a.licenseKey||"function"!=typeof fetch)return Promise.resolve();var s=Object.assign({action:"update",license_key:a.licenseKey,event_id:o,route:g(r&&r.route,80),prompt:g(r&&r.prompt,4e3),selected_text:g(r&&r.text,3e3)},i||{});return a.sessionToken&&(s.session_token=a.sessionToken),fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(s)}).catch(function(){})}function x(e){if(e&&e.root){var t=!u(e);Array.prototype.slice.call(e.root.querySelectorAll(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn")).forEach(function(r){r.classList.toggle("is-premium-locked",t),r.setAttribute("aria-disabled",t?"true":"false"),r.title=t?f(e):"BlockWriteAI"}),t&&S(e)&&E(e)}}function y(e,t){var r=d(e),i=Date.now();t=function(e,t,r){if(t=Object.assign({},t||{}),!p(r))return t;var i=e&&e.premiumOptions?e.premiumOptions:{};return i.licenseKey&&!t.license_key&&(t.license_key=i.licenseKey),i.sessionToken&&!t.session_token&&(t.session_token=i.sessionToken),t}(e,t,r);var o=null;return function(e,t){if(p(d(e)))return Promise.resolve();if(e&&"function"==typeof e.consumePremiumUsage)try{return Promise.resolve(e.consumePremiumUsage.call(e,"ai",{action:t&&t.action?t.action:"generate",source:"ai_plugin",prompt:t&&t.prompt?t.prompt:"",selected_text:t&&t.text?t.text:""}))}catch(e){return Promise.reject(e)}return Promise.resolve()}(e,t).then(function(a){o=a;var n=a&&(a.usage_result||a.lastPremiumUsageResult);return n&&(n.model&&(t.model=n.model),n.route&&(t.route=n.route),void 0!==n.credits_required&&(t.credits_required=n.credits_required)),fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)}).then(function(r){return r.json().catch(function(){return{}}).then(function(a){if(!r.ok||!1===a.ok){var n=new Error(a.error||"AI request failed");throw n.httpStatus=r.status,n}return h(e,o,t,{status:"completed",duration_ms:Date.now()-i,model:a.model||"",model_used:a.model_used||a.model||"",input_tokens:a.input_tokens||0,output_tokens:a.output_tokens||0,total_tokens:a.total_tokens||0,estimated_cost:a.estimated_cost||0,response_source:a.response_source||"",response_type:a.type||(Array.isArray(a.blocks)?"blocks":"text"),response:g(m(a),6e3),response_character_count:a.response_character_count||void 0,response_token_count:a.response_token_count||void 0,blocks_generated:Array.isArray(a.blocks)?a.blocks.length:void 0}),a})})}).catch(function(r){throw h(e,o,t,{status:"failed",duration_ms:Date.now()-i,http_status:r&&r.httpStatus?r.httpStatus:0,response_type:"error",error_reason:g(r&&r.message?r.message:"AI request failed",1200)}),r})}function v(e){return e.__blockwriteaiAI||(e.__blockwriteaiAI={drawer:null,lastRange:null,lastText:"",result:"",loading:!1,closeTimer:null,progressTimer:null}),e.__blockwriteaiAI}function w(e,t,r){e&&e.root&&"function"==typeof CustomEvent&&e.root.dispatchEvent(new CustomEvent("rbe:ai-progress",{bubbles:!0,detail:{active:!!t,message:r||""}}))}function k(e,t,r,i){var o=v(e);o.progressTimer&&(clearTimeout(o.progressTimer),o.progressTimer=null),t?w(e,!0,r||"Working with BlockWriteAI..."):o.progressTimer=setTimeout(function(){w(e,!1,""),o.progressTimer=null},"number"==typeof i?i:0)}function _(e,t,a){if(t&&"undefined"!=typeof document){n();var s=document.querySelector(".rbe-toast-stack");s||(s=r("div","rbe-toast-stack",{role:"status","aria-live":"polite"}),document.body.appendChild(s));var l="error"===a?"error":"warning",c=r("div","rbe-toast is-"+l,{});c.innerHTML=o("error"===l?"circle-exclamation":"triangle-exclamation",l)+"<div><strong>"+i("error"===l?"BlockWriteAI error":"BlockWriteAI warning")+"</strong><span>"+i(t)+"</span></div>",s.appendChild(c),requestAnimationFrame(function(){c.classList.add("is-show")}),setTimeout(function(){c.classList.remove("is-show"),c.classList.add("is-hiding"),setTimeout(function(){c.parentNode&&c.parentNode.removeChild(c),s&&!s.children.length&&s.parentNode&&s.parentNode.removeChild(s)},260)},5e3)}}function A(e,t){var r=v(e);r.loading=!!t,r.drawer&&Array.prototype.slice.call(r.drawer.querySelectorAll("button")).forEach(function(e){e.classList.contains("rbe-ai-close")||(e.disabled=!!t||e.classList.contains("rbe-ai-apply")&&!r.result)})}function T(e){var t=v(e);if(t.drawer){var r=l(e);t.lastRange=e.savedRange&&s(e,e.savedRange)?e.savedRange.cloneRange():null,t.lastText=r;var i=t.drawer.querySelector(".rbe-ai-selection");i&&(i.textContent=r||"Select text in the editor, then choose an AI action.",i.classList.toggle("is-empty",!r))}}function I(e,t){e&&e.root&&Array.prototype.slice.call(e.root.querySelectorAll(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn")).forEach(function(e){e.classList.toggle("is-open",!!t)})}function S(e){var t=v(e);return!(!t.drawer||t.drawer.hidden||!t.drawer.classList.contains("is-open"))}function C(e){if(b(e)){var t,s,l=v(e),c=function(e){var t=v(e);if(t.drawer)return t.drawer;n();var s=r("aside","rbe-ai-drawer",{hidden:!0,role:"dialog","aria-label":"BlockWriteAI"});return s.innerHTML='<div class="rbe-ai-head"><div class="rbe-ai-title"><span class="rbe-ai-title-icon">'+o("wand-magic-sparkles","BlockWriteAI")+'</span><span>BlockWriteAI</span></div><button type="button" class="rbe-ai-close" title="Close AI">'+o("xmark","Close")+'</button></div><div class="rbe-ai-body"><section class="rbe-ai-section"><div class="rbe-ai-label">Selection</div><div class="rbe-ai-selection is-empty"></div></section><section class="rbe-ai-section"><div class="rbe-ai-label">Actions</div><div class="rbe-ai-action-grid">'+a.map(function(e){return'<button type="button" class="rbe-ai-action" data-ai-action="'+i(e[0])+'">'+o(e[1],e[2])+"<span><strong>"+i(e[2])+"</strong><small>"+i(e[3])+"</small></span></button>"}).join("")+'</div></section><section class="rbe-ai-section"><div class="rbe-ai-label">Generate blocks from prompt</div><textarea class="rbe-ai-prompt" placeholder="Example: Create a short project proposal with a heading, summary, checklist, and next steps."></textarea><button type="button" class="rbe-ai-primary rbe-ai-generate">'+o("sparkles","Generate")+'<span>Generate blocks</span></button></section><section class="rbe-ai-section"><div class="rbe-ai-label">Result</div><div class="rbe-ai-result"></div></section></div><div class="rbe-ai-foot"><div class="rbe-ai-foot-actions"><button type="button" class="rbe-ai-secondary rbe-ai-apply" disabled>'+o("check","Apply")+"<span>Apply</span></button></div></div>",e.root.appendChild(s),t.drawer=s,s}(e);T(e),l.closeTimer&&(clearTimeout(l.closeTimer),l.closeTimer=null),c.hidden=!1,c.getBoundingClientRect(),requestAnimationFrame(function(){c.classList.add("is-open")}),I(e,!0),(t="")&&s&&_(0,t,"error"),l.lastText||setTimeout(function(){var e=c.querySelector(".rbe-ai-prompt");e&&e.focus()},0)}}function E(e){var t=v(e);t.drawer&&(t.closeTimer&&clearTimeout(t.closeTimer),t.drawer.classList.remove("is-open"),I(e,!1),t.closeTimer=setTimeout(function(){t.drawer&&(t.drawer.hidden=!0,t.closeTimer=null)},300))}function R(e,t){var r=v(e);if(r.result=String(t||"").trim(),r.drawer){var i=r.drawer.querySelector(".rbe-ai-result"),o=r.drawer.querySelector(".rbe-ai-apply");i&&(i.textContent=r.result),o&&(o.disabled=r.loading||!r.result)}}function P(e){return e&&"object"==typeof e?{type:String(e.type||"paragraph"),data:e.data&&"object"==typeof e.data?e.data:{}}:null}function B(e,t){if(!(t=(t||[]).map(P).filter(Boolean)).length)return 0;var r="function"==typeof e.getCurrentBlock?e.getCurrentBlock():null,i=r&&"function"==typeof e.indexOfBlock?e.indexOfBlock(r)+1:e.canvas.children.length,o=e.canvas&&1===e.canvas.children.length?e.canvas.children[0]:null;o&&function(e){if(!e||!e.dataset||"paragraph"!==e.dataset.type)return!1;var t=e.querySelector(".rbe-paragraph"),r=t?t.textContent:e.textContent;return!String(r||"").trim()}(o)&&(i=0,o.remove());var a=0;return t.forEach(function(t){if(function(t){if(!e||"function"!=typeof e.getPremiumFeatureForTool||"function"!=typeof e.isPremiumFeatureEnabled)return!0;var r=e.getPremiumFeatureForTool.call(e,t);return!(r&&!e.isPremiumFeatureEnabled.call(e,r)&&("function"==typeof e.showPremiumLocked&&e.showPremiumLocked.call(e,r),1))}(t.type))try{var r=null;"function"==typeof e.insertBlock?(r=e.insertBlock.call(e,t.type,t.data,i))&&(i+=1):"function"==typeof e.createBlock&&(r=e.createBlock.call(e,t.type,t.data),e.canvas.appendChild(r)),r&&(a+=1)}catch(e){_(0,e&&e.message?e.message:"Unable to insert generated block.","error")}}),a&&"function"==typeof e.changed&&e.changed(!0),a}function q(e){e&&e.root&&!e.__blockwriteaiAIRefreshBound&&(e.root.addEventListener("rbe:premium-change",x.bind(null,e)),e.__blockwriteaiAIRefreshBound=!0)}function j(e,t){return t=t||e&&e.topToolbar,e&&!1!==e.options.ai&&t?(n(),t.querySelector(".rbe-ai-toolbar-btn")||t.appendChild(r("button","rbe-toolbar-btn rbe-ai-toolbar-btn",{type:"button",title:"BlockWriteAI",html:o("wand-magic-sparkles","BlockWriteAI"),dataset:{aiToolbar:"true",premiumFeature:"ai",unlockedTitle:"BlockWriteAI"}})),q(e),x(e),t):t}function D(e,t){return t=t||e&&e.inlineToolbar,e&&!1!==e.options.ai&&t?(n(),t.querySelector(".rbe-ai-inline-btn")||t.appendChild(r("button","rbe-ai-inline-btn",{type:"button",title:"BlockWriteAI",html:o("wand-magic-sparkles","AI"),dataset:{aiInline:"true",premiumFeature:"ai",unlockedTitle:"BlockWriteAI"}})),q(e),x(e),t):t}var O=e.prototype.createTopToolbar;e.prototype.createTopToolbar=function(){return j(this,O.call(this))};var L=e.prototype.createInlineToolbar;e.prototype.createInlineToolbar=function(){return D(this,L.call(this))},e.prototype.openAI=function(){return!1===this.options.ai?null:b(this)?(C(this),this):null};var W=e.prototype.handleRootClick;e.prototype.handleRootClick=function(e){var t,r=e.target;if(r.closest&&r.closest(".rbe-ai-inline-btn,.rbe-ai-toolbar-btn"))return e.preventDefault(),e.stopPropagation(),void(b(t=this)&&(S(t)?E(t):C(t)));if(r.closest&&r.closest(".rbe-ai-close"))return e.preventDefault(),e.stopPropagation(),void E(this);var i=r.closest&&r.closest(".rbe-ai-action");if(i)return e.preventDefault(),e.stopPropagation(),void function(e,t){if(b(e)){var r=v(e);T(e),r.lastText?(A(e,!0),R(e,""),k(e,!0,"Improving selected text with BlockWriteAI..."),y(e,{action:t,text:r.lastText,document:"function"==typeof e.getData?e.getData():null}).then(function(t){R(e,t.result||"")}).catch(function(e){_(0,e.message||"AI request failed","error")}).finally(function(){A(e,!1),k(e,!1,"",250)})):_(0,"Select text first, then run an AI action.","warning")}}(this,i.dataset.aiAction);if(r.closest&&r.closest(".rbe-ai-generate"))return e.preventDefault(),e.stopPropagation(),void function(e){if(b(e)){var t=v(e),r=t.drawer&&t.drawer.querySelector(".rbe-ai-prompt"),i=r?r.value.trim():"";i?(A(e,!0),R(e,""),k(e,!0,"Generating BlockWriteAI blocks..."),y(e,{action:"generate_blocks",prompt:i,document:"function"==typeof e.getData?e.getData():null}).then(function(t){B(e,t.blocks||[])||_(0,"AI returned no blocks.","warning")}).catch(function(e){_(0,e.message||"AI generation failed","error")}).finally(function(){A(e,!1),k(e,!1,"",250)})):_(0,"Write a prompt before generating blocks.","warning")}}(this);if(!r.closest||!r.closest(".rbe-ai-apply"))return W.call(this,e);e.preventDefault(),e.stopPropagation();var o=v(this);o.result&&c(this,o.result,o.lastRange)?(k(this,!0,"Applying BlockWriteAI result..."),R(this,""),T(this),k(this,!1,"",600)):_(0,"There is no AI result ready to apply.","warning")};var F=e.prototype.handleDocumentMouseDown;return e.prototype.handleDocumentMouseDown=function(e){if(!e.target.closest||!e.target.closest(".rbe-ai-drawer, .rbe-ai-inline-btn, .rbe-ai-toolbar-btn"))return S(this)&&E(this),F.call(this,e)},e.ai=e.ai||{},e.enableAI=function(t){return e.ai=Object.assign(e.ai||{},t||{}),e.configure({ai:Object.assign({},e.ai)}),e},"undefined"!=typeof document&&Array.prototype.slice.call(document.querySelectorAll(".rbe")).forEach(function(e){var t=e.__blockwriteaiInstance;t&&(j(t),D(t))}),e});
@@ -1 +1 @@
1
- !function(e){"use strict";var t=e.BlockWriteAI;if(t&&!t.__codeAssistPluginInstalled){t.__codeAssistPluginInstalled=!0;var n={prettier:!0,suggestions:!0,prettierVersion:"3.8.1",tabWidth:2,cdnBase:"https://unpkg.com/prettier@{version}/",extraSuggestions:{}},a=null,i=t.prototype.renderCode,r=t.prototype.formatCodeBlock,s={javascript:"babel",typescript:"typescript",json:"json",html:"html",css:"css",markdown:"markdown"},l=["plaintext","javascript","typescript","html","css","json","php","python","java","csharp","cpp","sql","bash","markdown"],o={javascript:[{label:"function",detail:"Function declaration",insert:"function name() {\n $0\n}"},{label:"const",detail:"Constant",insert:"const name = $0;"},{label:"let",detail:"Variable",insert:"let name = $0;"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (let i = 0; i < length; i += 1) {\n $0\n}"},{label:"map",detail:"Array map",insert:"array.map(function (item) {\n return $0;\n});"},{label:"async",detail:"Async function",insert:"async function name() {\n $0\n}"},{label:"try",detail:"Try catch",insert:"try {\n $0\n} catch (error) {\n console.error(error);\n}"},{label:"console",detail:"Console log",insert:"console.log($0);"}],typescript:[{label:"interface",detail:"Interface",insert:"interface Name {\n $0\n}"},{label:"type",detail:"Type alias",insert:"type Name = $0;"},{label:"const",detail:"Constant",insert:"const name: Type = $0;"},{label:"function",detail:"Typed function",insert:"function name(): void {\n $0\n}"},{label:"async",detail:"Async function",insert:"async function name(): Promise<void> {\n $0\n}"}],html:[{label:"!DOCTYPE",detail:"HTML document type",insert:"<!DOCTYPE html>"},{label:"html",detail:"HTML page",insert:'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>$0</title>\n</head>\n<body>\n \n</body>\n</html>'},{label:"div",detail:"Division",insert:"<div>\n $0\n</div>"},{label:"section",detail:"Section",insert:"<section>\n $0\n</section>"},{label:"article",detail:"Article",insert:"<article>\n $0\n</article>"},{label:"button",detail:"Button",insert:'<button type="button">$0</button>'},{label:"a",detail:"Link",insert:'<a href="#">$0</a>'},{label:"img",detail:"Image",insert:'<img src="$0" alt="">'},{label:"ul",detail:"List",insert:"<ul>\n <li>$0</li>\n</ul>"},{label:"table",detail:"Table",insert:"<table>\n <tr>\n <td>$0</td>\n </tr>\n</table>"}],css:[{label:"display",detail:"Display",insert:"display: $0;"},{label:"grid",detail:"Grid layout",insert:"display: grid;\ngap: $0;"},{label:"flex",detail:"Flex layout",insert:"display: flex;\nalign-items: center;\ngap: $0;"},{label:"color",detail:"Text color",insert:"color: $0;"},{label:"background",detail:"Background",insert:"background: $0;"},{label:"border",detail:"Border",insert:"border: 1px solid $0;"},{label:"radius",detail:"Border radius",insert:"border-radius: $0;"},{label:"media",detail:"Media query",insert:"@media (max-width: 768px) {\n $0\n}"}],php:[{label:"function",detail:"Function",insert:"function name() {\n $0\n}"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"foreach",detail:"Foreach loop",insert:"foreach ($items as $item) {\n $0\n}"},{label:"echo",detail:"Echo",insert:"echo $0;"}],python:[{label:"def",detail:"Function",insert:"def name():\n $0"},{label:"class",detail:"Class",insert:"class Name:\n def __init__(self):\n $0"},{label:"if",detail:"If statement",insert:"if $0:\n "},{label:"for",detail:"For loop",insert:"for item in items:\n $0"},{label:"try",detail:"Try except",insert:"try:\n $0\nexcept Exception as error:\n print(error)"}],sql:[{label:"select",detail:"Select query",insert:"SELECT $0\nFROM table_name;"},{label:"insert",detail:"Insert query",insert:"INSERT INTO table_name (column)\nVALUES ($0);"},{label:"update",detail:"Update query",insert:"UPDATE table_name\nSET column = $0\nWHERE condition;"},{label:"join",detail:"Join",insert:"JOIN table_name ON $0"}],bash:[{label:"if",detail:"If statement",insert:"if [ $0 ]; then\n \nfi"},{label:"for",detail:"For loop",insert:'for item in "$@"; do\n $0\ndone'},{label:"echo",detail:"Echo",insert:'echo "$0"'}],java:[{label:"class",detail:"Class",insert:"public class Name {\n public static void main(String[] args) {\n $0\n }\n}"},{label:"main",detail:"Main method",insert:"public static void main(String[] args) {\n $0\n}"},{label:"sout",detail:"Print line",insert:"System.out.println($0);"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (int i = 0; i < count; i++) {\n $0\n}"}],csharp:[{label:"class",detail:"Class",insert:"public class Name\n{\n $0\n}"},{label:"main",detail:"Main method",insert:"public static void Main(string[] args)\n{\n $0\n}"},{label:"cw",detail:"Console write line",insert:"Console.WriteLine($0);"},{label:"if",detail:"If statement",insert:"if ($0)\n{\n \n}"},{label:"foreach",detail:"Foreach loop",insert:"foreach (var item in items)\n{\n $0\n}"}],cpp:[{label:"include",detail:"Include header",insert:"#include <$0>"},{label:"main",detail:"Main function",insert:"int main() {\n $0\n return 0;\n}"},{label:"cout",detail:"Output stream",insert:"std::cout << $0 << std::endl;"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (int i = 0; i < count; i++) {\n $0\n}"}],json:[{label:"object",detail:"JSON object",insert:'{\n "$0": ""\n}'},{label:"array",detail:"JSON array",insert:"[\n $0\n]"},{label:"string",detail:"String property",insert:'"name": "$0"'},{label:"number",detail:"Number property",insert:'"count": $0'},{label:"boolean",detail:"Boolean property",insert:'"enabled": true'}],markdown:[{label:"heading",detail:"Heading",insert:"## $0"},{label:"link",detail:"Link",insert:"[$0](https://example.com)"},{label:"image",detail:"Image",insert:"![$0](image-url)"},{label:"code",detail:"Code fence",insert:"```language\n$0\n```"},{label:"table",detail:"Table",insert:"| Header | Header |\n| --- | --- |\n| $0 | |"}],plaintext:[{label:"note",detail:"Simple note",insert:"Note: $0"},{label:"todo",detail:"Task line",insert:"TODO: $0"},{label:"summary",detail:"Summary heading",insert:"Summary\n$0"}]},c={javascript:"await break case catch class const continue default delete do else export extends finally for function if import in instanceof let new return static switch this throw try typeof var void while yield true false null undefined console document window",typescript:"abstract any as async await boolean class const constructor declare enum export extends false from function implements import interface keyof let namespace never null number private protected public readonly return static string super true type undefined unknown void",html:"a abbr address article aside audio b base blockquote body br button canvas caption cite code col colgroup data datalist dd del details div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hr html iframe img input label legend li link main meta nav ol option p picture pre progress script section select small source span strong style summary table tbody td template textarea tfoot th thead time title tr ul video",css:"align-items background background-color border border-radius box-shadow color display flex flex-direction font-size font-weight gap grid grid-template-columns height justify-content line-height margin max-width min-height object-fit opacity overflow padding position text-align transform transition width z-index",json:"true false null",php:"array as class echo else elseif extends false foreach function if implements interface namespace new null private protected public return static switch true try use var while",python:"and as assert async await break class continue def del elif else except false finally for from global if import in is lambda none nonlocal not or pass raise return true try while with yield print self",java:"abstract boolean break byte case catch char class const continue default double else enum extends false final finally float for if implements import int interface long new null package private protected public return static string super switch this throw throws true try void while",csharp:"abstract as async await bool break case catch class const continue decimal default delegate do double else enum event false finally float for foreach if in int interface internal is lock namespace new null object override private protected public readonly return sealed static string switch this throw true try using var virtual void while",cpp:"auto bool break case catch char class const continue default delete do double else enum false float for if include int long namespace new nullptr private protected public return sizeof static std string struct switch template this throw true try typename using void while",sql:"SELECT FROM WHERE JOIN LEFT RIGHT INNER OUTER INSERT INTO VALUES UPDATE SET DELETE CREATE TABLE ALTER DROP GROUP BY ORDER HAVING LIMIT OFFSET DISTINCT COUNT SUM AVG MIN MAX",bash:"case cd chmod cp do done echo elif else esac export fi for function grep if in mkdir mv read rm sed then while",markdown:"heading link image code table quote list todo bold italic"};t.prototype.renderCode=function(e,t){i.call(this,e,t),u();var n=e.querySelector(".rbe-code-wrap");n&&x(this,n)},t.prototype.formatCodeBlock=function(e){if(e&&"code"===e.dataset.type){var t=e.querySelector(".rbe-code-wrap"),n=e.querySelector(".rbe-code-input"),a=p(e);if(n)if(m(a)){var i=this,s=e.querySelector(".rbe-code-format");s&&(s.disabled=!0),f(t,"Formatting..."),g(n.value,a).then(function(a){i.recordHistory(!1),n.value=String(a||"").replace(/\n+$/g,""),i.refreshCodeBlock(e),i.noteHistory("Code","Prettier formatted"),i.changed(!0),f(t,"Formatted")}).catch(function(){r.call(i,e),f(t,"Prettier unavailable, fallback used",!0)}).finally(function(){s&&(s.disabled=!1)})}else r.call(this,e)}},e.BlockWriteAICodeAssist={configure:function(e){(n=Object.assign({},n,e||{})).extraSuggestions=Object.assign({},n.extraSuggestions||{}),a=null},formatWithPrettier:g,enhanceAll:function(t){u(),Array.prototype.slice.call((t||document).querySelectorAll(".rbe-code-wrap")).forEach(function(t){x(e.editor||null||{formatCodeBlock:function(){}},t)})}}}function d(e){return String(null==e?"":e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function u(){if(!document.querySelector("style[data-blockwriteai-code-assist]")){var e=document.createElement("style");e.dataset.blockwriteaiCodeAssist="true",e.textContent='.rbe-code-wrap{position:relative;}.rbe-code-assist-status{margin-left:auto;font-size:12px;font-weight:740;color:inherit;opacity:.8;}.rbe-code-assist-status.is-error{color:#b91c1c;}.rbe-code-assist-panel{position:absolute;z-index:12;width:min(280px,calc(100% - 24px));max-height:210px;overflow:auto;border:1px solid var(--rbe-border,#d7dee8);border-radius:8px;background:#fff;box-shadow:0 16px 40px rgba(15,23,42,.16);padding:4px;}.rbe-code-assist-panel[hidden]{display:none;}.rbe-code-assist-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;width:100%;border:0;border-radius:6px;background:transparent;color:#172033;padding:7px 8px;text-align:left;font:13px/1.3 Arial,sans-serif;cursor:pointer;}.rbe-code-assist-item strong{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:13px;}.rbe-code-assist-item small{color:#667085;}.rbe-code-assist-item.is-active,.rbe-code-assist-item:hover{background:#e7efff;color:#143f91;}.rbe-code-assist-hint{grid-column:1/-1;color:#667085;font-size:11px;padding:3px 8px 5px;}',document.head.appendChild(e)}}function p(e){var t=e&&e.querySelector(".rbe-code-language");return t&&t.value||"plaintext"}function b(e){return n.cdnBase.replace("{version}",n.prettierVersion)+e}function f(e,t,n){var a=e&&e.querySelector(".rbe-code-assist-status");a&&(a.textContent=t||"",a.classList.toggle("is-error",!!n),t&&(clearTimeout(a._rbeTimer),a._rbeTimer=setTimeout(function(){a.textContent="",a.classList.remove("is-error")},n?3600:1800)))}function m(e){return s[e]||""}function h(e){return String(c[e]||"").split(/\s+/).filter(Boolean).map(function(e){return{label:e,detail:"Keyword",insert:e}})}function g(e,t){var i=m(t);return i?(n.prettier?a||(a=Promise.all([import(b("standalone.mjs")),import(b("plugins/babel.mjs")),import(b("plugins/estree.mjs")),import(b("plugins/typescript.mjs")),import(b("plugins/html.mjs")),import(b("plugins/postcss.mjs")),import(b("plugins/markdown.mjs"))]).then(function(e){return{prettier:e[0],plugins:e.slice(1).map(function(e){return e.default||e})}})):Promise.reject(new Error("Prettier is disabled"))).then(function(a){return a.prettier.format(e,{parser:i,plugins:a.plugins,tabWidth:n.tabWidth,printWidth:100,semi:!0,singleQuote:"javascript"===t||"typescript"===t,bracketSameLine:!1})}):Promise.reject(new Error("Prettier parser is not available for "+t))}function y(e,t){var n=e.selectionStart||0,a=e.value.slice(0,n);if("html"===t){var i=a.match(/<!([\w-]*)$/i);if(i)return{text:"!"+(i[1]||""),start:n-i[0].length,end:n,trigger:"html-declaration",force:!0};var r=a.match(/<\/?([\w:-]*)$/);if(r)return{text:r[1]||"",start:n-r[0].length,end:n,trigger:"html-tag",force:!0}}if("css"===t){var s=a.match(/(?:^|[;{]\s*)([a-z-]*)$/i);if(s)return{text:s[1]||"",start:n-(s[1]||"").length,end:n,trigger:"css-property",force:!s[1]}}if("json"===t){var l=a.match(/(?:^|[{,]\s*)"?([\w-]*)$/);if(l)return{text:l[1]||"",start:n-(l[1]||"").length,end:n,trigger:"json-key",force:!l[1]}}var o=a.match(/[A-Za-z_$][\w$-]*$/);return o?{text:o[0],start:n-o[0].length,end:n}:{text:"",start:n,end:n}}function v(e,t,a){t="string"==typeof t?{text:t}:t||{text:""};var i=[];"plaintext"===e?(Object.keys(o).forEach(function(e){"plaintext"!==e&&(i=i.concat(o[e]||[],h(e)))}),i=i.concat(o.plaintext||[],h("plaintext"))):i=(o[e]||[]).concat(h(e),n.extraSuggestions[e]||[]),"html-declaration"===t.trigger&&(i=[{label:"!DOCTYPE",detail:"HTML document type",insert:"<!DOCTYPE html>"},{label:"!--",detail:"HTML comment",insert:"\x3c!-- $0 --\x3e"}].concat(i)),i.length||(i=o.plaintext.concat(h("plaintext"))),i=function(e){var t=Object.create(null);return e.filter(function(e){var n=(e.label||"")+"\0"+(e.insert||e.label||"");return!(!e.label||t[n]||(t[n]=!0,0))})}(i);var r=(t.text||"").toLowerCase();return i.filter(function(e){return a||!r||0===e.label.toLowerCase().indexOf(r)}).slice(0,9)}function w(e,t,n){var a=n.insert||n.label,i=a.indexOf("$0"),r=a.replace("$0",""),s=e.value;e.value=s.slice(0,t.start)+r+s.slice(t.end);var l=t.start+(i>=0?i:r.length);e.focus(),e.setSelectionRange(l,l),e.dispatchEvent(new Event("input",{bubbles:!0}))}function x(t,a){if(n.suggestions&&a&&"true"!==a.dataset.codeAssistEnhanced){a.dataset.codeAssistEnhanced="true";var i=a.querySelector(".rbe-code-input"),r=a.querySelector(".rbe-code-editor"),s=a.querySelector(".rbe-code-header"),o=a.querySelector(".rbe-code-language");if(i&&r&&s){s.querySelector(".rbe-code-assist-status")||(s.appendChild(document.createElement("span")).className="rbe-code-assist-status");var c=document.createElement("div");c.className="rbe-code-assist-panel",c.hidden=!0,r.appendChild(c);var u=0,b=null,m=[],h=!1;o&&o.addEventListener("change",function(){h||(o.dataset.codeAssistUserLanguage="true",o.dataset.codeAssistAutoLanguage="")}),i.addEventListener("keydown",function(e){return(e.ctrlKey||e.metaKey)&&"Space"===e.code?(e.preventDefault(),void E(!0)):e.altKey&&e.shiftKey&&"f"===e.key.toLowerCase()?(e.preventDefault(),void t.formatCodeBlock(a.closest(".rbe-block"))):void(c.hidden||("ArrowDown"===e.key?(e.preventDefault(),u=(u+1)%m.length,$(m)):"ArrowUp"===e.key?(e.preventDefault(),u=(u-1+m.length)%m.length,$(m)):"Enter"===e.key||"Tab"===e.key?(e.preventDefault(),w(i,b,m[u]),g()):"Escape"===e.key&&(e.preventDefault(),g())))}),i.addEventListener("input",function(){u=0,setTimeout(function(){E(!1)},0)}),i.addEventListener("scroll",g),i.addEventListener("blur",function(){setTimeout(g,180)}),c.addEventListener("mousedown",function(e){var t=e.target.closest(".rbe-code-assist-item");if(t){e.preventDefault();var n=m[Number(t.dataset.index||0)];n&&w(i,b||y(i,p(a.closest(".rbe-block"))),n),g()}})}}function g(){c.hidden=!0,m=[]}function x(){if(!o)return p(a.closest(".rbe-block"));var t,n,r,s,c,d=(t=i.value,n=String(t||""),(r=n.trim())?(r.toLowerCase(),/^<\?php\b/i.test(r)||/\$\w+\s*=/.test(r)||/\b(echo|namespace|use)\s+[\w\\]+;/.test(r)?"php":/^(<!|<\/?html\b|<\/?head\b|<\/?body\b|<\/?(div|section|article|span|button|table|form|input|script|style|img|a)\b)/i.test(r)||/<\/[a-z][\w:-]*>\s*$/i.test(r)?"html":/^\s*[{[]/.test(n)&&(/"[^"]+"\s*:/.test(n)||/^[\s{\["\]},:0-9.truefalsnul-]+$/i.test(n))?"json":/^#{1,6}\s/.test(r)||/^```/.test(r)||/^\s*[-*]\s+\[[ x]\]/i.test(r)||/\[[^\]]+\]\([^)]+\)/.test(r)?"markdown":/^#include\b/.test(r)||/\bstd::\w+/.test(r)||/\bcout\s*<</.test(r)||/\bint\s+main\s*\(/.test(r)?"cpp":/\busing\s+System\s*;/.test(r)||/\bConsole\.Write(Line)?\s*\(/.test(r)||/\bnamespace\s+\w+/.test(r)?"csharp":/\bpublic\s+(class|static)\b/.test(r)||/\bSystem\.out\.println\s*\(/.test(r)||/\bpackage\s+[\w.]+;/.test(r)?"java":/\binterface\s+\w+/.test(r)||/\btype\s+\w+\s*=/.test(r)||/:\s*(string|number|boolean|unknown|any)\b/.test(r)?"typescript":/\b(const|let|var)\s+\w+\s*=/.test(r)||/\bfunction\s+\w*\s*\(/.test(r)||/=>/.test(r)||/\b(console|document|window)\./.test(r)||/\b(import|export)\s+/.test(r)?"javascript":/^\s*(def|class)\s+\w+/.test(r)||/\bprint\s*\(/.test(r)||/\bfrom\s+\w+\s+import\b/.test(r)||/\bimport\s+\w+/.test(r)||/:\s*(#.*)?$/.test(r)?"python":/\b(SELECT|INSERT\s+INTO|UPDATE|DELETE\s+FROM|CREATE\s+TABLE|ALTER\s+TABLE|DROP\s+TABLE)\b/i.test(r)?"sql":/^#!/.test(r)||/\b(echo|chmod|sudo|grep|sed)\b/.test(r)||/^\s*(if|for|while)\s+.*;\s*do\b/.test(r)?"bash":/@media\b/.test(r)||/[#.][\w-]+\s*\{/.test(r)||/\b[a-z-]+\s*:\s*[^;{}]+;/.test(r)?"css":""):""),u=o.value||"plaintext";if(!d&&"true"===o.dataset.codeAssistAutoLanguage&&"plaintext"!==u){h=!0,o.value="plaintext";try{e.jQuery&&e.jQuery.fn&&e.jQuery.fn.select2&&e.jQuery(o).val("plaintext").trigger("change.select2")}catch(e){}return o.dispatchEvent(new Event("change",{bubbles:!0})),h=!1,o.dataset.codeAssistAutoLanguage="","plaintext"}if(!d||(c=o,!(s=d)||!(c?Array.prototype.some.call(c.options||[],function(e){return e.value===s}):-1!==l.indexOf(s))))return u;if("true"===o.dataset.codeAssistUserLanguage&&"plaintext"!==u)return u;if("plaintext"!==u&&"true"!==o.dataset.codeAssistAutoLanguage&&u!==d)return u;if(u===d)return o.dataset.codeAssistAutoLanguage="true",u;h=!0,o.value=d,o.dataset.codeAssistAutoLanguage="true";try{e.jQuery&&e.jQuery.fn&&e.jQuery.fn.select2&&e.jQuery(o).val(d).trigger("change.select2")}catch(e){}return o.dispatchEvent(new Event("change",{bubbles:!0})),h=!1,f(a,"Detected "+function(e,t){if(t){var n=Array.prototype.find.call(t.options||[],function(t){return t.value===e});if(n)return n.textContent||e}return String(e||"Plain text").replace(/^\w/,function(e){return e.toUpperCase()})}(d,o)),d}function $(e){c.innerHTML=e.map(function(e,t){return'<button type="button" class="rbe-code-assist-item'+(t===u?" is-active":"")+'" data-index="'+t+'"><strong>'+d(e.label)+"</strong><small>"+d(e.detail||"")+"</small></button>"}).join("")+'<div class="rbe-code-assist-hint">Tab/Enter to insert, Ctrl+Space for all suggestions</div>'}function E(e){var t=x();if(b=y(i,t),!(m=v(t,b,e)).length||!e&&b.text.length<1&&!b.force)g();else{u=Math.min(u,m.length-1),$(m);var n=function(e,t){var n=getComputedStyle(e),a=parseFloat(n.lineHeight)||19,i=parseFloat(n.paddingLeft)||12,r=parseFloat(n.paddingTop)||12,s=document.createElement("span");s.style.cssText="position:absolute;visibility:hidden;font:"+n.font+";white-space:pre;",s.textContent="mmmmmmmmmm",document.body.appendChild(s);var l=s.getBoundingClientRect().width/10||8;s.remove();var o=e.value.slice(0,e.selectionStart||0).split("\n"),c=o.length-1,d=o[o.length-1].length;return{left:Math.max(8,Math.min(t.clientWidth-288,i+d*l-e.scrollLeft)),top:Math.max(8,Math.min(t.clientHeight-220,r+(c+1)*a-e.scrollTop))}}(i,r);c.style.left=n.left+"px",c.style.top=n.top+"px",c.hidden=!1}}}}("undefined"!=typeof window?window:this);
1
+ !function(e){"use strict";var t=e.BlockWriteAI;if(t&&!t.__codeAssistPluginInstalled){t.__codeAssistPluginInstalled=!0;var n={prettier:!0,suggestions:!0,prettierVersion:"3.8.1",tabWidth:2,cdnBase:"https://unpkg.com/prettier@{version}/",extraSuggestions:{}},a=null,i=t.prototype.renderCode,r=t.prototype.formatCodeBlock,l={javascript:"babel",typescript:"typescript",json:"json",html:"html",css:"css",markdown:"markdown"},s=["plaintext","javascript","typescript","html","css","json","php","python","java","csharp","cpp","sql","bash","markdown"],o={javascript:[{label:"function",detail:"Function declaration",insert:"function name() {\n $0\n}"},{label:"const",detail:"Constant",insert:"const name = $0;"},{label:"let",detail:"Variable",insert:"let name = $0;"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (let i = 0; i < length; i += 1) {\n $0\n}"},{label:"map",detail:"Array map",insert:"array.map(function (item) {\n return $0;\n});"},{label:"async",detail:"Async function",insert:"async function name() {\n $0\n}"},{label:"try",detail:"Try catch",insert:"try {\n $0\n} catch (error) {\n console.error(error);\n}"},{label:"console",detail:"Console log",insert:"console.log($0);"}],typescript:[{label:"interface",detail:"Interface",insert:"interface Name {\n $0\n}"},{label:"type",detail:"Type alias",insert:"type Name = $0;"},{label:"const",detail:"Constant",insert:"const name: Type = $0;"},{label:"function",detail:"Typed function",insert:"function name(): void {\n $0\n}"},{label:"async",detail:"Async function",insert:"async function name(): Promise<void> {\n $0\n}"}],html:[{label:"!DOCTYPE",detail:"HTML document type",insert:"<!DOCTYPE html>"},{label:"html",detail:"HTML page",insert:'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>$0</title>\n</head>\n<body>\n \n</body>\n</html>'},{label:"div",detail:"Division",insert:"<div>\n $0\n</div>"},{label:"section",detail:"Section",insert:"<section>\n $0\n</section>"},{label:"article",detail:"Article",insert:"<article>\n $0\n</article>"},{label:"button",detail:"Button",insert:'<button type="button">$0</button>'},{label:"a",detail:"Link",insert:'<a href="#">$0</a>'},{label:"img",detail:"Image",insert:'<img src="$0" alt="">'},{label:"ul",detail:"List",insert:"<ul>\n <li>$0</li>\n</ul>"},{label:"table",detail:"Table",insert:"<table>\n <tr>\n <td>$0</td>\n </tr>\n</table>"}],css:[{label:"display",detail:"Display",insert:"display: $0;"},{label:"grid",detail:"Grid layout",insert:"display: grid;\ngap: $0;"},{label:"flex",detail:"Flex layout",insert:"display: flex;\nalign-items: center;\ngap: $0;"},{label:"color",detail:"Text color",insert:"color: $0;"},{label:"background",detail:"Background",insert:"background: $0;"},{label:"border",detail:"Border",insert:"border: 1px solid $0;"},{label:"radius",detail:"Border radius",insert:"border-radius: $0;"},{label:"media",detail:"Media query",insert:"@media (max-width: 768px) {\n $0\n}"}],php:[{label:"function",detail:"Function",insert:"function name() {\n $0\n}"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"foreach",detail:"Foreach loop",insert:"foreach ($items as $item) {\n $0\n}"},{label:"echo",detail:"Echo",insert:"echo $0;"}],python:[{label:"def",detail:"Function",insert:"def name():\n $0"},{label:"class",detail:"Class",insert:"class Name:\n def __init__(self):\n $0"},{label:"if",detail:"If statement",insert:"if $0:\n "},{label:"for",detail:"For loop",insert:"for item in items:\n $0"},{label:"try",detail:"Try except",insert:"try:\n $0\nexcept Exception as error:\n print(error)"}],sql:[{label:"select",detail:"Select query",insert:"SELECT $0\nFROM table_name;"},{label:"insert",detail:"Insert query",insert:"INSERT INTO table_name (column)\nVALUES ($0);"},{label:"update",detail:"Update query",insert:"UPDATE table_name\nSET column = $0\nWHERE condition;"},{label:"join",detail:"Join",insert:"JOIN table_name ON $0"}],bash:[{label:"if",detail:"If statement",insert:"if [ $0 ]; then\n \nfi"},{label:"for",detail:"For loop",insert:'for item in "$@"; do\n $0\ndone'},{label:"echo",detail:"Echo",insert:'echo "$0"'}],java:[{label:"class",detail:"Class",insert:"public class Name {\n public static void main(String[] args) {\n $0\n }\n}"},{label:"main",detail:"Main method",insert:"public static void main(String[] args) {\n $0\n}"},{label:"sout",detail:"Print line",insert:"System.out.println($0);"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (int i = 0; i < count; i++) {\n $0\n}"}],csharp:[{label:"class",detail:"Class",insert:"public class Name\n{\n $0\n}"},{label:"main",detail:"Main method",insert:"public static void Main(string[] args)\n{\n $0\n}"},{label:"cw",detail:"Console write line",insert:"Console.WriteLine($0);"},{label:"if",detail:"If statement",insert:"if ($0)\n{\n \n}"},{label:"foreach",detail:"Foreach loop",insert:"foreach (var item in items)\n{\n $0\n}"}],cpp:[{label:"include",detail:"Include header",insert:"#include <$0>"},{label:"main",detail:"Main function",insert:"int main() {\n $0\n return 0;\n}"},{label:"cout",detail:"Output stream",insert:"std::cout << $0 << std::endl;"},{label:"if",detail:"If statement",insert:"if ($0) {\n \n}"},{label:"for",detail:"For loop",insert:"for (int i = 0; i < count; i++) {\n $0\n}"}],json:[{label:"object",detail:"JSON object",insert:'{\n "$0": ""\n}'},{label:"array",detail:"JSON array",insert:"[\n $0\n]"},{label:"string",detail:"String property",insert:'"name": "$0"'},{label:"number",detail:"Number property",insert:'"count": $0'},{label:"boolean",detail:"Boolean property",insert:'"enabled": true'}],markdown:[{label:"heading",detail:"Heading",insert:"## $0"},{label:"link",detail:"Link",insert:"[$0](https://example.com)"},{label:"image",detail:"Image",insert:"![$0](image-url)"},{label:"code",detail:"Code fence",insert:"```language\n$0\n```"},{label:"table",detail:"Table",insert:"| Header | Header |\n| --- | --- |\n| $0 | |"}],plaintext:[{label:"note",detail:"Simple note",insert:"Note: $0"},{label:"todo",detail:"Task line",insert:"TODO: $0"},{label:"summary",detail:"Summary heading",insert:"Summary\n$0"}]},c={javascript:"await break case catch class const continue default delete do else export extends finally for function if import in instanceof let new return static switch this throw try typeof var void while yield true false null undefined console document window",typescript:"abstract any as async await boolean class const constructor declare enum export extends false from function implements import interface keyof let namespace never null number private protected public readonly return static string super true type undefined unknown void",html:"a abbr address article aside audio b base blockquote body br button canvas caption cite code col colgroup data datalist dd del details div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hr html iframe img input label legend li link main meta nav ol option p picture pre progress script section select small source span strong style summary table tbody td template textarea tfoot th thead time title tr ul video",css:"align-items background background-color border border-radius box-shadow color display flex flex-direction font-size font-weight gap grid grid-template-columns height justify-content line-height margin max-width min-height object-fit opacity overflow padding position text-align transform transition width z-index",json:"true false null",php:"array as class echo else elseif extends false foreach function if implements interface namespace new null private protected public return static switch true try use var while",python:"and as assert async await break class continue def del elif else except false finally for from global if import in is lambda none nonlocal not or pass raise return true try while with yield print self",java:"abstract boolean break byte case catch char class const continue default double else enum extends false final finally float for if implements import int interface long new null package private protected public return static string super switch this throw throws true try void while",csharp:"abstract as async await bool break case catch class const continue decimal default delegate do double else enum event false finally float for foreach if in int interface internal is lock namespace new null object override private protected public readonly return sealed static string switch this throw true try using var virtual void while",cpp:"auto bool break case catch char class const continue default delete do double else enum false float for if include int long namespace new nullptr private protected public return sizeof static std string struct switch template this throw true try typename using void while",sql:"SELECT FROM WHERE JOIN LEFT RIGHT INNER OUTER INSERT INTO VALUES UPDATE SET DELETE CREATE TABLE ALTER DROP GROUP BY ORDER HAVING LIMIT OFFSET DISTINCT COUNT SUM AVG MIN MAX",bash:"case cd chmod cp do done echo elif else esac export fi for function grep if in mkdir mv read rm sed then while",markdown:"heading link image code table quote list todo bold italic"};t.prototype.renderCode=function(e,t){i.call(this,e,t),u();var n=e.querySelector(".rbe-code-wrap");n&&x(this,n)},t.prototype.formatCodeBlock=function(e){if(e&&"code"===e.dataset.type){var t=e.querySelector(".rbe-code-wrap"),n=e.querySelector(".rbe-code-input"),a=p(e);if(n)if(m(a)){var i=this,l=e.querySelector(".rbe-code-format");l&&(l.disabled=!0),f(t,"Formatting..."),g(n.value,a).then(function(a){n.value=String(a||"").replace(/\n+$/g,""),i.refreshCodeBlock(e),i.changed(!0),f(t,"Formatted")}).catch(function(){r.call(i,e),f(t,"Prettier unavailable, fallback used",!0)}).finally(function(){l&&(l.disabled=!1)})}else r.call(this,e)}},e.BlockWriteAICodeAssist={configure:function(e){(n=Object.assign({},n,e||{})).extraSuggestions=Object.assign({},n.extraSuggestions||{}),a=null},formatWithPrettier:g,enhanceAll:function(t){u(),Array.prototype.slice.call((t||document).querySelectorAll(".rbe-code-wrap")).forEach(function(t){x(e.editor||null||{formatCodeBlock:function(){}},t)})}}}function d(e){return String(null==e?"":e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function u(){if(!document.querySelector("style[data-blockwriteai-code-assist]")){var e=document.createElement("style");e.dataset.blockwriteaiCodeAssist="true",e.textContent='.rbe-code-wrap{position:relative;}.rbe-code-assist-status{margin-left:auto;font-size:12px;font-weight:740;color:inherit;opacity:.8;}.rbe-code-assist-status.is-error{color:#b91c1c;}.rbe-code-assist-panel{position:absolute;z-index:12;width:min(280px,calc(100% - 24px));max-height:210px;overflow:auto;border:1px solid var(--rbe-border,#d7dee8);border-radius:8px;background:#fff;box-shadow:0 16px 40px rgba(15,23,42,.16);padding:4px;}.rbe-code-assist-panel[hidden]{display:none;}.rbe-code-assist-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;width:100%;border:0;border-radius:6px;background:transparent;color:#172033;padding:7px 8px;text-align:left;font:13px/1.3 Arial,sans-serif;cursor:pointer;}.rbe-code-assist-item strong{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:13px;}.rbe-code-assist-item small{color:#667085;}.rbe-code-assist-item.is-active,.rbe-code-assist-item:hover{background:#e7efff;color:#143f91;}.rbe-code-assist-hint{grid-column:1/-1;color:#667085;font-size:11px;padding:3px 8px 5px;}',document.head.appendChild(e)}}function p(e){var t=e&&e.querySelector(".rbe-code-language");return t&&t.value||"plaintext"}function b(e){return n.cdnBase.replace("{version}",n.prettierVersion)+e}function f(e,t,n){var a=e&&e.querySelector(".rbe-code-assist-status");a&&(a.textContent=t||"",a.classList.toggle("is-error",!!n),t&&(clearTimeout(a._rbeTimer),a._rbeTimer=setTimeout(function(){a.textContent="",a.classList.remove("is-error")},n?3600:1800)))}function m(e){return l[e]||""}function h(e){return String(c[e]||"").split(/\s+/).filter(Boolean).map(function(e){return{label:e,detail:"Keyword",insert:e}})}function g(e,t){var i=m(t);return i?(n.prettier?a||(a=Promise.all([import(b("standalone.mjs")),import(b("plugins/babel.mjs")),import(b("plugins/estree.mjs")),import(b("plugins/typescript.mjs")),import(b("plugins/html.mjs")),import(b("plugins/postcss.mjs")),import(b("plugins/markdown.mjs"))]).then(function(e){return{prettier:e[0],plugins:e.slice(1).map(function(e){return e.default||e})}})):Promise.reject(new Error("Prettier is disabled"))).then(function(a){return a.prettier.format(e,{parser:i,plugins:a.plugins,tabWidth:n.tabWidth,printWidth:100,semi:!0,singleQuote:"javascript"===t||"typescript"===t,bracketSameLine:!1})}):Promise.reject(new Error("Prettier parser is not available for "+t))}function y(e,t){var n=e.selectionStart||0,a=e.value.slice(0,n);if("html"===t){var i=a.match(/<!([\w-]*)$/i);if(i)return{text:"!"+(i[1]||""),start:n-i[0].length,end:n,trigger:"html-declaration",force:!0};var r=a.match(/<\/?([\w:-]*)$/);if(r)return{text:r[1]||"",start:n-r[0].length,end:n,trigger:"html-tag",force:!0}}if("css"===t){var l=a.match(/(?:^|[;{]\s*)([a-z-]*)$/i);if(l)return{text:l[1]||"",start:n-(l[1]||"").length,end:n,trigger:"css-property",force:!l[1]}}if("json"===t){var s=a.match(/(?:^|[{,]\s*)"?([\w-]*)$/);if(s)return{text:s[1]||"",start:n-(s[1]||"").length,end:n,trigger:"json-key",force:!s[1]}}var o=a.match(/[A-Za-z_$][\w$-]*$/);return o?{text:o[0],start:n-o[0].length,end:n}:{text:"",start:n,end:n}}function v(e,t,a){t="string"==typeof t?{text:t}:t||{text:""};var i=[];"plaintext"===e?(Object.keys(o).forEach(function(e){"plaintext"!==e&&(i=i.concat(o[e]||[],h(e)))}),i=i.concat(o.plaintext||[],h("plaintext"))):i=(o[e]||[]).concat(h(e),n.extraSuggestions[e]||[]),"html-declaration"===t.trigger&&(i=[{label:"!DOCTYPE",detail:"HTML document type",insert:"<!DOCTYPE html>"},{label:"!--",detail:"HTML comment",insert:"\x3c!-- $0 --\x3e"}].concat(i)),i.length||(i=o.plaintext.concat(h("plaintext"))),i=function(e){var t=Object.create(null);return e.filter(function(e){var n=(e.label||"")+"\0"+(e.insert||e.label||"");return!(!e.label||t[n]||(t[n]=!0,0))})}(i);var r=(t.text||"").toLowerCase();return i.filter(function(e){return a||!r||0===e.label.toLowerCase().indexOf(r)}).slice(0,9)}function w(e,t,n){var a=n.insert||n.label,i=a.indexOf("$0"),r=a.replace("$0",""),l=e.value;e.value=l.slice(0,t.start)+r+l.slice(t.end);var s=t.start+(i>=0?i:r.length);e.focus(),e.setSelectionRange(s,s),e.dispatchEvent(new Event("input",{bubbles:!0}))}function x(t,a){if(n.suggestions&&a&&"true"!==a.dataset.codeAssistEnhanced){a.dataset.codeAssistEnhanced="true";var i=a.querySelector(".rbe-code-input"),r=a.querySelector(".rbe-code-editor"),l=a.querySelector(".rbe-code-header"),o=a.querySelector(".rbe-code-language");if(i&&r&&l){l.querySelector(".rbe-code-assist-status")||(l.appendChild(document.createElement("span")).className="rbe-code-assist-status");var c=document.createElement("div");c.className="rbe-code-assist-panel",c.hidden=!0,r.appendChild(c);var u=0,b=null,m=[],h=!1;o&&o.addEventListener("change",function(){h||(o.dataset.codeAssistUserLanguage="true",o.dataset.codeAssistAutoLanguage="")}),i.addEventListener("keydown",function(e){return(e.ctrlKey||e.metaKey)&&"Space"===e.code?(e.preventDefault(),void E(!0)):e.altKey&&e.shiftKey&&"f"===e.key.toLowerCase()?(e.preventDefault(),void t.formatCodeBlock(a.closest(".rbe-block"))):void(c.hidden||("ArrowDown"===e.key?(e.preventDefault(),u=(u+1)%m.length,$(m)):"ArrowUp"===e.key?(e.preventDefault(),u=(u-1+m.length)%m.length,$(m)):"Enter"===e.key||"Tab"===e.key?(e.preventDefault(),w(i,b,m[u]),g()):"Escape"===e.key&&(e.preventDefault(),g())))}),i.addEventListener("input",function(){u=0,setTimeout(function(){E(!1)},0)}),i.addEventListener("scroll",g),i.addEventListener("blur",function(){setTimeout(g,180)}),c.addEventListener("mousedown",function(e){var t=e.target.closest(".rbe-code-assist-item");if(t){e.preventDefault();var n=m[Number(t.dataset.index||0)];n&&w(i,b||y(i,p(a.closest(".rbe-block"))),n),g()}})}}function g(){c.hidden=!0,m=[]}function x(){if(!o)return p(a.closest(".rbe-block"));var t,n,r,l,c,d=(t=i.value,n=String(t||""),(r=n.trim())?(r.toLowerCase(),/^<\?php\b/i.test(r)||/\$\w+\s*=/.test(r)||/\b(echo|namespace|use)\s+[\w\\]+;/.test(r)?"php":/^(<!|<\/?html\b|<\/?head\b|<\/?body\b|<\/?(div|section|article|span|button|table|form|input|script|style|img|a)\b)/i.test(r)||/<\/[a-z][\w:-]*>\s*$/i.test(r)?"html":/^\s*[{[]/.test(n)&&(/"[^"]+"\s*:/.test(n)||/^[\s{\["\]},:0-9.truefalsnul-]+$/i.test(n))?"json":/^#{1,6}\s/.test(r)||/^```/.test(r)||/^\s*[-*]\s+\[[ x]\]/i.test(r)||/\[[^\]]+\]\([^)]+\)/.test(r)?"markdown":/^#include\b/.test(r)||/\bstd::\w+/.test(r)||/\bcout\s*<</.test(r)||/\bint\s+main\s*\(/.test(r)?"cpp":/\busing\s+System\s*;/.test(r)||/\bConsole\.Write(Line)?\s*\(/.test(r)||/\bnamespace\s+\w+/.test(r)?"csharp":/\bpublic\s+(class|static)\b/.test(r)||/\bSystem\.out\.println\s*\(/.test(r)||/\bpackage\s+[\w.]+;/.test(r)?"java":/\binterface\s+\w+/.test(r)||/\btype\s+\w+\s*=/.test(r)||/:\s*(string|number|boolean|unknown|any)\b/.test(r)?"typescript":/\b(const|let|var)\s+\w+\s*=/.test(r)||/\bfunction\s+\w*\s*\(/.test(r)||/=>/.test(r)||/\b(console|document|window)\./.test(r)||/\b(import|export)\s+/.test(r)?"javascript":/^\s*(def|class)\s+\w+/.test(r)||/\bprint\s*\(/.test(r)||/\bfrom\s+\w+\s+import\b/.test(r)||/\bimport\s+\w+/.test(r)||/:\s*(#.*)?$/.test(r)?"python":/\b(SELECT|INSERT\s+INTO|UPDATE|DELETE\s+FROM|CREATE\s+TABLE|ALTER\s+TABLE|DROP\s+TABLE)\b/i.test(r)?"sql":/^#!/.test(r)||/\b(echo|chmod|sudo|grep|sed)\b/.test(r)||/^\s*(if|for|while)\s+.*;\s*do\b/.test(r)?"bash":/@media\b/.test(r)||/[#.][\w-]+\s*\{/.test(r)||/\b[a-z-]+\s*:\s*[^;{}]+;/.test(r)?"css":""):""),u=o.value||"plaintext";if(!d&&"true"===o.dataset.codeAssistAutoLanguage&&"plaintext"!==u){h=!0,o.value="plaintext";try{e.jQuery&&e.jQuery.fn&&e.jQuery.fn.select2&&e.jQuery(o).val("plaintext").trigger("change.select2")}catch(e){}return o.dispatchEvent(new Event("change",{bubbles:!0})),h=!1,o.dataset.codeAssistAutoLanguage="","plaintext"}if(!d||(c=o,!(l=d)||!(c?Array.prototype.some.call(c.options||[],function(e){return e.value===l}):-1!==s.indexOf(l))))return u;if("true"===o.dataset.codeAssistUserLanguage&&"plaintext"!==u)return u;if("plaintext"!==u&&"true"!==o.dataset.codeAssistAutoLanguage&&u!==d)return u;if(u===d)return o.dataset.codeAssistAutoLanguage="true",u;h=!0,o.value=d,o.dataset.codeAssistAutoLanguage="true";try{e.jQuery&&e.jQuery.fn&&e.jQuery.fn.select2&&e.jQuery(o).val(d).trigger("change.select2")}catch(e){}return o.dispatchEvent(new Event("change",{bubbles:!0})),h=!1,f(a,"Detected "+function(e,t){if(t){var n=Array.prototype.find.call(t.options||[],function(t){return t.value===e});if(n)return n.textContent||e}return String(e||"Plain text").replace(/^\w/,function(e){return e.toUpperCase()})}(d,o)),d}function $(e){c.innerHTML=e.map(function(e,t){return'<button type="button" class="rbe-code-assist-item'+(t===u?" is-active":"")+'" data-index="'+t+'"><strong>'+d(e.label)+"</strong><small>"+d(e.detail||"")+"</small></button>"}).join("")+'<div class="rbe-code-assist-hint">Tab/Enter to insert, Ctrl+Space for all suggestions</div>'}function E(e){var t=x();if(b=y(i,t),!(m=v(t,b,e)).length||!e&&b.text.length<1&&!b.force)g();else{u=Math.min(u,m.length-1),$(m);var n=function(e,t){var n=getComputedStyle(e),a=parseFloat(n.lineHeight)||19,i=parseFloat(n.paddingLeft)||12,r=parseFloat(n.paddingTop)||12,l=document.createElement("span");l.style.cssText="position:absolute;visibility:hidden;font:"+n.font+";white-space:pre;",l.textContent="mmmmmmmmmm",document.body.appendChild(l);var s=l.getBoundingClientRect().width/10||8;l.remove();var o=e.value.slice(0,e.selectionStart||0).split("\n"),c=o.length-1,d=o[o.length-1].length;return{left:Math.max(8,Math.min(t.clientWidth-288,i+d*s-e.scrollLeft)),top:Math.max(8,Math.min(t.clientHeight-220,r+(c+1)*a-e.scrollTop))}}(i,r);c.style.left=n.left+"px",c.style.top=n.top+"px",c.hidden=!1}}}}("undefined"!=typeof window?window:this);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qarakash/blockwriteai",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "BlockWriteAI JSON-first drop-in block writing editor with free core blocks, preview mounting, and license-gated premium plugins.",
5
5
  "keywords": [
6
6
  "blockwriteai",
@@ -52,8 +52,6 @@
52
52
  "./plugins/mermaid/min": "./dist/plugins/blockwriteai-mermaid.min.js",
53
53
  "./plugins/code-assist": "./dist/plugins/blockwriteai-code-assist.min.js",
54
54
  "./plugins/code-assist/min": "./dist/plugins/blockwriteai-code-assist.min.js",
55
- "./plugins/history": "./dist/plugins/blockwriteai-history.min.js",
56
- "./plugins/history/min": "./dist/plugins/blockwriteai-history.min.js",
57
55
  "./plugins/ai": "./dist/plugins/blockwriteai-ai.min.js",
58
56
  "./plugins/ai/min": "./dist/plugins/blockwriteai-ai.min.js",
59
57
  "./plugins/signature": "./dist/plugins/blockwriteai-signature.min.js",
@@ -65,8 +63,8 @@
65
63
  "./package.json": "./package.json"
66
64
  },
67
65
  "scripts": {
68
- "build:min": "terser dist/blockwriteai.js --compress --mangle --comments false --output dist/blockwriteai.min.js && terser dist/plugins/blockwriteai-code-assist.js --compress --mangle --comments false --output dist/plugins/blockwriteai-code-assist.min.js && terser dist/plugins/blockwriteai-advanced-blocks.js --compress --mangle --comments false --output dist/plugins/blockwriteai-advanced-blocks.min.js && terser dist/plugins/blockwriteai-history.js --compress --mangle --comments false --output dist/plugins/blockwriteai-history.min.js && terser dist/plugins/blockwriteai-drawing.js --compress --mangle --comments false --output dist/plugins/blockwriteai-drawing.min.js && terser dist/plugins/blockwriteai-mermaid.js --compress --mangle --comments false --output dist/plugins/blockwriteai-mermaid.min.js && terser dist/plugins/blockwriteai-signature.js --compress --mangle --comments false --output dist/plugins/blockwriteai-signature.min.js && terser dist/plugins/blockwriteai-signature-flow.js --compress --mangle --comments false --output dist/plugins/blockwriteai-signature-flow.min.js && terser dist/plugins/blockwriteai-ai.js --compress --mangle --comments false --output dist/plugins/blockwriteai-ai.min.js && cleancss -O2 -o dist/blockwriteai.min.css dist/blockwriteai.css",
69
- "check": "node --check dist/blockwriteai.js && node --check dist/blockwriteai.min.js && node --check dist/plugins/blockwriteai-advanced-blocks.js && node --check dist/plugins/blockwriteai-advanced-blocks.min.js && node --check dist/plugins/blockwriteai-drawing.js && node --check dist/plugins/blockwriteai-drawing.min.js && node --check dist/plugins/blockwriteai-mermaid.js && node --check dist/plugins/blockwriteai-mermaid.min.js && node --check dist/plugins/blockwriteai-code-assist.js && node --check dist/plugins/blockwriteai-code-assist.min.js && node --check dist/plugins/blockwriteai-history.js && node --check dist/plugins/blockwriteai-history.min.js && node --check dist/plugins/blockwriteai-ai.js && node --check dist/plugins/blockwriteai-ai.min.js && node --check dist/plugins/blockwriteai-signature.js && node --check dist/plugins/blockwriteai-signature.min.js && node --check dist/plugins/blockwriteai-signature-flow.js && node --check dist/plugins/blockwriteai-signature-flow.min.js",
66
+ "build:min": "terser dist/blockwriteai.js --compress --mangle --comments false --output dist/blockwriteai.min.js && terser dist/plugins/blockwriteai-code-assist.js --compress --mangle --comments false --output dist/plugins/blockwriteai-code-assist.min.js && terser dist/plugins/blockwriteai-advanced-blocks.js --compress --mangle --comments false --output dist/plugins/blockwriteai-advanced-blocks.min.js && terser dist/plugins/blockwriteai-drawing.js --compress --mangle --comments false --output dist/plugins/blockwriteai-drawing.min.js && terser dist/plugins/blockwriteai-mermaid.js --compress --mangle --comments false --output dist/plugins/blockwriteai-mermaid.min.js && terser dist/plugins/blockwriteai-signature.js --compress --mangle --comments false --output dist/plugins/blockwriteai-signature.min.js && terser dist/plugins/blockwriteai-signature-flow.js --compress --mangle --comments false --output dist/plugins/blockwriteai-signature-flow.min.js && terser dist/plugins/blockwriteai-ai.js --compress --mangle --comments false --output dist/plugins/blockwriteai-ai.min.js && cleancss -O2 -o dist/blockwriteai.min.css dist/blockwriteai.css",
67
+ "check": "node --check dist/blockwriteai.js && node --check dist/blockwriteai.min.js && node --check dist/plugins/blockwriteai-advanced-blocks.js && node --check dist/plugins/blockwriteai-advanced-blocks.min.js && node --check dist/plugins/blockwriteai-drawing.js && node --check dist/plugins/blockwriteai-drawing.min.js && node --check dist/plugins/blockwriteai-mermaid.js && node --check dist/plugins/blockwriteai-mermaid.min.js && node --check dist/plugins/blockwriteai-code-assist.js && node --check dist/plugins/blockwriteai-code-assist.min.js && node --check dist/plugins/blockwriteai-ai.js && node --check dist/plugins/blockwriteai-ai.min.js && node --check dist/plugins/blockwriteai-signature.js && node --check dist/plugins/blockwriteai-signature.min.js && node --check dist/plugins/blockwriteai-signature-flow.js && node --check dist/plugins/blockwriteai-signature-flow.min.js",
70
68
  "pack:preview": "npm pack --dry-run"
71
69
  },
72
70
  "publishConfig": {
package/types/index.d.ts CHANGED
@@ -145,7 +145,6 @@ export interface BlockWriteAIOptions {
145
145
  Export?: BlockWriteAIExportOptions;
146
146
  exportButton?: boolean;
147
147
  exportHtmlButton?: boolean;
148
- historyPanel?: boolean;
149
148
  saveButton?: boolean;
150
149
  licenseKey?: string;
151
150
  license_key?: string;
@@ -181,8 +180,6 @@ export default class BlockWriteAI {
181
180
  getPremiumState(): BlockWriteAIPremiumState;
182
181
  isPremiumFeatureEnabled(feature: "drawing" | "mermaid" | "signature" | "signature_flow" | "ai" | string): boolean;
183
182
  consumePremiumUsage(feature: "ai" | string, metadata?: Record<string, unknown>): Promise<BlockWriteAIPremiumState>;
184
- undo(): void;
185
- redo(): void;
186
183
  openAI(): this | null;
187
184
  destroy(): void;
188
185
 
@@ -1 +0,0 @@
1
- !function(e,o){"object"==typeof module&&module.exports?module.exports=o(require("../blockwriteai")):o(e.BlockWriteAI)}("undefined"!=typeof window?window:this,function(e){"use strict";return e&&"function"==typeof e.configure?(e.configure({historyPanel:!0}),e.enableHistoryPanel=function(){return e.configure({historyPanel:!0}),e},e):null});