10 lines
54 KiB
JavaScript
10 lines
54 KiB
JavaScript
/*!
|
|
* Tiny Image Editing plugin
|
|
*
|
|
* Copyright (c) 2023 Ephox Corporation DBA Tiny Technologies, Inc.
|
|
* Licensed under the Tiny commercial license. See https://www.tiny.cloud/legal/
|
|
*
|
|
* Version: 8.3.0-112
|
|
*/
|
|
|
|
!function(){"use strict";const e=Object.getPrototypeOf,t=(e,t,r)=>!!r(e,t.prototype)||e.constructor?.name===t.name,r=e=>r=>(e=>{const r=typeof e;return null===e?"null":"object"===r&&Array.isArray(e)?"array":"object"===r&&t(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":r})(r)===e,n=e=>t=>typeof t===e,o=r("string"),a=r("object"),i=r=>((r,n)=>a(r)&&t(r,n,((t,r)=>e(t)===r)))(r,Object),s=r("array"),l=n("boolean"),d=e=>undefined===e;const c=e=>null==e,u=e=>!c(e),m=n("function"),g=n("number"),h=()=>{},p=e=>()=>e,f=e=>e,y=(e,t)=>e===t;function b(e,...t){return(...r)=>{const n=t.concat(r);return e.apply(null,n)}}const w=e=>e(),v=p(!1),x=p(!0);class S{tag;value;static singletonNone=new S(!1);constructor(e,t){this.tag=e,this.value=t}static some(e){return new S(!0,e)}static none(){return S.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?S.some(e(this.value)):S.none()}bind(e){return this.tag?e(this.value):S.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:S.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(e??"Called getOrDie on None")}static from(e){return u(e)?S.some(e):S.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}const C=Array.prototype.indexOf,P=(e,t)=>((e,t)=>C.call(e,t))(e,t)>-1,R=(e,t)=>{for(let r=0,n=e.length;r<n;r++)if(t(e[r],r))return!0;return!1},E=(e,t)=>{const r=e.length,n=new Array(r);for(let o=0;o<r;o++){const r=e[o];n[o]=t(r,o)}return n},O=(e,t)=>{for(let r=0,n=e.length;r<n;r++)t(e[r],r)},I=(e,t,r)=>(O(e,((e,n)=>{r=t(r,e,n)})),r),M=(e,t)=>((e,t,r)=>{for(let n=0,o=e.length;n<o;n++){const o=e[n];if(t(o,n))return S.some(o);if(r(o,n))break}return S.none()})(e,t,v),D=Object.keys,k=Object.hasOwnProperty,L=(e,t)=>{const r=D(e);for(let n=0,o=r.length;n<o;n++){const o=r[n];t(e[o],o)}},U=(e,t)=>A(e,((e,r)=>({k:r,v:t(e,r)}))),A=(e,t)=>{const r={};return L(e,((e,n)=>{const o=t(e,n);r[o.k]=o.v})),r},T=(e,t)=>k.call(e,t),F=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},_=e=>{const t=t=>t(e),r=p(e),n=()=>o,o={tag:!0,inner:e,fold:(t,r)=>r(e),isValue:x,isError:v,map:t=>N.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:r,or:n,getOrThunk:r,orThunk:n,getOrDie:r,each:t=>{t(e)},toOptional:()=>S.some(e)};return o},B=e=>{const t=()=>r,r={tag:!1,inner:e,fold:(t,r)=>t(e),isValue:v,isError:x,map:t,mapError:t=>N.error(t(e)),bind:t,exists:v,forall:x,getOr:f,or:f,getOrThunk:w,orThunk:w,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:h,toOptional:S.none};var n;return r},N={value:_,error:B,fromOption:(e,t)=>e.fold((()=>B(t)),_)},z=(j=(e,t)=>i(e)&&i(t)?z(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let r=0;r<e.length;r++){const n=e[r];for(const e in n)T(n,e)&&(t[e]=j(t[e],n[e]))}return t});var j;const $=e=>e.bind(f);(e=>{if(!s(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],r={};O(e,((n,o)=>{const a=D(n);if(1!==a.length)throw new Error("one and only one name per case");const i=a[0],l=n[i];if(void 0!==r[i])throw new Error("duplicate key detected:"+i);if("cata"===i)throw new Error("cannot have a case named cata (sorry)");if(!s(l))throw new Error("case arguments must be an array");t.push(i),r[i]=(...r)=>{const n=r.length;if(n!==l.length)throw new Error("Wrong number of arguments to case "+i+". Expected "+l.length+" ("+l+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[o].apply(null,r)},match:e=>{const n=D(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!(e=>{for(let r=0,o=e.length;r<o;++r)if(!0!==(t=e[r],P(n,t)))return!1;var t;return!0})(t))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[i].apply(null,r)},log:e=>{console.log(e,{constructors:t,constructor:i,params:r})}}}}))})([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]);const H=(e,t)=>e.exists((e=>e===t)),G=e=>{const t=F(S.none()),r=()=>t.get().each(e);return{clear:()=>{r(),t.set(S.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{r(),t.set(S.some(e))}}},V=()=>{const e=G(h);return{...e,on:t=>e.get().each(t)}},W=(e,t)=>{const{type:r,message:n}=t;e.notificationManager.open({type:r,text:n})},X=e=>{(e=>{switch(e){case"error":return console.error;case"info":return console.info;case"warn":return console.warn;default:return console.log}})(e.type)(e.message)},Y=(e,t)=>{const{protect:r,allowList:n=[],blockList:o=[]}=null!=e?e:{};let a;return a=u(r)?r:n.length>0||o.length>0||t,{protect:a,allowList:n,blockList:o}},q=e=>{const{protect:t,allowList:r,blockList:n}=null!=e?e:{};return e=>{const o=e.toLowerCase();return r.length>0?!R(r,(e=>e.toLowerCase()===o)):n.length>0?R(n,(e=>e.toLowerCase()===o)):t}},K=e=>{const t=q(e);return(e,r)=>{const n=((e,t)=>`${e}:${t}`)(r,e.toLowerCase());return t(n)}},J=(e,t,r,n)=>{const o=Reflect.get(e,"on"),a={protectedEventHandlers:[],cleanupScheduled:!1},i=(e,t)=>{n&&console.log(`[EventsProxy] ${e}`,t||"")},s=t=>{"invalid"===t&&a.protectedEventHandlers.length>0&&(i("Removing event handlers",a.protectedEventHandlers),O(a.protectedEventHandlers,(t=>{e.off(t.name,t.callback)})),a.protectedEventHandlers=[])},l=t.onStatusChange(s);return e.on("remove",l),(n,l,d)=>{i(`Adding event listener: ${n}`,{shouldProtect:r(n)});const c=((e,n)=>{const o=r(e),i=t.getStatus(),s=o&&"invalid"===i?h:n;return o&&a.protectedEventHandlers.push({name:e,callback:s}),s})(n,l);return a.cleanupScheduled||(a.cleanupScheduled=!0,window.setTimeout((()=>{s(t.getStatus()),a.cleanupScheduled=!1}),0)),Reflect.apply(o,e,[n,c,d])}},Z=(e,t,r)=>n=>{const o="invalid"!==t.getStatus()&&u(r)?r(n):h,a=((e,t,r)=>{const n=e=>{"invalid"===e&&r.setEnabled(!1)},o=()=>n(t.getStatus());n(t.getStatus()),e.on("NodeChange",o);const a=t.onStatusChange(n);return()=>{e.off("NodeChange",o),a()}})(e,t,n);return e=>{null==o||o(e),a()}},Q=(e,t,r)=>(...n)=>{var o;return"invalid"===e.getStatus()?r:null!==(o=null==t?void 0:t(...n))&&void 0!==o?o:r},ee=(e,t)=>Q(e,t,Promise.resolve([])),te=(e,t)=>Q(e,t,[]),re=(e,t)=>Q(e,t,!1),ne=(e,t,r,n)=>{const a=t=>{const{command:a,value:i}=t,s=S.from(i).filter(o).map((e=>e.toLowerCase())),l=a.toLowerCase()===n.toLowerCase(),d=s.exists((e=>r.has(e))),c=s.exists((t=>t===e.queryCommandValue(n)));l&&d&&!c&&t.preventDefault()},i=t.onStatusChange((t=>{if("invalid"===t){e.on("BeforeExecCommand",a);const t=()=>{const t=e.queryCommandValue(n);r.has(t.toLowerCase())&&e.execCommand(n,!1,t)};e.initialized?t():e.on("init",t)}}));e.on("remove",(()=>{i(),e.off("BeforeExecCommand",a)}))},oe=(e,t,r,n,a,i=!1)=>{const s=new Set,l=new Set,d=(e,t)=>{i&&console.log(`[UiProxy] ${e}`,t||"")};((e,t,r)=>{ne(e,t,r,"ToggleView")})(e,r,s),((e,t,r)=>{ne(e,t,r,"ToggleSidebar")})(e,r,l);const c=(t,o,i,s)=>{const l=a(t,i);return d(`${s}: ${t}`,{spec:o,context:n,shouldProtect:l}),l?{...o,onSetup:Z(e,r,o.onSetup)}:o};return new Proxy(t,{get:(e,t,i)=>{const u=Reflect.get(e,t,i);if(!o(t))return u;switch(t){case"addButton":case"addGroupToolbarButton":case"addToggleButton":case"addMenuButton":case"addSplitButton":return(...r)=>{const[n,o,...a]=r,i=c(n,o,"button",String(t));return Reflect.apply(u,e,[n,i,...a])};case"addMenuItem":case"addToggleMenuItem":case"addNestedMenuItem":return(...r)=>{const[n,o,...a]=r,i=c(n,o,"menuitem",String(t));return Reflect.apply(u,e,[n,i,...a])};case"addAutocompleter":return(...o)=>{const[i,s,...l]=o,c=a(i,"autocompleter");if(d(`${String(t)}: ${i}`,{spec:s,context:n,shouldProtect:c}),c){const t={...s,fetch:ee(r,s.fetch)};return Reflect.apply(u,e,[i,t,...l])}return Reflect.apply(u,e,[i,s,...l])};case"addSidebar":return(...r)=>{const[o,i,...s]=r,c=a(o,"sidebar");if(d(`${String(t)}: ${o}`,{spec:i,context:n,shouldProtect:c}),c){l.add(o.toLowerCase());const t={...i};return Reflect.apply(u,e,[o,t,...s])}return Reflect.apply(u,e,[o,i,...s])};case"addView":return(...r)=>{const[o,i,...l]=r,c=a(o,"view");if(d(`${String(t)}: ${o}`,{spec:i,context:n,shouldProtect:c}),c){s.add(o.toLowerCase());const t={...i};return Reflect.apply(u,e,[o,t,...l])}return Reflect.apply(u,e,[o,i,...l])};case"addContextMenu":return(...o)=>{const[i,s,...l]=o,c=a(i,"contextmenu");if(d(`${String(t)}: ${i}`,{spec:s,context:n,shouldProtect:c}),c){const t={...s,update:te(r,s.update)};return Reflect.apply(u,e,[i,t,...l])}return Reflect.apply(u,e,[i,s,...l])};case"addContextToolbar":case"addContextForm":return(...o)=>{const[i,s,...l]=o,c=a(i,"contexttoolbar");if(d(`${String(t)}: ${i}`,{spec:s,context:n,shouldProtect:c}),c){const t={...s,predicate:re(r,s.predicate)};return Reflect.apply(u,e,[i,t,...l])}return Reflect.apply(u,e,[i,s,...l])};case"addIcon":case"getAll":case"addContext":return u}}})},ae=new Set(["addCommand","addCommands","addQueryStateHandler","addQueryValueHandler"]),ie=e=>(t,r)=>{e&&console.log(`[EditorProxy] ${t}`,r||"")},se=(e,t)=>{const{statusProvider:r,uiContext:n,protection:o,debug:a=!1}=t,{events:i,commands:s,ui:l}=o;ie(a)("Creating enhanced editor with options:",{hasStatusProvider:!!r,uiContext:n,debug:a,protection:o});const{editorUiProxy:d,editorCommandsProxy:c,editorEventListenerProxy:u}=((e,t,r,n,o,a,i)=>{const s=a.protect?{...e.ui,registry:oe(e,e.ui.registry,t,r,K(a),i)}:e.ui,l=n.protect?((e,t,r,n,o)=>{const a={protectedCommands:[],cleanupScheduled:!1},i=(e,t)=>{o&&console.log(`[CommandsProxy] ${e}`,t||"")},s=(e,t)=>{const o=n(e),i=r.getStatus();return o&&a.protectedCommands.push(e),o&&"invalid"===i?h:t},l=t=>{"invalid"===t&&a.protectedCommands.length>0&&(i("Removing commands",a.protectedCommands),O(a.protectedCommands,(t=>{e.editorCommands.removeCommand(t)})),a.protectedCommands=[])},d=()=>{a.cleanupScheduled||(a.cleanupScheduled=!0,window.setTimeout((()=>{l(r.getStatus()),a.cleanupScheduled=!1}),0))},c=r.onStatusChange(l);return e.on("remove",c),new Proxy(t,{get:(e,r,o)=>{if(i(`Accessing property: ${String(r)}`),"addCommand"===r){const a=Reflect.get(e,r,o);return(e,r,...o)=>{i(`Adding command: ${e}`,{shouldProtect:n(e)});const l=s(e,r);return d(),Reflect.apply(a,t,[e,l,...o])}}if("addCommands"===r){const n=Reflect.get(e,r,o);return(e,r="exec")=>{i(`Adding commands (${r})`,{commandCount:Object.keys(e).length,willApplyEnforcement:"exec"===r});const o="exec"!==r?e:U(e,((e,t)=>s(t,e)));return d(),Reflect.apply(n,t,[o,r])}}return Reflect.get(e,r,o)}})})(e,e.editorCommands,t,q(n),i):e.editorCommands;return{editorUiProxy:s,editorCommandsProxy:l,editorEventListenerProxy:o.protect?J(e,t,q(o),i):e.on.bind(e)}})(e,r,n||"",s,i,l,a),g=((e,t,r,n)=>(o,a,i)=>{const s=String(a);if("on"===a)return ie(n)("on intercepted"),r;if(ae.has(s))return ie(n)(`${s} intercepted`),t[s].bind(t);if("editorCommands"===a)return ie(n)("editorCommands accessed"),t;if("ui"===a)return ie(n)("ui accessed"),e;const l=Reflect.get(o,a,i);return m(l)?l.bind(o):l})(d,c,u,a);return new Proxy(e,{get:g,set:(e,t,r,n)=>Reflect.set(e,t,r,n),has:(e,t)=>Reflect.has(e,t),ownKeys:e=>Reflect.ownKeys(e),getOwnPropertyDescriptor:(e,t)=>Reflect.getOwnPropertyDescriptor(e,t),defineProperty:(e,t,r)=>Reflect.defineProperty(e,t,r),deleteProperty:(e,t)=>Reflect.deleteProperty(e,t),isExtensible:e=>Reflect.isExtensible(e),preventExtensions:e=>Reflect.preventExtensions(e),getPrototypeOf:e=>Reflect.getPrototypeOf(e),setPrototypeOf:(e,t)=>Reflect.setPrototypeOf(e,t)})},le=e=>parseInt(e,10),de=(e,t)=>{const r=e-t;return 0===r?0:r>0?1:-1},ce=(e,t,r)=>({major:e,minor:t,patch:r}),ue=e=>{const t=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(e);return t?ce(le(t[1]),le(t[2]),le(t[3])):ce(0,0,0)},me=(e,t)=>!!e&&-1===((e,t)=>{const r=de(e.major,t.major);if(0!==r)return r;const n=de(e.minor,t.minor);if(0!==n)return n;const o=de(e.patch,t.patch);return 0!==o?o:0})((e=>ue((e=>[e.majorVersion,e.minorVersion].join(".").split(".").slice(0,3).join("."))(e)))(e),ue(t)),ge=ue("8.3.0"),he=`${ge.major}.${ge.minor}.0`,pe=`${ge.major+1}.0.0`,fe=(e,t)=>{const{setup:r,protection:n}=t;return(o,a)=>{if(!((e,t)=>me(e,he)?(console.error(`The "${t}" plugin requires at least version ${he} of TinyMCE.`),!1):!!me(e,pe)||(console.error(`The "${t}" plugin requires at least version ${he} of TinyMCE but less than ${pe}.`),!1))(tinymce,e)||((e,t)=>!!(e=>{var t;const r=null===(t=e.options.get("license_key"))||void 0===t?void 0:t.toLowerCase(),n=e.options.get("online_license_key");return c(n)&&"gpl"===r})(e)&&(((e,t)=>{const{console:r,editor:n}=t;u(n)&&(e._skinLoaded?W(e,n):e.on("SkinLoaded",(()=>{W(e,n)}))),u(r)&&X(r)})(e,{console:{type:"error",message:[`The "${t}" plugin requires a valid TinyMCE license key.`,"Read more: https://www.tiny.cloud/docs/tinymce/latest/license-key/"].join(" ")}}),!0))(o,e))return{};const i=(e=>{const{protect:t=!0,events:r,commands:n,ui:o,api:a}=null!=e?e:{};return{protect:t,events:Y(r,false),commands:Y(n,true),ui:Y(o,true),api:Y(a,true)}})(n),s=((e="pre-validation")=>{const t=F(e),r=new Set;let n=!1;const{enableLogging:o=!1}={},a=(e,...t)=>{o&&console.log(`[StatusProvider] ${e}`,...t)};return{setStatus:e=>{const n=t.get();if(n===e)return a("Status unchanged:",e),!1;t.set(e),a("Status changed:",n,"->",e);const o={currentStatus:e,previousStatus:n},i=Array.from(r);return O(i,(e=>{e(o.currentStatus,o.previousStatus)})),!0},onStatusChange:e=>(r.add(e),a("Callback registered, total listeners:",r.size),()=>{r.delete(e)&&a("Callback unregistered, remaining listeners:",r.size)}),getStatus:t.get,hasListeners:()=>r.size>0,destroy:()=>{n||(a("Destroying StatusProvider, clearing",r.size,"listeners"),r.clear(),n=!0)}}})(),l=((e,t,r)=>{const n=`commercial-license-${t}`;return e.ui.registry.addContext(n,(()=>"invalid"!==r.getStatus()&&!e.mode.isReadOnly())),e.licenseKeyManager.validate({plugin:t}).then((e=>{r.setStatus(e?"valid":"invalid")}),(e=>{console.error(e),console.error(`An unknown error occurred when trying to validate "${t}" plugin.`),r.setStatus("invalid")})),{ui:{context:n}}})(o,e,s),d=i.protect?se(o,{statusProvider:s,uiContext:l.ui.context,debug:t.debug||!1,protection:i}):o,g=((e,t)=>({pluginCode:e,enforcer:{isInvalid:()=>"invalid"===t.getStatus(),onInvalid:e=>t.onStatusChange(((t,r)=>{"invalid"===t&&e(t,r)}))}}))(e,s);return((e,t,r,n)=>{if(t.protect&&t.api.protect&&u(e)){const a=q(t.api);return(o=e=>"invalid"===r.getStatus()&&a(e),(e,t)=>U(e,((e,r)=>m(e)?(...n)=>{if(o(r.toLowerCase())){const e=`Method "${u(t)?`${t}.`:""}${r}" is not available due to license key restrictions.`,n=new Error(e);throw console.error(e),n}return e(...n)}:e)))(e,n)}var o;return e})(r(d,a,g),i,s,e)}},ye=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},be=(e,t)=>{const r=(t||document).createElement(e);return ye(r)},we=ye,ve=(e,t)=>{const r=void 0===t?document:t.dom;return 1!==(n=r).nodeType&&9!==n.nodeType&&11!==n.nodeType||0===n.childElementCount?S.none():S.from(r.querySelector(e)).map(we);var n},xe=e=>t=>(e=>e.dom.nodeType)(t)===e,Se=xe(1),Ce=xe(3),Pe=xe(11),Re=e=>we(e.dom.getRootNode()),Ee=e=>we(e.dom.host),Oe=e=>{const t=we((e=>{if(u(e.target)){const t=we(e.target);if(Se(t)&&u(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return(e=>0<e.length?S.some(e[0]):S.none())(t)}}return S.from(e.target)})(e).getOr(e.target)),r=()=>e.stopPropagation(),n=()=>e.preventDefault(),o=(a=n,i=r,(...e)=>a(i.apply(null,e)));var a,i;return((e,t,r,n,o,a,i)=>({target:e,x:t,y:r,stop:n,prevent:o,kill:a,raw:i}))(t,e.clientX,e.clientY,r,n,o,e)},Ie=(e,t,r,n)=>{e.dom.removeEventListener(t,r,n)},Me=x,De=(e,t,r)=>((e,t,r,n)=>((e,t,r,n,o)=>{const a=((e,t)=>r=>{e(r)&&t(Oe(r))})(r,n);return e.dom.addEventListener(t,a,o),{unbind:b(Ie,e,t,a,o)}})(e,t,r,n,!1))(e,t,Me,r),ke=(e,t)=>{e.dom.appendChild(t.dom)},Le=(e,t,r)=>{if(!(o(r)||l(r)||g(r)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",r,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,r+"")},Ue=(e,t,r)=>{Le(e.dom,t,r)},Ae=(e,t)=>{const r=e.dom;L(t,((e,t)=>{Le(r,t,e)}))},Te=(e,t)=>{const r=e.dom.getAttribute(t);return null===r?void 0:r},Fe=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},_e=e=>new Promise(((t,r)=>{const n=()=>{a(),t(e)},o=[De(e,"load",n),De(e,"error",(()=>{a(),r("Unable to load data from image: "+e.dom.src)}))],a=()=>O(o,(e=>e.unbind()));e.dom.complete&&n()})),Be=e=>void 0!==e.style&&m(e.style.getPropertyValue),Ne=e=>{const t=Ce(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const r=t.ownerDocument;return(e=>{const t=Re(e);return Pe(r=t)&&u(r.dom.host)?S.some(t):S.none();var r})(we(t)).fold((()=>r.body.contains(t)),(n=Ne,o=Ee,e=>n(o(e))));var n,o},ze=(e,t)=>{const r=e.dom;L(t,((e,t)=>{((e,t,r)=>{if(!o(r))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",r,":: Element ",e),new Error("CSS value must be a string: "+r);Be(e)&&e.style.setProperty(t,r)})(r,t,e)}))},je=(e,t)=>{const r=e.dom,n=window.getComputedStyle(r).getPropertyValue(t);return""!==n||Ne(e)?n:$e(r,t)},$e=(e,t)=>Be(e)?e.style.getPropertyValue(t):"",He=(e,t)=>{const r=r=>{const n=t(r);if(n<=0||null===n){const t=je(r,e);return parseFloat(t)||0}return n},n=(e,t)=>I(t,((t,r)=>{const n=je(e,r),o=void 0===n?0:parseInt(n,10);return isNaN(o)?t:t+o}),0);return{set:(t,r)=>{if(!g(r)&&!r.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+r);const n=t.dom;Be(n)&&(n.style[e]=r+"px")},get:r,getOuter:r,aggregate:n,max:(e,t,r)=>{const o=n(e,r);return t>o?t-o:0}}},Ge=He("height",(e=>{const t=e.dom;return Ne(e)?t.getBoundingClientRect().height:t.offsetHeight})),Ve=e=>Ge.get(e),We=He("width",(e=>{const t=e.dom;return Ne(e)?t.getBoundingClientRect().width:t.offsetWidth})),Xe=e=>We.get(e),Ye=(e,t)=>(e=>M(e.dom.childNodes,(e=>((e,t)=>{const r=e.dom;if(1!==r.nodeType)return!1;{const e=r;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}})(we(e),t))).map(we))(e),qe=(e,t)=>ve(t,e),Ke=(e,t)=>{(e=>void 0!==e.dom.classList)(e)?e.dom.classList.add(t):((e,t)=>{((e,t,r)=>{const n=((e,t)=>{const r=Te(e,t);return void 0===r||""===r?[]:r.split(" ")})(e,t),o=n.concat([r]);Ue(e,t,o.join(" "))})(e,"class",t)})(e,t)},Je=(e,t)=>et(document.createElement("canvas"),e,t),Ze=e=>{const t=Je(e.width,e.height);return Qe(t).drawImage(e,0,0),t},Qe=e=>e.getContext("2d"),et=(e,t,r)=>(e.width=t,e.height=r,e),tt=e=>e.naturalWidth||e.width,rt=e=>e.naturalHeight||e.height,nt=e=>{const t=URL.createObjectURL(e),r=new Image;return r.src=t,_e(we(r)).then((e=>e.dom))},ot=e=>new Promise(((t,r)=>{(e=>{const t=e.split(","),r=/data:([^;]+)/.exec(t[0]);if(!r)return S.none();const n=r[1],o=t[1],a=1024,i=atob(o),s=i.length,l=Math.ceil(s/a),d=new Array(l);for(let e=0;e<l;++e){const t=e*a,r=Math.min(t+a,s),n=new Array(r-t);for(let e=t,o=0;e<r;++o,++e)n[o]=i[e].charCodeAt(0);d[e]=new Uint8Array(n)}return S.some(new Blob(d,{type:n}))})(e).fold((()=>{r("uri is not base64: "+e)}),t)})),at=(e,t,r)=>(t=t||"image/png",m(HTMLCanvasElement.prototype.toBlob)?new Promise(((n,o)=>{e.toBlob((e=>{e?n(e):o()}),t,r)})):ot(e.toDataURL(t,r))),it=e=>nt(e),st=e=>(e=>{const t=e.src;return 0===t.indexOf("data:")?ot(t):fetch(t).then((e=>e.ok?e.blob():Promise.reject(new Error("Error "+e.status+" downloading image"))),(()=>Promise.reject((()=>{const e=new Error("No access to download image");return e.code=18,e.name="SecurityError",e})())))})(e),lt=(e,t,r)=>{const n=t.type,o=p(n),a=p(r),i=(t,r)=>e.then((e=>((e,t,r)=>(t=t||"image/png",e.toDataURL(t,r)))(e,t,r)));return{getType:o,toBlob:()=>Promise.resolve(t),toDataURL:a,toBase64:()=>r.split(",")[1],toAdjustedBlob:(t,r)=>e.then((e=>at(e,t,r))),toAdjustedDataURL:i,toAdjustedBase64:(e,t)=>i(e,t).then((e=>e.split(",")[1])),toCanvas:()=>e.then(Ze)}},dt=e=>(e=>new Promise((t=>{const r=new FileReader;r.onloadend=()=>{t(r.result)},r.readAsDataURL(e)})))(e).then((t=>lt((e=>nt(e).then((e=>{(e=>{URL.revokeObjectURL(e.src)})(e);const t=Je(tt(e),rt(e));return Qe(t).drawImage(e,0,0),t})))(e),e,t))),ct=(e,t)=>at(e,t).then((t=>lt(Promise.resolve(e),t,e.toDataURL()))),ut=e=>dt(e);class mt{constructor(e){this.littleEndian=!1,this.dataView=new DataView(e)}read(e,t){if(e+t>this.length())return N.error("Read extends past buffer end");const r=this.littleEndian?0:-8*(t-1);let n=0;for(let o=0;o<t;o++)n|=this.readByteAt(e+o)<<Math.abs(r+8*o);return N.value(n)}segment(e,t){const r=this.dataView.buffer;return void 0!==e&&void 0!==t?r.slice(e,e+t):void 0!==e?r.slice(e):r}length(){return this.dataView.byteLength}readByteAt(e){return this.dataView.getUint8(e)}}const gt=(e,t,r,n,o)=>{if(t+r*n>e.length())return N.error("Read would extend past end of buffer");const a=[];for(let i=0;i<n;i++){const n=o(e,t+r*i);if(n.isError())return n.map((e=>[e]));a.push(n.getOrDie())}return N.value(a)},ht=(e,t)=>e.read(t,1),pt=(e,t)=>e.read(t,2),ft=(e,t)=>e.read(t,4),yt=e=>N.value(String.fromCharCode(e)),bt=e=>N.value(e>2147483647?e-4294967296:e),wt=(e,t)=>ft(e,t).bind(bt),vt=(e,t)=>ht(e,t).bind(yt),xt=(e,t,r=1)=>gt(e,t,1,r,vt).map((e=>e.join(""))),St={274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},Ct={36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},Pt={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},Rt={513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"},Et={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{78:"North latitude",83:"South latitude"},GPSLongitudeRef:{69:"East longitude",87:"West longitude"}},Ot=(e,t)=>ft(e,t).bind((r=>ft(e,t+4).map((e=>r/e)))),It=(e,t)=>wt(e,t).bind((r=>wt(e,t+4).map((e=>r/e)))),Mt=(e,t,r,n)=>{const o={1:{name:"BYTE",size:1,read:ht},7:{name:"UNDEFINED",size:1,read:ht},2:{name:"ASCII",size:1,read:ht},3:{name:"SHORT",size:2,read:pt},4:{name:"LONG",size:4,read:ft},5:{name:"RATIONAL",size:8,read:Ot},9:{name:"SLONG",size:4,read:wt},10:{name:"SRATIONAL",size:8,read:It}},a=e=>t=>S.some([e,t]),i=e=>e.replace(/\0$/,"").trim();return pt(e,t).fold((()=>N.value({})),(s=>{const l={};for(let d=0;d<s;d++){const s=t+2+12*d,c=pt(e,s+0).bind((t=>pt(e,s+2).bind((l=>ft(e,s+4).bind((d=>{const c=n[t];if(void 0===c)return N.value(S.none());const u=o[l];if(void 0===u)return N.error("Tag with type number "+l+" was unrecognised.");let m=s+8;if(u.size*d>4){const t=ft(e,s+8);if(t.isError())return t.map((e=>S.none()));m=t.getOrDie()+r}return m+u.size*d>=e.length()?N.error("Invalid Exif data."):1===d&&void 0!==Et[c]?u.read(e,m).map((e=>Et[c][e])).map(a(c)):"ASCII"===u.name?xt(e,m,d).map(i).map(a(c)):1===d?u.read(e,m).map(a(c)):gt(e,m,u.size,d,u.read).map(a(c))}))))));if(c.isError())return c.map((e=>l));c.each((e=>e.each((([e,t])=>{l[e]=t}))))}return N.value(l)}))},Dt=e=>({Orientation:S.from(e.Orientation).filter(g).getOrUndefined(),ImageDescription:S.from(e.ImageDescription).filter(o).getOrUndefined(),Make:S.from(e.Make).filter(o).getOrUndefined(),Model:S.from(e.Model).filter(o).getOrUndefined(),Software:S.from(e.Software).filter(o).getOrUndefined(),ExifIFDPointer:S.from(e.ExifIFDPointer).filter(g),GPSInfoIFDPointer:S.from(e.GPSInfoIFDPointer).filter(g)}),kt=e=>({ExifVersion:(()=>{const t=e.ExifVersion;return o(t)?t:s(t)?E(t,(e=>g(e)?String.fromCharCode(e):"")).join(""):void 0})(),ColorSpace:S.from(e.ColorSpace).filter(o).getOrUndefined(),PixelXDimension:S.from(e.PixelXDimension).filter(g).getOrUndefined(),PixelYDimension:S.from(e.PixelYDimension).filter(g).getOrUndefined(),DateTimeOriginal:S.from(e.DateTimeOriginal).filter(o).getOrUndefined(),ExposureTime:S.from(e.ExposureTime).filter(g).getOrUndefined(),FNumber:S.from(e.FNumber).filter(g).getOrUndefined(),ISOSpeedRatings:S.from(e.ISOSpeedRatings).filter(g).getOrUndefined(),ShutterSpeedValue:S.from(e.ShutterSpeedValue).filter(g).getOrUndefined(),ApertureValue:S.from(e.ApertureValue).filter(g).getOrUndefined(),MeteringMode:S.from(e.MeteringMode).filter(o).getOrUndefined(),LightSource:S.from(e.LightSource).filter(o).getOrUndefined(),Flash:S.from(e.Flash).filter(o).getOrUndefined(),FocalLength:S.from(e.FocalLength).filter(g).getOrUndefined(),ExposureMode:S.from(e.ExposureMode).filter(o).getOrUndefined(),WhiteBalance:S.from(e.WhiteBalance).filter(o).getOrUndefined(),SceneCaptureType:S.from(e.SceneCaptureType).filter(o).getOrUndefined(),DigitalZoomRatio:S.from(e.DigitalZoomRatio).filter(g).getOrUndefined(),Contrast:S.from(e.Contrast).filter(o).getOrUndefined(),Saturation:S.from(e.Saturation).filter(o).getOrUndefined(),Sharpness:S.from(e.Sharpness).filter(o).getOrUndefined()}),Lt=e=>({GPSVersionID:(()=>{const t=e.GPSVersionID;return o(t)?t:s(t)?E(t,(e=>g(e)?""+e:o(e)?e:"")).join("."):void 0})(),GPSLatitudeRef:S.from(e.GPSLatitudeRef).filter(o).getOrUndefined(),GPSLatitude:S.from(e.GPSLatitude).filter(g).getOrUndefined(),GPSLongitudeRef:S.from(e.GPSLongitudeRef).filter(o).getOrUndefined(),GPSLongitude:S.from(e.GPSLongitude).filter(g).getOrUndefined()}),Ut=e=>{const t=e.JPEGInterchangeFormat;if(void 0===t)return N.error("");if(!g(t))return N.error("");const r=e.JPEGInterchangeFormatLength;return void 0===r?N.error(""):g(r)?N.value({JPEGInterchangeFormat:t,JPEGInterchangeFormatLength:r}):N.error("")},At=e=>(e=>new Promise((t=>{const r=new FileReader;r.onloadend=()=>{t(r.result)},r.readAsArrayBuffer(e)})))(e).then((t=>{try{const e=new mt(t);if(H(pt(e,0),65496)){const t=Tt(e),r=t.filter((e=>"APP1"===e.name)),n={rawHeaders:t};if(!r.length)return Promise.reject("Headers did not include required information");{const e=(e=>{const t=new mt(e),r=10,n=H(pt(t,0),65505)&&H(xt(t,4,5).map((e=>e.toUpperCase())),"EXIF\0")?(t.littleEndian=H(pt(t,r),18761),H(pt(t,12),42)?ft(t,14).map((e=>r+e)):N.error("Invalid Exif data.")):N.error("APP1 marker and EXIF marker cannot be read or not available."),o=n.bind((e=>Mt(t,e,r,St).map(Dt))),a=o.bind((e=>e.ExifIFDPointer.fold((()=>N.value(S.none())),(e=>Mt(t,r+e,r,Ct).map(kt).map(S.some))))),i=o.bind((e=>e.GPSInfoIFDPointer.fold((()=>N.value(S.none())),(e=>Mt(t,r+e,r,Pt).map(Lt).map(S.some)))));return{tiff:o,exif:a,gps:i,thumb:n.bind((e=>pt(t,e).map((t=>e+2+12*t)))).bind((e=>ft(t,e).map((e=>e+r)))).bind((e=>Mt(t,e,r,Rt).bind(Ut).map((e=>t.segment(r+e.JPEGInterchangeFormat,e.JPEGInterchangeFormatLength))).map(S.some)))}})(r[0].segment);n.tiff=e.tiff.getOrDie(),n.exif=$(e.exif.toOptional()).getOrNull(),n.gps=$(e.gps.toOptional()).getOrNull(),n.thumb=$(e.thumb.toOptional()).getOrNull()}return n}return Promise.reject("Image was not a jpeg")}catch(t){return Promise.reject(`Unsupported format or not an image: ${e.type} (Exception: ${t.message})`)}})),Tt=e=>{const t=[];let r=2;for(;r+2<=e.length();){const n=pt(e,r).toOptional().getOrNull();if(null===n)throw new Error("Invalid Exif data.");if(n>=65488&&n<=65495){r+=2;continue}if(65498===n||65497===n)break;const o=pt(e,r+2).toOptional().getOrNull();if(null===o)throw new Error("Invalid Exif data.");const a=o+2;n>=65505&&n<=65519&&t.push({hex:n,name:"APP"+(15&n),start:r,length:a,segment:e.segment(r,a)}),r+=a}return t},Ft=(e,t,r)=>{let n="string"==typeof e?parseFloat(e):e;return n>r?n=r:n<t&&(n=t),n},_t=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10],Bt=(e,t)=>{const r=[],n=new Array(25);let o;for(let a=0;a<5;a++){for(let e=0;e<5;e++)r[e]=t[e+5*a];for(let t=0;t<5;t++){o=0;for(let n=0;n<5;n++)o+=e[t+5*n]*r[n];n[t+5*a]=o}}return n},Nt=(e,t)=>(t=Ft(t,0,1),e.map(((e,r)=>(r%6==0?e=1-(1-e)*t:e*=t,Ft(e,0,1))))),zt=(e,t)=>e.toCanvas().then((r=>jt(r,e.getType(),t))),jt=(e,t,r)=>{const n=Qe(e),o=((e,t)=>{let r,n,o,a;const i=e.data,s=t[0],l=t[1],d=t[2],c=t[3],u=t[4],m=t[5],g=t[6],h=t[7],p=t[8],f=t[9],y=t[10],b=t[11],w=t[12],v=t[13],x=t[14],S=t[15],C=t[16],P=t[17],R=t[18],E=t[19];for(let e=0;e<i.length;e+=4)r=i[e],n=i[e+1],o=i[e+2],a=i[e+3],i[e]=r*s+n*l+o*d+a*c+u,i[e+1]=r*m+n*g+o*h+a*p+f,i[e+2]=r*y+n*b+o*w+a*v+x,i[e+3]=r*S+n*C+o*P+a*R+E;return e})(n.getImageData(0,0,e.width,e.height),r);return n.putImageData(o,0,0),ct(e,t)},$t=e=>(t,r)=>t.toCanvas().then((n=>((t,r,n)=>{const o=Qe(t),a=new Array(256);for(let t=0;t<a.length;t++)a[t]=e(t,n);const i=((e,t)=>{const r=e.data;for(let e=0;e<r.length;e+=4)r[e]=t[r[e]],r[e+1]=t[r[e+1]],r[e+2]=t[r[e+2]];return e})(o.getImageData(0,0,t.width,t.height),a);return o.putImageData(i,0,0),ct(t,r)})(n,t.getType(),r))),Ht=e=>(t,r)=>zt(t,e([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],r)),Gt=e=>t=>((e,t)=>e.toCanvas().then((r=>((e,t,r)=>{const n=Qe(e),o=n.getImageData(0,0,e.width,e.height);let a=n.getImageData(0,0,e.width,e.height);return a=((e,t,r)=>{const n=(e,t,r)=>(e>r?e=r:e<t&&(e=t),e),o=Math.round(Math.sqrt(r.length)),a=Math.floor(o/2),i=e.data,s=t.data,l=e.width,d=e.height;for(let e=0;e<d;e++)for(let t=0;t<l;t++){let c=0,u=0,m=0;for(let s=0;s<o;s++)for(let g=0;g<o;g++){const h=n(t+g-a,0,l-1),p=4*(n(e+s-a,0,d-1)*l+h),f=r[s*o+g];c+=i[p]*f,u+=i[p+1]*f,m+=i[p+2]*f}const g=4*(e*l+t);s[g]=n(c,0,255),s[g+1]=n(u,0,255),s[g+2]=n(m,0,255)}return t})(o,a,r),n.putImageData(a,0,0),ct(e,t)})(r,e.getType(),t))))(t,e),Vt=(Wt=[-1,0,0,0,255,0,-1,0,0,255,0,0,-1,0,255,0,0,0,1,0,0,0,0,0,1],e=>zt(e,Wt));var Wt;const Xt=Ht(((e,t)=>(t=Ft(255*t,-255,255),Bt(e,[1,0,0,0,t,0,1,0,0,t,0,0,1,0,t,0,0,0,1,0,0,0,0,0,1])))),Yt=Ht(((e,t)=>{t=Ft(t,-180,180)/180*Math.PI;const r=Math.cos(t),n=Math.sin(t),o=.213,a=.715,i=.072;return Bt(e,[o+.787*r+n*-o,a+r*-a+n*-a,i+r*-i+.928*n,0,0,o+r*-o+.143*n,a+r*(1-a)+.14*n,i+r*-i+-.283*n,0,0,o+r*-o+-.787*n,a+r*-a+n*a,i+.928*r+n*i,0,0,0,0,0,1,0,0,0,0,0,1])})),qt=Ht(((e,t)=>{const r=1+((t=Ft(t,-1,1))>0?3*t:t),n=.3086,o=.6094,a=.082;return Bt(e,[n*(1-r)+r,o*(1-r),a*(1-r),0,0,n*(1-r),o*(1-r)+r,a*(1-r),0,0,n*(1-r),o*(1-r),a*(1-r)+r,0,0,0,0,0,1,0,0,0,0,0,1])})),Kt=Ht(((e,t)=>{let r;return t=Ft(t,-1,1),(t*=100)<0?r=127+t/100*127:(r=t%1,r=0===r?_t[t]:_t[Math.floor(t)]*(1-r)+_t[Math.floor(t)+1]*r,r=127*r+127),Bt(e,[r/127,0,0,0,.5*(127-r),0,r/127,0,0,.5*(127-r),0,0,r/127,0,.5*(127-r),0,0,0,1,0,0,0,0,0,1])})),Jt=Ht(((e,t)=>(t=Ft(t,0,1),Bt(e,Nt([.33,.34,.33,0,0,.33,.34,.33,0,0,.33,.34,.33,0,0,0,0,0,1,0,0,0,0,0,1],t))))),Zt=Ht(((e,t)=>(t=Ft(t,0,1),Bt(e,Nt([.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0,0,0,0,0,1],t))))),Qt=Gt([0,-1,0,-1,5,-1,0,-1,0]),er=Gt([-2,-1,0,-1,1,1,0,1,2]),tr=$t(((e,t)=>255*Math.pow(e/255,1-t))),rr=$t(((e,t)=>255*(1-Math.exp(-e/255*t)))),nr=(e,t,r)=>{const n=tt(e),o=rt(e);let a=t/n,i=r/o,s=!1;(a<.5||a>2)&&(a=a<.5?.5:2,s=!0),(i<.5||i>2)&&(i=i<.5?.5:2,s=!0);const l=or(e,a,i);return s?l.then((e=>nr(e,t,r))):l},or=(e,t,r)=>new Promise((n=>{const o=tt(e),a=rt(e),i=Math.floor(o*t),s=Math.floor(a*r),l=Je(i,s);Qe(l).drawImage(e,0,0,o,a,0,0,i,s),n(l)})),ar=(e,t=2)=>{const r=Math.pow(10,t),n=Math.round(e*r);return Math.ceil(n/r)},ir=(e,t,r,n)=>((e,t,r,n)=>zt(e,((e,t,r,n)=>(t=Ft(t,0,2),r=Ft(r,0,2),n=Ft(n,0,2),Bt([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],[t,0,0,0,0,0,r,0,0,0,0,0,n,0,0,0,0,0,1,0,0,0,0,0,1])))(0,t,r,n)))(e,t,r,n),sr=(e,t)=>((e,t)=>e.toCanvas().then((r=>((e,t,r)=>{const n=Je(e.width,e.height),o=Qe(n);return"v"===r?(o.scale(1,-1),o.drawImage(e,0,-n.height)):(o.scale(-1,1),o.drawImage(e,-n.width,0)),ct(n,t)})(r,e.getType(),t))))(e,t),lr=(e,t,r,n,o)=>((e,t,r,n,o)=>e.toCanvas().then((a=>((e,t,r,n,o,a)=>{const i=Je(o,a);return Qe(i).drawImage(e,-r,-n),ct(i,t)})(a,e.getType(),t,r,n,o))))(e,t,r,n,o),dr=(e,t,r)=>((e,t,r)=>e.toCanvas().then((n=>nr(n,t,r).then((t=>ct(t,e.getType()))))))(e,t,r),cr=(e,t)=>((e,t)=>e.toCanvas().then((r=>((e,t,r)=>{const n=(r<0?360+r:r)*Math.PI/180,o=e.width,a=e.height,i=Math.sin(n),s=Math.cos(n),l=ar(Math.abs(o*s)+Math.abs(a*i)),d=ar(Math.abs(o*i)+Math.abs(a*s)),c=Je(l,d),u=Qe(c);return u.translate(l/2,d/2),u.rotate(n),u.drawImage(e,-o/2,-a/2),ct(c,t)})(r,e.getType(),t))))(e,t);var ur=Object.freeze({__proto__:null,brightness:(e,t)=>Xt(e,t),colorize:ir,contrast:(e,t)=>Kt(e,t),crop:lr,emboss:e=>er(e),exifRotate:e=>e.toBlob().then(At).then((t=>{switch(t.tiff.Orientation){case 6:return cr(e,90);case 3:return cr(e,180);case 8:return cr(e,270);default:return e}}),(()=>e)),exposure:(e,t)=>rr(e,t),flip:sr,gamma:(e,t)=>tr(e,t),grayscale:(e,t)=>Jt(e,t),hue:(e,t)=>Yt(e,t),invert:e=>Vt(e),resize:dr,rotate:cr,saturate:(e,t)=>qt(e,t),sepia:(e,t)=>Zt(e,t),sharpen:e=>Qt(e)});const mr=(e,t,r=!1)=>fetch(e,{credentials:r?"include":"same-origin",headers:t}).then((async e=>{const t=await e.blob();return{ok:e.ok,status:e.status,blob:t}}),(()=>({ok:!1,status:0}))),gr=[{code:404,message:"Could not find Image Proxy"},{code:403,message:"Rejected request"},{code:0,message:"Incorrect Image Proxy URL"}],hr=[{type:"not_found",message:"Failed to load image."},{type:"key_missing",message:"The request did not include an api key."},{type:"key_not_found",message:"The provided api key could not be found."},{type:"domain_not_trusted",message:"The api key is not valid for the request origins."}],pr=e=>{const t=(e=>{const t=M(gr,(t=>e===t.code)).fold(p("Unknown ImageProxy error"),(e=>e.message));return"ImageProxy HTTP error: "+t})(e);return Promise.reject(t)},fr=e=>M(hr,(t=>t.type===e)).fold(p("Unknown service error"),(e=>e.message)),yr=e=>(e=>new Promise(((t,r)=>{const n=new FileReader;n.onload=()=>{t(n.result)},n.onerror=e=>{r(e)},n.readAsText(e)})))(e).then((e=>{const t=(e=>{const t=(e=>{try{return S.some(JSON.parse(e))}catch(e){return S.none()}})(e),r=t.bind((e=>(e=>{const t=I(["error","type"],((e,t)=>u(e)?e[t]:void 0),e);return S.from(t)})(e).map(fr))).getOr("Invalid JSON in service error message");return"ImageProxy Service error: "+r})(e);return Promise.reject(t)})),br=(e,t,r=!0)=>t?((e,t)=>{const r={"Content-Type":"application/json;charset=UTF-8","tiny-api-key":t};return mr(((e,t)=>{const r=-1===e.indexOf("?")?"?":"&";return/[?&]apiKey=/.test(e)?e:e+r+"apiKey="+encodeURIComponent(t)})(e,t),r).then((e=>{return e.ok?Promise.resolve(e.blob):((e,t)=>"application/json"===(null==t?void 0:t.type)&&(400===e||403===e||404===e||500===e))(t=e.status,r=e.blob)?yr(r):pr(t);var t,r}))})(e,t):((e,t)=>mr(e,{},t).then((e=>e.ok?Promise.resolve(e.blob):pr(e.status))))(e,r),wr=e=>t=>t.options.get(e),vr=wr("editimage_toolbar"),xr=wr("editimage_cors_hosts"),Sr=wr("editimage_credentials_hosts"),Cr=wr("editimage_fetch_image"),Pr=wr("editimage_upload_timeout"),Rr=wr("images_reuse_filename"),Er=e=>{const t=e.options.get("editimage_proxy_service_url");return o(t)?t+"/2/image":e.options.get("editimage_proxy")},Or=e=>{let t,r;const n=e=>/^[0-9\.]+px$/.test(e);return t=e.style.width,r=e.style.height,t||r?n(t)&&n(r)?{w:parseInt(t,10),h:parseInt(r,10)}:null:(t=e.width,r=e.height,t&&r?{w:t,h:r}:null)},Ir=e=>({w:e.naturalWidth,h:e.naturalHeight});let Mr=0;const Dr=e=>Ye(e,"img"),kr=(e,t)=>e.dom.is(t,"figure"),Lr=(e,t)=>e.dom.is(t,"img:not([data-mce-object]):not([data-mce-placeholder])"),Ur=(e,t)=>{const r=t=>(t=>Lr(e,t.dom)&&(_r(e,t.dom)||Br(e,t.dom)||u(Er(e))))(t)?S.some(t):S.none();return kr(e,t.dom)?Dr(t).bind(r):r(t)},Ar=(e,t)=>{e.notificationManager.open({text:t,type:"error"})},Tr=e=>{const t=e.selection.getNode(),r=e.dom.getParent(t,"figure.image");return null!==r&&kr(e,r)?Dr(we(r)):Lr(e,t)?S.some(we(t)):S.none()},Fr=(e,t,r)=>{const n=/(?:\/|^)(([^\/\?]+)\.(?:[a-z0-9.]+))(?:\?|$)/i.exec(t);return u(n)?e.dom.encode(n[r]):void 0},_r=(e,t)=>{const r=t.src;return 0===r.indexOf("data:")||0===r.indexOf("blob:")||new tinymce.util.URI(r).host===e.documentBaseURI.host},Br=(e,t)=>P(xr(e),new tinymce.util.URI(t.src).host),Nr=(e,t)=>{const r=e.editorUpload.blobCache.getByUri(t.src);return r?Promise.resolve(r.blob()):((e,t)=>S.from(Cr(e)).fold((()=>((e,t)=>{var r;if(Br(e,t))return br(t.src,void 0,((e,t)=>P(Sr(e),new tinymce.util.URI(t.src).host))(e,t));if(!_r(e,t)){const n=null!==(r=Er(e))&&void 0!==r?r:"",o=n+(-1===n.indexOf("?")?"?":"&")+"url="+encodeURIComponent(t.src),a=(e=>{var t;return null!==(t=e.options.get("api_key"))&&void 0!==t?t:e.options.get("editimage_api_key")})(e);return br(o,a,!0)}return st(t)})(e,t)),(e=>e(t))))(e,t)},zr=e=>{clearTimeout(e.get())},jr=(e,t,r,n,o,a,i)=>r.toBlob().then((s=>{let l,d,c;const m=e.editorUpload.blobCache;l=a.src;const g=t.type===s.type;if(Rr(e)){const t=m.getByUri(l);u(t)?(l=t.uri(),d=t.name(),c=t.filename()):(d=Fr(e,l,2),c=Fr(e,l,1))}const h=m.create({id:"editimage"+Mr++,blob:s,base64:r.toBase64(),uri:l,name:d,filename:g?c:void 0});return m.add(h),e.undoManager.transact((()=>{const t=()=>{e.dom.unbind(a,"load",t),e.nodeChanged(),n?e.editorUpload.uploadImagesAuto():(zr(o),((e,t)=>{const r=tinymce.util.Delay.setEditorTimeout(e,(()=>{e.editorUpload.uploadImagesAuto()}),Pr(e));t.set(r)})(e,o))};e.dom.bind(a,"load",t),i&&e.dom.setAttribs(a,{width:i.w,height:i.h}),e.dom.setAttribs(a,{src:h.blobUri()}),a.removeAttribute("data-mce-src")})),h})),$r=(e,t,r,n)=>()=>{Tr(e).fold((()=>{Ar(e,"Could not find selected image")}),(o=>{e._scanForImages().then((()=>Nr(e,o.dom))).then((a=>ut(a).then(r).then((r=>jr(e,a,r,!1,t,o.dom,n))))).catch((t=>{Ar(e,t)}))}))},Hr=(e,t,r)=>()=>{const n=Tr(e).map((e=>{const t=Or(e.dom);return t?{w:t.h,h:t.w}:null})).getOrNull();return $r(e,t,(e=>cr(e,r)),n)()},Gr=(e,t,r)=>()=>$r(e,t,(e=>sr(e,r)))(),Vr={type:"panel",classes:["tox-spacer"],items:[]},Wr=(e,t,r=!1)=>({type:"button",name:e,text:t,primary:r}),Xr=(e,t,r,n=!1)=>({type:"button",name:e,icon:t,text:r,buttonType:"toolbar",enabled:!n}),Yr="undo-btn",qr="redo-btn",Kr="zoom-in-btn",Jr="zoom-out-btn",Zr="crop-btn",Qr="resize-btn",en="orientation-btn",tn="brightness-btn",rn="sharpen-btn",nn="contrast-btn",on="color-levels-btn",an="gamma-btn",sn="invert-btn",ln="flip-horizontally-btn",dn="flip-vertically-btn",cn="rotate-left-btn",un="rotate-right-btn",mn=(e,t)=>ut(e).then(t).then((e=>e.toBlob())),gn=e=>{const t=(e=>u(e.changedTouches))(e)?e.changedTouches[0]:e;return(e=>{const r={};for(let n=0,o=e.length;n<o;n++){const o=e[n];r[String(o)]=t[o]}return r})(["screenX","screenY","pageX","pageY","clientX","clientY"])};let hn=0;const pn=(e,t,r,n,o)=>{let a,i=[];const s="tox-",l=s+"crid-"+hn++,d=[{name:"move",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:"Crop Mask"},{name:"nw",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:"Top Left Crop Handle"},{name:"ne",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:"Top Right Crop Handle"},{name:"sw",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:"Bottom Left Crop Handle"},{name:"se",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:"Bottom Right Crop Handle"}],c=["top","right","bottom","left"],m=(e,t)=>({x:t.x-e.x,y:t.y-e.y,w:t.w,h:t.h}),g=(t,n,o,a)=>{const i=n.x+o*t.deltaX,s=n.y+a*t.deltaY,l=Math.max(20,n.w+o*t.deltaW),d=Math.max(20,n.h+a*t.deltaH),c=tinymce.geom.Rect;let u=e=c.clamp({x:i,y:s,w:l,h:d},r,"move"===t.name);u=m(r,u),y.dispatch("updateRect",{rect:u}),f(u)},h=e=>{const r=(e,t)=>{qe(n,"#"+l+"-"+e).each((e=>{ze(e,{left:t.x+"px",top:t.y+"px",width:Math.max(0,t.w)+"px",height:Math.max(0,t.h)+"px"})}))};O(d,(t=>{qe(n,"#"+l+"-"+t.name).each((r=>{ze(r,{left:e.w*t.xMul+e.x+"px",top:e.h*t.yMul+e.y+"px"})}))})),r("top",{x:t.x,y:t.y,w:t.w,h:e.y-t.y}),r("right",{x:e.x+e.w,y:e.y,w:t.w-e.x-e.w+t.x,h:e.h}),r("bottom",{x:t.x,y:e.y+e.h,w:t.w,h:t.h-e.y-e.h+t.y}),r("left",{x:t.x,y:e.y,w:e.x-t.x,h:e.h}),r("move",e)},p=t=>{h(e=t)},f=e=>{var t,n;p((t=r,{x:(n=e).x+t.x,y:n.y+t.y,w:n.w,h:n.h}))};(()=>{const t=be("div");Ae(t,{id:l,class:s+"croprect-container",role:"grid","aria-dropeffect":"execute"}),ke(n,t),O(c,(e=>{qe(n,"#"+l).each((t=>{const r=be("div");Ae(r,{id:l+"-"+e,class:s+"croprect-block","data-mce-bogus":"all"}),ke(t,r)}))})),O(d,(e=>{qe(n,"#"+l).each((t=>{const r=be("div");var n,o;Ae(r,{id:l+"-"+e.name,"aria-label":e.label,"aria-grabbed":"false","data-mce-bogus":"all",role:"gridcell",tabindex:"-1",title:e.label}),n=r,o=[s+"croprect-handle",s+"croprect-handle-"+e.name],O(o,(e=>{Ke(n,e)})),ke(t,r)}))})),a=E(d,(t=>{let r;return((e,t)=>{var r,n,o;let a,i=[],s=[];const l=null!==(r=t.document)&&void 0!==r?r:document,d=null!==(n=t.root)&&void 0!==n?n:l,c=we(l);let m,g,h;const p=we(d.getElementById(null!==(o=t.handle)&&void 0!==o?o:e)),f=e=>{const r=e.raw,n=(e=>{const t=Math.max,r=e.documentElement,n=e.body,o=t(r.scrollWidth,n.scrollWidth),a=t(r.clientWidth,n.clientWidth),i=t(r.offsetWidth,n.offsetWidth),s=t(r.scrollHeight,n.scrollHeight),l=t(r.clientHeight,n.clientHeight);return{width:o<i?a:o,height:s<t(r.offsetHeight,n.offsetHeight)?l:s}})(l),o=gn(r);e.prevent(),m=r.button,g=o.screenX,h=o.screenY;const i=je(p,"cursor");a=be("div",l),ze(a,{position:"absolute",top:"0",left:"0",width:n.width+"px",height:n.height+"px","z-index":"2147483647",opacity:"0.0001",cursor:i}),ke((e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return we(t)})(c),a),s.push(De(c,"mousemove",y),De(c,"touchmove",y),De(c,"mouseup",b),De(c,"touchend",b)),t.start(r,o)},y=e=>{const r=e.raw,n=gn(r);if(r.button!==m)return b(e);const o={...n,deltaX:n.screenX-g,deltaY:n.screenY-h};e.prevent(),t.drag(r,o)},b=e=>{const r=gn(e.raw);O(s,(e=>e.unbind())),s=[],u(a)&&Fe(a),t.stop&&t.stop(e.raw,r)};return i.push(De(p,"mousedown",f),De(p,"touchstart",f)),{destroy:()=>{O(s.concat(i),(e=>e.unbind())),s=[],i=[],u(a)&&Fe(a)}}})(l,{document:n.dom.ownerDocument,root:Re(n).dom,handle:l+"-"+t.name,start:()=>{r=e},drag:(e,n)=>{g(t,r,n.deltaX,n.deltaY)}})})),h(e);const r=e=>{Ue(e.target,"aria-grabbed","focus"===e.raw.type?"true":"false")};i.push(De(n,"focusin",r),De(n,"focusout",r),De(n,"keydown",(t=>{const r=Se(t.target)?Te(t.target,"id"):void 0;M(d,(e=>r===l+"-"+e.name)).each((r=>{const n=(e,t,n,o)=>{e.kill(),g(r,t,n,o)},o=tinymce.util.VK;switch(t.raw.keyCode){case o.LEFT:n(t,e,-10,0);break;case o.RIGHT:n(t,e,10,0);break;case o.UP:n(t,e,0,-10);break;case o.DOWN:n(t,e,0,10);break;case o.ENTER:case o.SPACEBAR:t.prevent()}}))})))})();const y={...tinymce.util.Observable,setClampRect:t=>{r=t,h(e)},setRect:p,getInnerRect:()=>m(r,e),setInnerRect:f,setViewPortRect:r=>{t=r,h(e)},destroy:()=>{O(a,(e=>e.destroy())),a=[],O(i,(e=>e.unbind())),i=[]}};return y},fn=e=>[Wr("back","Back"),...e,Wr("apply","Apply",!0)],yn=()=>fn([Vr]),bn=(e,t)=>r=>mn(r.blob,(r=>e(r,t))),wn=e=>(t,r)=>mn(t.blob,(t=>ur[e](t,r[e]/100))),vn=e=>t=>mn(t.blob,(t=>ur[e](t))),xn=e=>{const t={x:0,y:0,w:0,h:0},r=(()=>{const e=G((e=>e.destroy()));return{...e,run:t=>e.get().each(t)}})(),n=F(t),o=()=>ve(".tox .tox-imagepreview",e).getOrDie("cannot find preview panel"),a=e=>{r.run((t=>{const r=o(),a=ve(".tox-imagepreview__container",r).getOrDie("cannot find preview container"),i=Xe(r),s=Ve(r),l=Xe(a),d=Ve(a),c=Math.max(0,i/2-l/2),u=Math.max(0,s/2-d/2),m=n.get();t.setRect({x:m.x*e+c,y:m.y*e+u,w:m.w*e,h:m.h*e}),t.setClampRect({x:c,y:u,w:l,h:d}),t.setViewPortRect({x:0,y:0,w:i,h:s})}))};return{barComponents:yn(),renderFinal:e=>{const o=n.get();return r.clear(),n.set(t),mn(e.blob,(e=>lr(e,o.x,o.y,o.w,o.h)))},onZoom:e=>{var t;a(null!==(t=e.getData().imagepreview.zoom)&&void 0!==t?t:1)},onOpen:t=>{const i=ve(".tox .tox-imagepreview .tox-imagepreview__container img",e).getOrDie("cannot find preview image");_e(i).then((()=>{const e=()=>{var e;return a(null!==(e=t.getData().imagepreview.zoom)&&void 0!==e?e:1)},s={x:0,y:0,w:i.dom.naturalWidth,h:i.dom.naturalHeight},l=(e=>tinymce.geom.Rect.inflate(e,-20,-20))(s);n.set(l);const d=pn(l,s,s,o());r.set(d),e(),d.on("updateRect",(r=>{var o;const a=r.rect,i=null!==(o=t.getData().imagepreview.zoom)&&void 0!==o?o:1,s={x:Math.round(a.x/i),y:Math.round(a.y/i),w:Math.round(a.w/i),h:Math.round(a.h/i)};n.set(s),e()}))}))}}},Sn=e=>it(e).then((t=>{const r=t.src;return{blob:e,url:r,width:t.naturalWidth,height:t.naturalHeight}})),Cn=(e,t,r)=>({type:"panel",classes:["tox-image-tools"],items:[{type:"bar",items:e},{type:"imagepreview",name:"imagepreview"},{type:"bar",items:[Xr(Yr,"undo","Undo",t),Xr(qr,"redo","Redo",r),Xr(Kr,"zoom-in","Zoom in"),Xr(Jr,"zoom-out","Zoom out")]}]}),Pn=(e,t)=>{var r;const n=null!==(r=e.getData().imagepreview.zoom)&&void 0!==r?r:1,o=0===t?Math.min(2,n+.1):Math.max(.1,n-.1);e.setData({imagepreview:{zoom:o}})},Rn=(e,t,r,n)=>{const o=o=>{((e,t,r,n,o)=>{it(o).then((e=>{const t=Ir(e);return n.w===t.w&&n.h===t.h||Or(r)&&((e,t)=>{let r,n;t&&(r=e.style.width,n=e.style.height,(r||n)&&(e.style.width=t.w+"px",e.style.height=t.h+"px",e.removeAttribute("data-mce-style")),r=e.width,n=e.height,(r||n)&&(e.setAttribute("width",String(t.w)),e.setAttribute("height",String(t.h))))})(r,t),URL.revokeObjectURL(e.src),o})).then(ut).then((n=>jr(e,o,n,!0,t,r)))})(e,t,r.dom,n,o)},a=Re(we(e.getContainer()));Nr(e,r.dom).then((t=>{const r=(e=>{const t=F(e),r=V(),n=(()=>{const e=[];let t=-1;const r=()=>t>0,n=()=>-1!==t&&t<e.length-1;return{data:e,add:r=>{const n=e.splice(++t);return e.push(r),{state:r,removed:n}},undo:()=>e[r()?--t:t],redo:()=>e[n()?++t:t],canUndo:r,canRedo:n}})();n.add(e);const o=e=>{t.set(e);const r=n.add(e).removed;s(r)},a=()=>r.get().getOrThunk(t.get),i=e=>URL.revokeObjectURL(e.url),s=e=>O(e,i),l=()=>{r.on(i),r.clear()};return{getState:()=>t.get(),addState:e=>Sn(e).then(o),destroyState:()=>{l(),s(n.data)},getTempState:a,setTempState:e=>Sn(e).then((e=>{l(),r.set(e)})),applyTempState:()=>r.get().each((e=>{o(e),r.clear()})),destroyTempState:l,undo:()=>{const e=n.undo();t.set(e)},redo:()=>{const e=n.redo();t.set(e)},canRedo:n.canRedo,canUndo:n.canUndo,dialogData:(e=!1)=>{const t=a();return{imagepreview:{...e?{cachedWidth:t.width,cachedHeight:t.height}:{},url:t.url},size:{width:String(t.width),height:String(t.height)}}}}})({blob:t,url:URL.createObjectURL(t),width:n.w,height:n.h}),i=e.windowManager.open(((e,t,r)=>{const n=e=>{const r=e.getData().imagepreview;return z({imagepreview:r},t.dialogData())},o=(e,r,n)=>e(n,r.getData()).then(t.setTempState).then((()=>{r.setData(t.dialogData())})),a=e=>{e.setEnabled(Yr,t.canUndo()),e.setEnabled(qr,t.canRedo())},i=({ui:e,existingApi:r,overrides:a,actions:i})=>r.redial({...p(),initialData:n(r),body:Cn(e.barComponents,!0,!0),onAction:(e,r)=>{!d(i)&&T(i,r.name)?o(i[r.name],e,t.getTempState()):("apply"===r.name&&t.applyTempState(),g.onAction(e,r))},...a}),s=e=>r=>{o(e.renderInitial,r,t.getState()).then((()=>i({ui:e,existingApi:r})))},l=e=>r=>i({ui:e,existingApi:r,overrides:{onChange:r=>{o(e.renderChange,r,t.getState())}}}),c=e=>r=>{i({ui:e,existingApi:r,overrides:{onAction:(r,n)=>{switch("apply"===n.name?e.renderFinal(t.getState(),r.getData()).then(t.addState).then((()=>{r.setData(t.dialogData()),g.onAction(r,n)})):g.onAction(r,n),n.name){case Kr:case Jr:e.onZoom(r)}}}}),e.onOpen(r)},u={[Zr]:c(xn(e)),[Qr]:c({barComponents:fn([Vr,{type:"sizeinput",name:"size"},Vr]),onOpen:h,onZoom:h,renderFinal:(e,t)=>{const r=t.size;return mn(e.blob,(e=>dr(e,parseInt(r.width,10),parseInt(r.height,10))))}}),[en]:(m={barComponents:fn([Vr,Xr(ln,"flip-horizontally","Flip horizontally"),Xr(dn,"flip-vertically","Flip vertically"),Xr(cn,"rotate-left","Rotate counterclockwise"),Xr(un,"rotate-right","Rotate clockwise"),Vr]),actions:{[ln]:bn(sr,"h"),[dn]:bn(sr,"v"),[cn]:bn(cr,-90),[un]:bn(cr,90)}},e=>i({ui:m,existingApi:e,actions:m.actions})),[tn]:l({barComponents:fn([{type:"slider",name:"brightness",label:"Brightness",min:-100,max:100}]),renderChange:wn("brightness")}),[rn]:s({barComponents:yn(),renderInitial:vn("sharpen")}),[nn]:l({barComponents:fn([{type:"slider",name:"contrast",label:"Contrast",min:-100,max:100}]),renderChange:wn("contrast")}),[on]:l({barComponents:fn([{type:"slider",name:"color-red",label:"R",min:0,max:200},{type:"slider",name:"color-green",label:"G",min:0,max:200},{type:"slider",name:"color-blue",label:"B",min:0,max:200}]),renderChange:(e,t)=>{const r=t["color-red"]/100,n=t["color-green"]/100,o=t["color-blue"]/100;return mn(e.blob,(e=>ir(e,r,n,o)))}}),[an]:l({barComponents:fn([{type:"slider",name:"gamma",label:"Gamma",min:-100,max:100}]),renderChange:wn("gamma")}),[sn]:s({barComponents:yn(),renderInitial:vn("invert")})};var m;const g={onSubmit:e=>{const n=t.getState().blob;r(n),e.close()},onClose:t.destroyState,onAction:(e,r)=>{const o=u[r.name];if(d(o))switch(r.name){case"apply":case"back":t.destroyTempState(),e.redial({...p(),initialData:n(e)});break;case Yr:t.undo(),e.setData(t.dialogData()),a(e);break;case qr:t.redo(),e.setData(t.dialogData()),a(e);break;case Kr:Pn(e,0);break;case Jr:Pn(e,1)}else o(e)}},p=()=>({...g,title:"Edit Image",size:"large",body:Cn([Xr(Zr,"crop","Crop"),Xr(Qr,"resize","Resize"),Xr(en,"orientation","Orientation"),Xr(tn,"brightness","Brightness"),Xr(rn,"sharpen","Sharpen"),Xr(nn,"contrast","Contrast"),Xr(on,"color-levels","Color levels"),Xr(an,"gamma","Gamma"),Xr(sn,"invert","Invert")],!t.canUndo(),!t.canRedo()),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",enabled:t.canUndo(),primary:!0}]});return{...p(),initialData:t.dialogData(!0)}})(a,r,o));i.setEnabled("save",!1)}))},En=(e,t)=>()=>{Tr(e).bind((t=>Ur(e,t))).each((r=>{Rn(e,t,r,Ir(r.dom))}))},On=(e,t)=>{const r=V();e.on("NodeChange",(n=>{const o=r.get(),a=Ur(e,we(n.element));o.isSome()&&!((e,t,r=y)=>{return(n=e,o=t,a=r,n.isSome()&&o.isSome()?S.some(a(n.getOrDie(),o.getOrDie())):S.none()).getOr(e.isNone()&&t.isNone());var n,o,a})(a,o,((e,t)=>e.dom.src===t.dom.src))?(zr(t),e.editorUpload.uploadImagesAuto(),r.clear()):a.each(r.set)}))};((e,t)=>{const{i18n:r=!0}=t;r&&tinymce.PluginManager.requireLangPack(e,"ar,bg-BG,ca,cs,da,de,el,es,eu,fa,fi,fr-FR,he-IL,hi,hr,hu-HU,id,it,ja,kk,ko-KR,ms,nb-NO,nl,pl,pt-BR,pt-PT,ro,ru,sk,sl-SI,sv-SE,th-TH,tr,uk,vi,zh-CN,zh-TW"),tinymce.PluginManager.add(e,fe(e,t))})("editimage",{setup:e=>{(e=>{const t=e.options.register;t("editimage_toolbar",{processor:"string",default:"rotateleft rotateright flipv fliph editimage imageoptions"}),t("editimage_proxy",{processor:"string"}),t("editimage_proxy_service_url",{processor:"string"}),t("editimage_cors_hosts",{processor:"string[]",default:[]}),t("editimage_credentials_hosts",{processor:"string[]",default:[]}),t("editimage_fetch_image",{processor:"function"}),t("editimage_api_key",{processor:"string"}),t("editimage_upload_timeout",{processor:"number",default:3e4})})(e);const t=F(0);((e,t)=>{const r=t=>()=>{e.mode.isReadOnly()||t()};L({mceImageRotateLeft:r(Hr(e,t,-90)),mceImageRotateRight:r(Hr(e,t,90)),mceImageFlipVertical:r(Gr(e,t,"v")),mceImageFlipHorizontal:r(Gr(e,t,"h")),mceEditImage:En(e,t)},((t,r)=>{e.addCommand(r,t)}))})(e,t),(e=>{let t=[];const r=t=>()=>e.execCommand(t),n=()=>Tr(e).exists((t=>Ur(e,t).isSome())),o=e=>{const r=t=>e.setEnabled(t);return r(n()),t=t.concat([r]),()=>{t=(e=>{const t=[];for(let n=0,o=e.length;n<o;n++){const o=e[n];o!==r&&t.push(o)}return t})(t)}};e.on("NodeChange",(()=>{const r=n()&&!e.mode.isReadOnly();O(t,(e=>e(r)))})),e.ui.registry.addButton("rotateleft",{tooltip:"Rotate counterclockwise",icon:"rotate-left",onAction:r("mceImageRotateLeft"),onSetup:o}),e.ui.registry.addButton("rotateright",{tooltip:"Rotate clockwise",icon:"rotate-right",onAction:r("mceImageRotateRight"),onSetup:o}),e.ui.registry.addButton("flipv",{tooltip:"Flip vertically",icon:"flip-vertically",onAction:r("mceImageFlipVertical"),onSetup:o}),e.ui.registry.addButton("fliph",{tooltip:"Flip horizontally",icon:"flip-horizontally",onAction:r("mceImageFlipHorizontal"),onSetup:o}),e.ui.registry.addButton("editimage",{tooltip:"Edit image",icon:"edit-image",onAction:r("mceEditImage"),onSetup:o}),e.ui.registry.addButton("imageoptions",{tooltip:"Image options",icon:"image",onAction:r("mceImage")}),e.ui.registry.addContextMenu("editimage",{update:t=>e.selection.isEditable()?Ur(e,we(t)).map((e=>({text:"Edit image",icon:"edit-image",onAction:r("mceEditImage")}))).toArray():[]})})(e),(e=>{e.ui.registry.addContextToolbar("editimage",{items:vr(e),predicate:t=>e.selection.isEditable()&&Ur(e,we(t)).isSome(),position:"node",scope:"node"})})(e),On(e,t)}})}(); |