{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/pagebreak/plugin.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/tinymce/plugins/searchreplace/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/plugins/preview/plugin.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/models/dom/model.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/@realsoft/platon-core/src/components/form/controls/TinyMCE.vue?dcd1","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/Utils.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/ScriptLoader.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/EditorPropTypes.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/Editor.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/index.js","webpack:///node_modules/@realsoft/platon-core/src/components/form/controls/TinyMCE.vue","webpack:///./node_modules/@realsoft/platon-core/src/components/form/controls/TinyMCE.vue?5215","webpack:///./node_modules/@realsoft/platon-core/src/components/form/controls/TinyMCE.vue","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/TinyMCE.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/@realsoft/platon-core/src/components/form/controls/tinymce/editimage.plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/plugins/pagebreak/index.js","webpack:///./node_modules/tinymce/icons/default/index.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js","webpack:///./node_modules/tinymce/plugins/fullscreen/plugin.js","webpack:///./node_modules/tinymce/icons/default/icons.js"],"names":["getPrototypeOf$1","Object","getPrototypeOf","hasProto","v","constructor","predicate","_a","prototype","name","typeOf","x","t","Array","isArray","String","o","proto","isPrototypeOf","isType$1","type","value","isSimpleType","eq$1","a","is$2","isObject","isString","isPlainObject","isNull","isBoolean","isUndefined","undefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","i","len","length","noop","noarg","f","compose","fa","fb","args","apply","compose1","fbc","fab","constant$1","identity","tripleEquals","b","curry","fn","initialArgs","restArgs","all","concat","not","die","msg","Error","never","always","global$a","tinymce","util","Tools","resolve","Optional","tag","this","singletonNone","onNone","onSome","mapper","some","none","binder","replacement","thunk","message","worker","nativeSlice","slice","nativeIndexOf","indexOf","nativePush","push","rawIndexOf","ts","call","xs","r","contains$2","exists","range$2","num","chunk$1","array","size","s","map$2","each$1","eachr","partition$3","pass","fail","arr","filter$2","foldr","acc","foldl","findUntil","until","find$5","findIndex$1","flatten","bind$3","forall","reverse","difference","a1","a2","mapToObject","pure$2","sort","comparator","copy","get$h","head","last$1","from","findMap","isSome","keys","hasOwnProperty","each","obj","props","k","map$1","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","bifilter","filter$1","mapToArray","find$4","values","get$g","key","has$2","hasNonNullableKey","is$1","lhs","rhs","left","equals","lift2","getOr","isNone","cat","sequence","getOrDie","oa","ob","lift3","oc","mapFrom","someIf","addToEnd","str","suffix","removeFromStart","numChars","substring","checkRange","substr","start","removeLeading","prefix","startsWith","ensureTrailing","endsWith","contains$1","end","idx","blank","replace","trim$1","isNotEmpty","isEmpty","isSupported$1","dom","style","getPropertyValue","fromHtml$2","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","console","error","fromDom","fromTag","node","fromText","text","createTextNode","fromPoint","docElm","y","elementFromPoint","map","SugarElement","fromHtml","Global","window","Function","path$1","parts","p","split","unsafe","getOrDie$1","actual","sandHTMLElement","test","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","name$3","element","nodeName","toLowerCase","type$1","nodeType","isType","isHTMLElement","isElement$1","isText","isDocument","isDocumentFragment","isTag","e","is","selector","elem","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","all$3","base","querySelectorAll","one","querySelector","eq","e1","e2","contains","d1","d2","owner$4","ownerDocument","documentOrOwner","dos","documentElement","defaultView","parent","parentNode","parentElement","offsetParent","nextSibling","children","child$2","index","cs","firstChild","spot","offset","leaf","isShadowRoot","host","supported","Element","attachShadow","Node","getRootNode","isSupported","getContentContainer","body","isInShadowRoot","getShadowRoot","getShadowHost","getOriginalEventTarget","event","target","el","isOpenShadowHost","composed","composedPath","shadowRoot","inBody","fold","getBody","rawSet","setAttribute","set$9","setAll$1","attrs","get$f","getAttribute","getOpt","has$1","hasAttribute","remove$7","removeAttribute","clone$1","attributes","attr","internalSet","property","setProperty","internalRemove","removeProperty","set$8","setAll","css","setOptions","get$e","styles","getComputedStyle","getUnsafeProperty","getRaw","raw","filter","getAllRaw","ruleName","item","isValidValue","remove$6","reflow","offsetWidth","Dimension","getOffset","set","h","match","get","parseFloat","getOuter","aggregate","properties","val","parseInt","isNaN","max","cumulativeInclusions","absoluteMax","api$2","getBoundingClientRect","height","offsetHeight","get$d","getOuter$2","setMax$1","inclusions","absMax","r$1","top","translate","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute$3","win","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport$1","api$1","set$7","get$c","getOuter$1","setMax","cached","called","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiOS","isiPhone","isMobile","isAndroid","isTouch","isTablet","isPhone","iOSwebview","isSafari","isDesktop","isWebView","firstMatch","regexes","find$3","agent","major","minor","group","Number","nu$d","detect$4","versionRegexes","cleanedAgent","unknown$3","Version","nu","detect","unknown","detectBrowser$1","browsers","userAgentData","brands","uaBrand","lcBrand","brand","info","current","version","detect$3","candidates","candidate","search","detectBrowser","detectOs","oses","normalVersionRegex","checkContains","uastring","PlatformInfo","edge","chromium","ie","opera","firefox","safari","unknown$2","nu$c","isBrowser","isEdge","isChromium","isIE","isOpera","isFirefox","Browser","windows","ios","android","linux","macos","solaris","freebsd","chromeos","unknown$1","nu$b","isOS","isWindows","isMacOS","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","detect$2","userAgentDataOpt","bind","orThunk","deviceType","PlatformDetection","query","matchMedia","platform","navigator","detect$1","mkEvent","stop","prevent","kill","fromRawEvent$1","rawEvent","stopPropagation","preventDefault","clientX","clientY","handle","handler","useCapture","wrapped","addEventListener","unbind","bind$2","capture$1","removeEventListener","before$1","marker","parent$1","insertBefore","after$2","sibling","append$2","prepend$1","firstChild$1","appendChild","appendAt","append$1","elements","empty","textContent","rogue","remove$5","removeChild","get$b","_DOC","to","scrollTo","get$a","_win","visualViewport","bounds$1","width","right","bottom","getBounds$3","scroll","clientWidth","clientHeight","Math","pageLeft","pageTop","getDocument","walkUp","navigation","frame","view","owner","rest","pathTo","d","paths","frameElement","owner$3","Navigation","freeze","__proto__","find$2","path","frames","loc","pointed","point","rect","bounds","box$1","xy","w","absolute$2","position","value$4","applyHelper","constHelper","outputHelper","output","inner","_onError","onValue","isValue","isError","Result","mapError","or","getOrThunk","toOptional","error$1","onError","_onValue","fromOption","optional","err","SimpleResultType","fold$1","res","stype","serror","svalue","partition$2","results","errors","Value","bind$1","bindError","toResult$1","fromResult$1","SimpleResult","fromResult","toResult","partition","field$2","newKey","presence","prop","customField$1","instantiator","ifField","ifCustom","shallow$1","old","deep","bothObjects","deepMerge","baseMerge","merger","objects","ret","j","curObject","merge$1","required$2","process","defaultedThunk","fallbackThunk","defaulted$1","fallback","asOption","mergeWithThunk","baseThunk","mergeWith","mergeValues$1","mergeErrors$1","consolidateObj","consolidateArr","partitions","ResultCombine","formatObj","input","JSON","stringify","formatErrors","es","getErrorInfo","join","nu$a","missingRequired","missingKey","missingBranch","branches","branch","unsupportedFields","unsupported","custom","value$3","validator","extract","toString","anyValue$1","requiredAccess","bundle","fallbackAccess","optionAccess","optionDefaultedAccess","opt","extractField","field","av","bundleAsOption","optValue","ov","result","extractFields","fields","success","valueThunk","getDelegate","getSetKeys","objOfOnly","delegate","objOf","fieldNames","extra","fieldStrings","_okey","_presence","_instantiator","arrOf","oneOf","rawF","setOf$1","validateKeys","keys$1","validatedKeys","validKeys","schema","vk","_desc","processor","getP","arrOfObj","anyValue","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","isPostMessageable","every","postMessageable","chooseFrom","ch","vp","choose$2","choice","chosen","arrOfVal","valueOf","setOf","extractValue","label","errs","asRaw","extraction","errInfo","formatError","asRawOrDie$1","choose$1","thunkOf","desc","field$1","customField","validateEnum","required$1","requiredOf","requiredNumber","requiredString","requiredStringEnum","requiredBoolean","requiredFunction","forbid","_v","requiredObjOf","objSchema","requiredArrayOfObj","objFields","requiredArrayOf","option$3","optionOf","optionNumber","optionString","optionStringEnum","optionFunction","optionArrayOf","optionObjOf","optionObjOfOnly","defaulted","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedPostMsg","defaultedArrayOf","defaultedObjOf","Cell","initial","generate$7","cases","constructors","adt","acase","count","argLength","branchKeys","allReqd","reqKey","foldArgs","log","params","Adt","generate","bothErrors","firstError","secondError","bothValues","partition$1","exclude$1","wrap$2","wrapAll$1","keyvalues","kv","exclude","wrap$1","wrapAll","mergeValues","mergeErrors","consolidate","objs","ensureIsRoot","isRoot","ancestor$2","transform","transformed","closest$4","isSource","component","simulatedEvent","defaultEventHandler","can","abort","run","nu$9","all$2","handlers","any","read$2","fuse$1","constant","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitioncancel","transitionend","transitionstart","selectstart","prefixName","alloy","tap","focus$4","postBlur","postPaste","receive","execute$5","focusItem","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","changeTab","dismissTab","highlight$1","dehighlight$1","emit","dispatchWith","emitWith","emitExecute","dispatch","data","getSystem","triggerEvent","retargetAndDispatchWith","eventName","dispatchEvent","derive$2","configs","run$1","runActionExtra","action","runOnName","runOnSourceName","redirectToUid","uid","getByUid","redirectee","redirectToPart","detail","partName","partUids","runWithTarget","ev","getByDom","closest","cutter","cut","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute$1","fromHtml$1","get$9","set$6","content","docDom","fragment","createDocumentFragment","contentElements","container","clone","cloneNode","original","isDeep","shallow","getHtml","isRecursive","originator","events$i","warn","DefaultEvents","events","unique","generate$6","date","Date","time","getTime","random","floor","prefix$1","idAttr$1","idAttr","write","id","writeOnly","defineProperty","writable","read$1","generate$5","make$8","NoContextApi","getComp","getMessage","debugInfo","triggerFocus","triggerEscape","broadcast","broadcastOn","broadcastEvent","build","buildOrPatch","addToWorld","removeFromWorld","addToGui","removeFromGui","isConnected","singleton$1","markAsBehaviourApi","apiName","apiFunction","endIndex","openBracketIndex","parameters","toFunctionAnnotation","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","premadeTag","premade$1","comp","isPremade","getPremade","spec","makeApi","getApis","NoState","init","nu$8","readState","generateFrom$1","validated","behaviours","list","optBlobThunk","blob","config","state","getBehaviours$3","bData","getData$2","byInnerKey","indexKey","chain","nu$7","classes","merge","defnA","mod","combine$2","baseMod","modsByBehaviour","behaviour","exhibit","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","sorted","aKey","bKey","aIndex","bIndex","uncurried","purpose","curried","cHandler","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","tuples","c","fuse","sortedTuples","combined","assembled","baseBehaviour","schema$z","toInfo","toDefinition","domChildren","components","toModification","domModification","toEvents","read","add$4","remove$4","supports","classList","get$8","add$3","clazz","remove$3","add$2","add","cleanClass","remove$2","remove","has","add$1","remove$1","hasAll","getNative","get$7","get$6","set$5","determineObsoleted","oldObsoleted","newObsoleted","newObs","elemChanged","oldTag","ensureInDom","child","obsoleted","obs","patchChildrenWith","builtChildren","currentChildren","patchSpecChild","childComp","patchSpecChildren","specs","patchDomChildren","nodes","optObsoleted","diffKeyValueSet","newObj","oldObj","newKeys","oldKeys","toRemove","toSet","reconcileToDom","definition","class","existingAttributes","attrsToSet","attrsToRemove","updateAttrs","existingStyles","stylesToSet","stylesToRemove","updateStyles","existingClasses","classesToRemove","classesToAdd","updateClasses","updateHtml","updateChildren","updateValue","valueElement","getOrUndefined","innerHtml","introduceToDom","subject","attemptPatch","hasMixedChildren","renderToDom","canBePatched","getBehaviours$2","me","generateFrom","generate$4","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","build$2","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","children$1","subs","hasConfigured","apis","behaviourName","buildSubcomponents","build$1","buildFromSpec","userSpec","specEvents","completeSpec","text$1","external$1","extSpec","uids","isSketchSpec$1","userSpecWithUid","premade","ClosestOrAncestor","ancestor","ancestor$1","closest$3","child$1","descendant$1","descend","closest$2","descendant","closest$1","attribute","find$1","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf$1","EventConfiguration","eventConfig","makeEventLogger","initialTarget","startTime","logEventCut","_name","outcome","logEventStopped","logNoParent","logEventNoHandlers","logEventResponse","finishTime","processEvent","status","patterns","NORMAL","noLogger","LOGGING","logger","STOP","getTrace","stack","lines","line","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema$3","_initSize","itemMarkers","tieredMenuMarkers","markers$1","required","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","output$1","snapshot","initSize","nu$6","bubble","direction","placement","boundsRestriction","labelPrefix","alwaysFit","restriction","adt$a","southeast","southwest","northeast","northwest","south","north","east","west","cata$2","cataVertical","middle","cataHorizontal","southeast$3","southwest$3","northeast$3","northwest$3","south$3","north$3","east$3","west$3","cycleBy","delta","min","clamp","getRestriction","anchor","restrictions","dir","adjustBounds","bubbleOffset","applyRestriction","pos","isVerticalAxis","newPos","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","labelPrefix$2","eastX$1","middleX$1","westX$1","northY$2","southY$2","centreY$1","eastEdgeX$1","westEdgeX$1","southeast$2","bubbles","southwest$2","northeast$2","northwest$2","north$2","south$2","east$2","west$2","all$1","allRtl$1","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","chooseChannels","channels","universal","events$h","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","executeEvent","bConfig","bState","executor","loadEvent","_simulatedEvent","create$4","active","configSchema","schemaSchema","doCreate","createModes$1","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","wrappedExtra","extraF","revoke","prepared","configAsRaw","initialConfig","behaviourInfo","exhibitor","derive$1","capabilities","simpleSchema","create$3","modeSchema","createModes","branchKey","Receiving","exhibit$6","posConfig","useFixed","ActivePosition","focus$3","focus","blur$1","blur","hasFocus","root","activeElement","active$1","preserve$1","refocus","focused","oldFocus","newFocus","NuPositionCss","toPx","toOptions","applyPositionCss","adt$9","relative","fixed","positionWithDirection","posName","decision","decisionRect","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","reposition","origin","toBox","rel","viewport","getBounds","translate$2","removeScroll","outerScroll","cata$1","onRelative","onFixed","relative$1","fixed$1","anchorBox","placementAttribute","setPlacement$1","getPlacement","reset$2","adt$8","fit","nofit","determinePosition","boundsX","boundsY","boundsRight","boundsBottom","xInBounds","yInBounds","originInBounds","rightInBounds","bottomInBounds","sizeInBounds","visibleW","visibleH","calcReposition","maxX","maxY","restrictedX","restrictedY","restrictedWidth","restrictedHeight","calcMaxSizes","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","maxWidth","attempt","adjustedBounds","newX","newY","fits","fittedBox","isPartlyVisible","on","classesOn","off","classesOff","layout","testY","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","isVisible","next","attemptLayout","newReposition","newVisibleW","newVisibleH","newIsVisible","improved","abc","bestNext","singleton","doRevoke","clear","isSet","destroyable","destroy","unbindable","value$2","capture","fromRawEvent","timerAttr","isTransitioning$1","transition","shouldApplyTransitionCss","lastPlacement","placer","mode","hasChanges","intermediate","round","toFixed","newValue","getTransitionDuration","times","parse","delay","duration","dur","setupTransitionListeners","transitionEnd","transitionCancel","timer","isSourceTransition","pseudoElement","propertyName","transitionDone","clearTimeout","transitionStart","requestAnimationFrame","setTimeout","startTransitioning","timerId","applyTransitionCss","shouldTransition","intermediatePosition","intermediateCssOptions","elementSize","options","preference","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","position$2","positionCss","setPlacement","setMaxHeight","anchored","available","expandable$1","defaultOr","dephault","simple","layouts","overrideOptions","go","allAlignments","nu$5","xOffset","yOffset","insetModifier","insetXOffset","insetYOffset","getClasses","make","xDelta","yDelta","alignmentsOn","alignmentsOff","insetNortheast","insetNorthwest","insetNorth","insetSoutheast","insetSouthwest","insetSouth","insetEast","insetWest","nu$4","onDirection","isLtr","isRtl","getDirection","AttributeValue","Attribute","isBottomToTopDir","BottomToTop","schema$y","get$5","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","onLtr","customRtl","onRtl","ltr","onBottomLtr","rtl","onBottomRtl","placement$4","anchorInfo","hotspot","overrides","HotspotAnchor","placement$3","MakeshiftAnchor","adt$7","screen","absolute","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$1","hasSameOwner","frameOwner","compOwner","getRootPoint","getBox","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","placement$2","nodeBox","NodeAnchor","zeroWidth","nbsp","create$2","soffset","finish","foffset","SimRange","create","adt$6","before","after","cata","onBefore","onOn","onAfter","getStart$1","situ","on$1","after$1","Situ","getStart","adt$5","domRange","exact","exactFromRange","simRange","selection","rng","startContainer","startSitu","_finishSitu","_soffset","_finish","_foffset","getWin","range$1","SimSelection","range","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","finishSitu","createRange","exactToNative","toRect","getFirstRect$1","rects","getClientRects","getBounds$2","adt$4","fromRange","startOffset","endContainer","endOffset","getRanges","doDiagnose","ranges","collapsed","reversed","rev","diagnose","asLtrRange","diagnosis","descendants","makeRange","same","getNativeSelection","getSelection","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","getExact","sel","getFirstRect","getBounds$1","NodeValue","getOption","nodeValue","api","get$4","descendOnce$1","last","descendOnce","getAnchorSelection","modStart","modFinish","placement$1","selectionBox","optRect","rawRect","targetElement","SelectionAnchor","labelPrefix$1","eastX","westX","northY$1","southY$1","southeast$1","southwest$1","northeast$1","northwest$1","allRtl","submenuInfo","SubmenuAnchor","AnchorSchema","submenu","makeshift","TransitionSchema","PositionSchema","PlacementSchema","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","lastPlace","position$1","posState","placementSpec","positionWithin","boxElement","boundsBox","positionWithinBounds","placeeDetail","anchorage","placeeState","oldVisibility","doPlace","newState","vis","getMode","pConfig","_pState","reset$1","PositionApis","reset","init$g","PositioningState","Positioning","fireDetaching","fireAttaching","virtualAttach","virtualDetach","attach$1","detachChildren$1","replaceChildren","newSpecs","buildNewChildren","newChildren","deleted","virtualReplaceChildren","existingComps","toArray","deletedComp","attach","attachWith","insertion","doDetach","detach","detachChildren","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","_data","getAttachPoint","built","open$1","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close$1","onClose","isOpen$1","_sandbox","_sConfig","isOpen","isPartOf","getState$2","store","cssKey","restore","oldValue","_sState","sink","cloakVisibilityAttr","hasPosition","SandboxApis","open","close","getState","events$g","sandboxConfig","sandboxState","ActiveSandbox","SandboxSchema","init$f","contents","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$x","receivingChannel$1","rawSpec","isPart","isExtraPart","fireEventInstead","fe","schema$w","receivingChannel","doReposition","onLoad$5","repConfig","repState","onLoad","onUnload$2","onUnload","setValue$3","setValue","getValue$3","getValue","getState$1","RepresentApis","events$f","resetOnDom","_se","ActiveRepresenting","memory$1","isNotSet","manual","dataset","dataByValue","dataByText","lookup","itemString","update","items","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","init$e","RepresentState","memory","setValue$2","onSetValue","getValue$2","getDataKey","getFallbackEntry","onLoad$4","initialValue","onUnload$1","DatasetStore","getValue$1","_repState","setValue$1","onLoad$3","ManualStore","onLoad$2","initVal","MemoryStore","RepresentSchema","Representing","setValueFrom","source","forbidden","get$3","dump","augment","SketchBehaviours","_placeholder","adt$3","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","req","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","_","substitutePlaces","ps","ph","single$2","placeholder","adt$2","external","fFactory","sketch","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","part","name$2","asCommon","convert","adtConstructor","partSchema","PartType","combine","partSpec","partValidated","defaults","internals","externals","pname","factory","_partSpec","_partValidated","units","u","generate$3","np","g","doGenerateOne","generateOne$1","schemas","names","substitutes","components$1","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","generateOne","partSchemas","partUidsSchemas","asRawOrDie","baseS","single$1","specWithUid","supplyUid","composite$1","partUidsSchema","hasUid","isSketchSpec","singleSchema","compositeSchema","rawConfig","configFields","extraApis","composite","partFields","inside","getCurrent","composeConfig","_composeState","find","ComposeApis","ComposeSchema","Composing","nativeDisabled","onLoad$1","disableConfig","disableState","disabled","disable","enable","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","onDisabled","onEnabled","isDisabled","set$4","DisableApis","exhibit$5","events$e","ActiveDisable","DisableSchema","Disabling","dehighlightAllExcept","hConfig","hState","skip","highlighted","highlightClass","shouldSkip","skipComp","onDehighlight","dehighlightAll","dehighlight","isHighlighted","highlight","onHighlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","targetComp","queryTarget","getHighlighted","_hState","itemClass","getDelta$2","selected","dest","getPrevious","getNext","HighlightApis","HighlightSchema","Highlighting","BACKSPACE","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","which","and","preds","isShift","shiftKey","isControl","ctrlKey","isNotShift","rule","classification","choose","transitions","reportFocusShifting","prevFocus","noChange","n","dom$2","focusee","highlights","FocusInsideModes","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","keyboardEvents","create$1","cyclicField","tabbingConfig","visibilitySelector","findInitial","tabstops","visibles","firstTabstop","findCurrent","focusManager","isTabstop","useTabstopAt","_tabbingState","goFromTabstop","stopIndex","cycle","cyclic","tabstop","optStopIndex","goBackwards","navigate","goForwards","execute","onEnter","exit","onEscape","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","isComplex","stopEventForFirefox","_component","schema$v","execute$4","executeConfig","getKeydownRules$5","_executeState","spaceExec","useSpace","enterExec","useEnter","downExec","useDown","execKeys","useControlEnter","getKeyupRules$5","ExecutionType","flatgrid$1","dimensions","setGridSize","numRows","numColumns","getNumRows","getNumColumns","init$d","KeyingState","flatgrid","useH","movement","move","use","west$1","moveLeft","moveRight","east$1","useV","north$1","south$1","move$1","isHidden$1","locate","locateVisible","visible","findIndex","withGrid","numCols","oldRow","oldColumn","address","newIndex","row","column","cycleHorizontal$1","onLastRow","colsInRow","newColumn","cycleVertical$1","newRow","newCol","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","schema$u","focusIn$3","gridConfig","_gridState","first","findCurrent$1","execute$3","doMove$2","gridState","identified","handleTab","captureTab","doEscape$1","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$4","getKeyupRules$4","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$t","flowConfig","execute$2","focusIn$2","_state","getInitial","moveLeft$2","moveRight$2","doMove$1","flowState","executeOnMove","doEscape","getKeydownRules$3","_flowState","westMovers","allowVertical","eastMovers","getKeyupRules$3","FlowType","toCell","matrix","rowIndex","columnIndex","cell","cycleHorizontal","startCol","deltaCol","newColIndex","cycleVertical","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight","cycleLeft","cycleUp","cycleDown","moveLeft$1","moveRight$1","moveUp$1","moveDown$1","schema$s","focusIn$1","matrixConfig","previousSelector","selectors","execute$1","toMatrix","rows","doMove","ifCycle","ifMove","cycles","inRow","cellsInRow","allRows","moveNorth","moveSouth","getKeydownRules$2","getKeyupRules$2","MatrixType","schema$r","menuConfig","moveUp","moveDown","fireShiftTab","menuState","moveOnTab","fireTab","getKeydownRules$1","getKeyupRules$1","MenuType","schema$q","specialInfo","onSpace","onShiftEnter","onShiftTab","onTab","onUp","onDown","onLeft","onRight","stopSpaceKeyup","SpecialType","acyclic","flow","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","withoutReuse","withReuse","virtualReplace","replacee","replaceeIndex","childSpec","insert","set$3","replaceConfig","replaceState","replacer","reuseDom","append","appendee","prepend","prependee","removee","foundChild","_replaceConfig","replaceAt","replaceBy","replaceePred","ReplaceApis","Replacing","events$d","eventHandlers","focus$2","focusConfig","ignore","onFocus","isFocused","FocusApis","exhibit$4","tabindex","events$c","stopMousedown","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","aria","updateClass","toggleClass","set$2","onToggled","toggle$2","isOn","ToggleApis","toggle","exhibit$3","events$b","load","toggleOnExecute","ActiveToggle","updatePressed","syncWithExpanded","updateExpanded","updateSelected","updateChecked","ToggleSchema","pressed","checked","expanded","Toggling","pointerEvents","onClick","events$a","optAction","executeHandler","hoverEvent","focusEvent","toggledEvent","onHover","onFocus$1","hover","focus$1","toggled","getItemRole","toggling","exclusive","getTogglingSpec","tConfig","_value","builder$2","hasSubmenu","itemBehaviours","ignoreFocus","schema$p","builder$1","schema$o","owner$2","parts$h","builder","focusWidget","widget","onHorizontalArrow","autofocus","setSource","_widget","widgetBehaviours","schema$n","itemSchema$2","separator","configureGrid","movementInfo","markers","configureMatrix","rowSelector","configureMenu","parts$g","itemInfo","unit","fakeFocus","schema$m","grid","deselectOtherRadioItems","checkedRadioItems","ele","make$7","_spec","_externals","menuBehaviours","selectedItem","role","Menu","transpose$1","trace","byItem","byMenu","triggerItem","triggerMenu","generate$2","menus","expansions","menuItems","menuPaths","_triggerItem","init$c","primary","directory","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","triggeredMenu","triggeringItem","triggeringPath","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","triggers","menuIndex","expand","collapse","refresh","lookupMenu","extractPreparedMenu","otherMenus","menuValues","getPrimary","getMenus","prep","LayeredState","onMenuItemHighlightedEvent","onMenuItemDehighlightedEvent","HighlightOnOpen","make$6","_rawUiSpec","submenuParentItems","buildMenus","primaryName","makeSketch","menuComp","itemComp","highlightData","dehighlightData","nbMenu","layeredState","setup","componentMap","toDirectory","getItemValue","_container","_menuName","setActiveMenu","setActiveMenuAndItem","mv","closeOthers","others","backgroundMenu","stayInDom","getSubmenuParents","parentItems","updateAriaExpansions","updateMenuPath","latestMenuName","menuPrep","activeMenu","ExpandHighlightDecision","buildIfRequired","expandRight","HighlightSubmenu","activeMenuPrep","onOpenSubmenu","collapseLeft","onCollapseMenu","updateView","keyOnItem","getSource","tmenu","onExecute","onOpenMenu","highlightOnOpen","HighlightMenuAndItem","HighlightJustMenu","tmenuComp","se","onHighlightItem","onDehighlightItem","navigateOnHover","HighlightParent","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","repositionMenus","maybeActivePrimary","allMenus","preparedMenus","primaryMenu","onRepositionMenu","collapseMenu","tmenuBehaviours","_keyInfo","selectedMenu","collapseItem$1","tieredData","singleData","collapseItem","tieredMenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","factory$m","isPartOfRelated","related","getRelated","thing","showAt","showWithin","showWithinBounds","showMenuAt","showMenuWithinBounds","hide","getContent","inlineBehaviours","onShow","onHide","fireDismissalEventInstead","fireRepositionEventInstead","InlineView","global$9","factory$l","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","global$8","rtlTransform","defaultIconName","defaultIcon","icons","getIconName","lcName","rtlName","lookupIcon","get$2","iconProvider","fallbackIcon","needsRtlTransform","iconName","addFocusableBehaviour","svg","renderIcon$2","_b","rtlIconClasses","iconHtml","render$3","renderFirst","iconNames","notificationIconMap","warning","factory$k","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","banner","iconChoices","icon","level","memButton","onAction","notificationIconSpec","notificationBodySpec","closeButton","Notification","ToolbarMode$1","ToolbarLocation$1","NotificationManagerImpl","editor","extras","uiMothership","sharedBackstage","backstage","shared","contentArea","getContentAreaContainer","win$1","settings","closeCallback","notificationWrapper","notification","progressBar","providers","getSink","header","isPositionedAtTop","timeout","setEditorTimeout","notificationSpec","anchorOverrides","allNotifications","notificationManager","getNotifications","thisNotification","anchors","previousNotification","getEl","nodeAnchor","nuText","getArgs","global$7","global$6","global$5","ToolbarMode","ToolbarLocation","option$2","wrapOptional","register$e","registerOption","register","stringOrFalseProcessor","stringOrNumberProcessor","default","getElement","DOM","getStyle","valid","auto","inline","isReadOnly","getHeightOption","getWidthOption","getMinWidthOption","getMinHeightOption","getMaxWidthOption","getMaxHeightOption","getUserStyleFormats","shouldMergeStyleFormats","shouldAutoHideStyleFormats","getContentLanguages","getRemovedMenuItems","getToolbarMode","getToolbarGroups","getToolbarLocation","fixedContainerSelector","fixedToolbarContainerTarget","isToolbarPersist","getStickyToolbarOffset","getMenubar","getToolbar","getFilePickerCallback","getFilePickerValidatorHandler","getFilePickerTypes","useTypeaheadUrls","getAnchorTop","getAnchorBottom","isDraggableModal$1","useStatusBar","useElementPath","useBranding","getResize","getPasteAsText","getSidebarShow","promotionEnabled","isSkinDisabled","isMenubarEnabled","getSkinUrl","skinUrl","documentBaseURI","skin","baseURL","getLineHeightFormats","isToolbarEnabled","toolbar","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsOption","toolbars","toolbarArray","isToolbarLocationBottom","fixedContainerTarget","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","Options","isDraggableModal","autocompleteSelector","elm","findIn","setup$e","redirectKeyToItem","getItem","getMenu","keyCode","isActive","isMenuOpen","stopImmediatePropagation","cancelIfNecessary","isProcessingAction","AutocompleterEditorEvents","ItemResponse","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","containerClass","containerColumnClass","containerRowClass","containerAlignRightClass","containerAlignLeftClass","containerValignTopClass","containerValignMiddleClass","containerValignBottomClass","classForPreset","presets","forMenu","hasIcons","menuClasses","dom$1","columns","schema$l","focusBehaviours","selectOnFocus","setSelectionRange","inputBehaviours","inputAttributes","inputStyles","inputClasses","factory$j","Input","refetchTriggerEvent","redirectMenuItemInteractionEvent","menuSearcherClass","findWithinSandbox","sandboxComp","inputElem","findWithinMenu","restoreState","inputComp","searcherState","fetchPattern","selectionStart","selectionEnd","saveState","setActiveDescendant","renderMenuSearcher","handleByBrowser","handleByHighlightedItem","eventData","interactionEvent","eventType","customSearcherEventsName","i18n","searchResultsClass","augmentWithAria","chunk","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","insertItemsPlaceholder","initItems","onItem","rawItems","enrichedItems","_item","forCollection","_hasIcons","forCollectionWithSearchResults","ariaControlsSearchResults","forCollectionWithSearchField","searchField","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_menuLayout","structure","createPartialMenuWithAlloyItems","menuLayout","getNormalStructure","menuType","searchMode","name$1","title","value$1","fetch$1","getSubmenuItems","onItemAction","onSetup","optionalName","optionalText","optionalIcon","optionalTooltip","optionalLabel","optionalShortcut","optionalSelect","borderless","enabled","defaultedColumns","defaultedMeta","defaultedOnAction","defaultedType","generatedName","namePrefix","generatedValue","valuePrefix","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","createSeparatorItem","createAutocompleterItem","baseToolbarButtonFields","toolbarButtonSchema","createToolbarButton","baseToolbarToggleButtonFields","toggleButtonSchema","createToggleButton","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","contextFormSchema","createContextForm","contextToolbarSchema","createContextToolbar","cardImageFields","cardImageSchema","cardTextFields","cardTextSchema","itemSchema$1","cardimage","cardtext","cardcontainer","cardContainerSchema","commonMenuItemFields","cardMenuItemSchema","createCardMenuItem","choiceMenuItemSchema","createChoiceMenuItem","baseFields","insertTableFields","colorSwatchFields","fancyMenuItemSchema","inserttable","colorswatch","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","detectSize","margin","selectorClass","descendants$1","columnLength","thisTop","cTop","abs","ceil","namedEvents","unnamedEvents","SimpleBehaviours","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","hideAllExclusive","_tConfig","_tState","setComponents","tState","getTooltip","tooltip","TooltippingApis","events$9","tooltipConfig","clearTooltip","clearTimer","show","isShowing","popup","tooltipDom","tooltipComponents","setTooltip","resetTimer","ActiveTooltipping","TooltippingSchema","init$b","TooltippingState","Tooltipping","escape","ReadOnlyChannel","ReadOnlyDataSchema","broadcastReadonly","uiComponents","readonly","outerContainer","mothership","setupReadonlyModeSwitch","receivingConfig","button","splitButton","toolbarButton","DisablingConfigs","runWithApi","getApi","onControlAttached","editorOffCell","onDestroy","onControlDetached","onMenuItemExecute","itemResponse","triggersSubmenu","CLOSE_ON_EXECUTE","menuItemEventOrder","componentRenderPipeline","renderCommonItem","providersBackstage","optComponents","buildData","convertText","isMac","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","trim","renderIcon$1","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderContainer","directionClass","alignClass","align","getValignClass","valign","renderImage","src","renderColorStructure","providerBackstage","colorPickerCommand","removeColorCommand","itemText","ariaLabel","iconSvg","iconContent","getDom","common","baseDom","renderItemDomStructure","domTitle","renderNormalItemStructure","renderIcons","iconSpec","renderIcon","renderEmptyIcon","leftIcon","checkmark","checkMark","textRender","htmlContent","menuItem","shortcutContent","caret","renderItemStructure","tooltipBehaviour","tooltipWorker","_tooltip","encodeText","encode","replaceText","matchText","translated","encoded","escapedMatchRegex","RegExp","renderAutocompleteItem","useText","onItemValueHandler","_api","render$2","shouldHighlight","cardText","highlightOn","renderCardMenuItem","isEnabled","setEnabled","renderChoiceItem","isSelected","setActive","parts$f","hexColour","shorthandRegex","longformRegex","isHexString","hex","normalizeHex","toUpperCase","fromString$1","getLongForm","hexString","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round$1","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","fireSkinLoaded$1","fireSkinLoadError$1","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","fireAfterProgressState","fireResolveName","hsvColour","fromRgb","minRGB","maxRGB","hexToHsv","hsvToHex","anyToHex","canvas","canvasContext","getContext","clearRect","fillStyle","fillRect","getImageData","global$4","storageName","ColorCache","storageString","localstorage","prune","diff","cache","unshift","pop","setItem","splice","colorCache","calcCols","colors","sqrt","mapColors","colorMap","option$1","register$d","getColors$2","getColorCols$1","hasCustomColors$1","getCurrentColors","addColor","fallbackColor","hasStyleApi","getCurrentColor","format","getParents","applyFormat","undoManager","transact","formatter","nodeChanged","removeFormat","registerCommands","addCommand","getAdditionalColors","hasCustom","applyColor","onChoice","dialog","colorPickerDialog","colorOpt","execCommand","getColors$1","getFetch$1","callback","setIconColor","splitButtonApi","newColor","setIconFill","registerTextColorButton","lastColor","ui","registry","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","fetch","_splitButtonApi","registerTextColorMenuItem","addNestedMenuItem","fancytype","isValid","onSubmit","getData","colorpicker","windowManager","alert","details","initialData","buttons","onCancel","register$c","lastForeColor","lastBackColor","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","getColorItems","colorinput","getColorCols","widgetSpec","useCustomColors","initData","allowCustomColors","hasCustomColors","getColors","cellOverEvent","cellExecuteEvent","makeCell","col","labelId","emitCellOver","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","emptyLabelText","memLabel","fancyMenuItems","renderFancyMenuItem","render","renderNestedItem","downwardsCaret","renderNormalItem","renderSeparatorItem","renderToggleMenuItem","autocomplete","separator$3","nested","toggle$1","fancy","card","getCoupled","coupleConfig","coupleState","getOrCreate","getExistingCoupled","getExisting","CouplingApis","CouplingSchema","init$a","coupled","lookupCoupled","coupledName","CouplingState","Coupling","nu$3","baseFn","callbacks","nCallback","isReady","cbs","cb","pure$1","LazyValue","pure","errorReporter","make$5","then","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$2","Promise","Future","partType$1","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","futureData","getLazySink","tdata","onOpenSync","processed","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox$1","ariaControls","sandboxClasses","sandboxBehaviours","sandboxFields","schema$k","parts$e","factory$i","switchToMenu","togglePopup$1","dropdownComp","HighlightNone","refetch","optSandbox","triggerExecute","dropdownBehaviours","Dropdown","identifyMenuLayout","handleRefetchTrigger","originalSandboxComp","dropdown","optSearcherState","newSandboxComp","handleRedirectToMenuItem","getActiveMenuItemFrom","activeItem","getSearchResults","activeMenuComp","updateAriaOnHighlight","optActiveResults","resultsElem","controlledId","updateAriaOnDehighlight","focusSearchField","searcherComp","getSearchPattern","optSandboxComp","FocusMode","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","createPartialMenu","itemHasIcon","createItem","createPartial","createTieredDataFrom","partialMenu","createInlineMenuFrom","focusMode","ContentFocus","getAutocompleterRange","initRange","createRng","selectNode","register$b","processingAction","activeState","autocompleter","hideIfNecessary","getCombinedItems","choices","itemMeta","nr","getRng","autocompleterApi","reload","fetchOptions","BUBBLE_TO_SANDBOX","display","lookupData","ld","updateDisplay","combinedItems","autocompleterUiApi","Autocompleter","DelayedFunction","fun","ref","schedule","cancel","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","touches","isFarEnough","touch","distX","distY","monitor","startData","longpressFired","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","fireIfReady","isDangerous","keyEv","setup$d","rawSettings","stopBackspace","tapEvent","simpleEvents","tapStopped","stopped","pasteTimeout","onPaste","onKeydown","onFocusIn","focusoutTimeout","onFocusOut","derive","rawTarget","fromSource","isStopped","isCut","fromExternal","adt$1","resume","complete","doTriggerHandler","handlerInfo","eventHandler","doTriggerOnUntilStopped","triggerHandler","listeners","_logger","listener","triggerUntilStopped","triggerOnUntilStopped","broadcastHandler","EventRegistry","registerId","findHandler","filterByType","isAboveRoot","unregisterId","handlersById","_eventName","Registry","readOrTag","failOnDuplicate","tagId","conflict","unregister","getById","factory$h","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","broadcastData","receivers","receiver","renderBar","interpreter","schema$j","parts$d","excludeFactory","factory$g","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","exhibit$2","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","global$3","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel$2","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","runOnItem","htmlLines","mapItemName","disabledClass","encodeAllRaw","tgt","collectionEvents","currentActive","iterCollectionItems","applyAttributes","childElm","ariaElements","isAriaElement","markValid","invalidConfig","getRoot","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","_invalidState","validatorInfo","validate","onValidate","isInvalid","InvalidateApis","events$8","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","exhibit$1","unselectable","events$7","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","inputValue","span","emitSwatchChange","colorBit","memColorButton","colorPicker","valueOpt","colorButton","_field","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent$2","evt","getEventSource","touchEvent","mouseEvent","l","minX","minY","min1X","min1Y","max1X","max1Y","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xyValue","fireSliderChange$3","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","initValue","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue$2","maxOffset","centerMinEdge","centerMaxEdge","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$2","findValueOfOffset$1","setValueFrom$2","xValue","sliderVal","setToMin$2","setToMax$2","moveBy$2","handleMovement$2","getValueFromEvent$2","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue$1","slider","setPositionFromValue$2","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","HorizontalModel","setToMin","setToMax","findValueOfOffset","findPositionOfValue","setPositionFromValue","fireSliderChange$1","setValueFrom$1","yValue","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange","sliderValue","moveBy","isVerticalMovement","handleMovement","mX","mY","xPos","yPos","thumbXRadius","thumbYRadius","TwoDModel","SliderSchema","sketch$2","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","fieldsUpdate","sliderUpdate","paletteUpdate","sliderFactory","getClass","_thumb","owner$1","schema$i","getPartName$1","sketch$1","fSpec","fieldParts","make$4","formBehaviours","form","resPs","resPThunk","pName","wrapper","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","rgb","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","ctx","grdWhite","createLinearGradient","addColorStop","grdBlack","setPaletteHue","setPaletteThumb","_detail","_slider","saturationBrightnessPaletteSketcher","setHue","_apis","setThumb","makeFactory","rgbForm","onInvalidHex","sbPalette","hueSliderToDegrees","hueDegreesToSlider","paletteRgba","paletteHue","memSlider","memPalette","memRgb","updatePalette","_hex","palette","updateFields","updateSlider","updatePaletteThumb","updateState","runUpdates","updates","onPaletteUpdate","oldHue","newHsv","newHex","onSliderUpdate","oldRgb","oldHsv","onFieldsUpdate","colourPickerSketcher","self","memento$1","mem","childAt","ComposingConfigs","memento","processors","rawProcessors","rawValue","postprocess","withComp","optInitialValue","getter","setter","withElement","domValue","domHtml","RepresentingConfigs","english","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","valOpt","global$2","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","ta","scriptId","scriptUrl","ea","cvalue","ed","global$1","filterByExtension","files","allowedImageFileTypes","explode","isFileInAllowedTypes","file","renderDropZone","actions","onDrop","transferEvent","handleFiles","dataTransfer","onSelect","memInput","accept","renderField","renderGrid","beforeObject","afterObject","craftWithClasses","outline","craft","triggerTab","isPseudoStop","getDynamicSource","cachedValue","_frameComponent","frameComponent","renderIFrame","isSandbox","sandboxed","isTransparent","transparent","baseClass","srcdoc","sourcing","image","reject","loaded","calculateImagePosition","imageWidth","imageHeight","zoom","zoomToFit","panel","panelW","panelH","renderImagePreview","cachedData","url","memImage","memContainer","translatedData","z","cachedWidth","cachedHeight","applyFramePositioning","imageComponent","img","naturalWidth","naturalHeight","fakeValidatedData","renderLabel$1","backstageShared","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","buttonApi","toolbarButtonEventOrder","iconsProvider","renderIconFromPack","renderReplaceableIconFromPack","renderLabel","updateMenuText","updateMenuIcon","renderCommonDropdown","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","tooltipAttributes","translatedTooltip","memDropdown","searchable","displayText","displayIcon","itemCompCausingCollapse","nowActiveMenuComp","isMenuItemReference","isSeparator$2","isExpandingMenuItem","separator$2","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","generateValueIfRequired","itemWithValue","newData","getSearchModeForField","searchSettings","getSearchModeForResults","mainMenuSearchMode","mainMenu","submenuSearchMode","submenus","isSingleListItem","dataAttribute","fetchItems","selectedValue","findItemByValue","renderListBox","initialItem","sketchSpec","listBoxWrap","renderPanel","factory$f","option","initialValues","selectClasses","selectAttributes","selectBehaviours","found","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","schema$h","coupledPart","selfName","otherName","lock","onLockedChange","parts$c","locked","lockClass","factory$e","coupledFieldBehaviours","field1Name","field1","field2Name","field2","getField1","getField2","getLock","FormCoupledInputs","formatSize","unitDec","maxDecimal","numText","parseSize","sizeText","numPattern","convertUnit","inInch","noSizeConversion","_input","ratioSizeConversion","scale","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","makeIcon","pLock","formGroup","getFieldPart","isField1","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","renderSlider","renderTable","renderTh","renderHeader","renderTd","renderTr","renderRows","baseInputBehaviours","multiline","validatingBehaviours","vl","inputMode","inputmode","classname","flex","extraClasses2","maximized","renderInput","renderTextarea","events$6","streamConfig","streamState","streams","stream","cancelEvent","ActiveStreaming","rate","throttle","_config","setTimer","init$9","StreamingState","setup$c","streamInfo","sInfo","throttler","onStream","stopEvent","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","selectsOver","inputDisplay","getDisplayText","itemDisplay","itemExecute","make$3","navigateList","highlighter","previewing","focusBehaviours$1","getActiveMenu","typeaheadCustomEvents","responseTime","focusInInput","minChars","previousValue","pv","sandboxIsOpen","openClass","typeaheadComp","lazyTypeaheadComp","_typeaheadComp","onItemExecute","dismissOnBlur","typeahead","typeaheadBehaviours","schema$g","parts$b","_tmenu","selectOverTextInInput","populateFromBrowse","_menu","Typeahead","wrap","bindFuture","resA","bindResult","mapResult","foldResult","whenError","whenValue","withTimeout","errorThunk","timedOut","nu$1","fromFuture","future","fromPromise","promise","completer","FutureResult","getMenuButtonApi","renderMenuButton","fetchContext","getFetch","getButton","getMenuItemAction","storage","orig","getMenuItemSetup","renderCommonSpec","actionOpt","domFinal","renderIconButtonSpec","calculateClassesFromButtonType","buttonType","renderButtonSpec","translatedText","baseClasses","renderButton","buttonSpec","getAction","isMenuFooterButtonSpec","isNormalFooterButtonSpec","renderFooterButton","menuButtonSpec","fixedSpec","renderDialogButton","separator$1","toMenuItem","staticMenuItem","toMenuItems","targets","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTop","anchorTargetBottom","anchorBottom","historyTargets","history","joinMenuLists","bothEmpty","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","getLinkInformation","getHistory","errorId","renderUrlInput","updateHistory","urlEntry","addToHistory","filetype","typeaheadSpec","memUrlBox","_newValue","getValidationHandler","memInvalidIcon","invalidComp","trimmedValue","_entry","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderAlertBanner","iconTooltip","set$1","get$1","renderCheckbox","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","make$2","dialogData","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","listbox","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagepreview","table","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","westEdgeX","middleX","eastEdgeX","northY","southY","centreY","lookupPreserveLayout","preserve","lookupFlippedLayout","flip","bubbleAlignments$2","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","bubbleSize","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor$1","getAnchors","isToolbarTop","useFixedToolbarContainer","inlineDialog","cursor","ColorInputBackstage","DialogBackstage","HeaderBackstage","getDockingMode","setDockingMode","isNestedFormat","isFormatReference","defaultStyleFormats","isNestedFormats","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","formatNameWithPrefix","registerCustomFormats","registerFormats","getStyleFormats","registeredUserFormats","isSeparator$1","processBasic","isSelectedFor","getPreviewFor","getStylePreview","register$a","enrichSupported","enrichMenu","newItems","doEnrich","getStyleItems","enrichCustom","newItem","init$8","block","parseStyle","getCssText","settingsFormats","eventsFormats","replaceSettings","_e","enriched","modifications","fromSettings","fromEvents","isElement","hasContentEditableState","contentEditable","isContentEditableTrue","isContentEditableFalse","isChildOfContentEditableTrue","tempNode","getElementText","innerText","getOrGenerateId","isAnchor","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","elms","getAnchorTargets","getTargetElements","hasTitle","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","SyntaxError","setAllHistory","itemsWithoutUrl","isTruthy","makeMap","getPicker","getPickerTypes","optFileTypes","_picker","types","getPickerSetting","pickerTypes","entry","getTextSetting","UrlInputBackstage","init$7","contextMenuState","getAll","isContextMenuOpen","setContextMenuState","setup$b","ship","channel","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onContentMousedown","editorManager","loopEditor","relatedTarget","onWindowScroll","onWindowResize","onEditorResize","onEditorProgress","onDismissPopups","parts$a","partType","schema$f","customListDetail","itemsPart","parts$9","factory$d","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","shell","listBehaviours","CustomList","schema$e","enhanceGroups","parts$8","factory$c","setGroups","groups","getGroupContainer","toolbarBehaviours","Toolbar","setup$a","isDocked$2","getBehaviours$1","StaticHeader","isDocked","getBehaviours","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPos","storePrior","setInitialPos","revertToOriginal","clearInitialPos","offsetBox","_left","_top","_right","_bottom","morphToOriginal","getModes","morphToFixed","winBox","isTop","getMorph","getMorphToOriginal","morphToStatic","setDocked","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","resetInternal","refresh$4","isDocked$1","setModes","DockingApis","events$5","dockInfo","dockState","onShown","onHidden","ActiveDocking","DockingSchema","init$6","docked","initialBounds","DockingState","Docking","toolbarHeightChange","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","viewHeight","innerHeight","scrollPos","markerElement","markerPos","markerHeight","markerTop","markerBottom","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","isDockedMode","updateIframeContentFlow","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","headerElem","focusedElem","ownerDoc","activeElm","findFocusedElem","rootElm","setup$9","lazyHeader","getIframeBehaviours","focusedElm","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","StickyHeader","sticky","groupToolbarButtonSchema","createGroupToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","factory$b","setMenus","internal","activeButton","hoveredButton","activeComp","hoveredComp","prev","SilverMenubar","promotionMessage","promotionLink","renderPromotion","getAnimationRoot","slideConfig","getDimensionProperty","dimension","getDimension","disableTransitions","shrinkingClass","growingClass","setShrunk","closedClass","setGrown","doImmediateShrink","slideState","_calculatedSize","setCollapsed","onStartShrink","onShrunk","doStartShrink","calculatedSize","doStartSmartShrink","shrinker","doStartGrow","wasShrinking","beforeSize","fullSize","startPartialGrow","startCompleteGrow","setStartSize","setExpanded","onStartGrow","refresh$3","isExpanded","grow","shrink","immediateShrink","hasGrown","hasShrunk","isCollapsed","isGrowing","_slideState","isShrinking","isTransitioning","toggleGrow","immediateGrow","onGrown","SlidingApis","events$4","ActiveSliding","SlidingSchema","init$5","SlidingState","Sliding","schema$d","getPartName","sSpec","slot","make$1","getSlotNames","getSlot","onSlot","def","onSlots","doShowing","_key","doShow","doHide","hideSlot","hideSlots","hideAllSlots","showSlot","slotBehaviours","slotApis","SlotContainer","sidebarSchema","createSidebar","setup$8","sidebars","queryCommandValue","addToggleButton","handleToggle","makePanels","panelConfigs","bridged","sidepanel","optSidePanelSpec","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","showSidebar","optSlider","configKey","toggleSidebar","optSlotContainer","whichSidebar","sidebarOpen","fixSize","autoSize","renderSidebar","getBusySpec","blockerBehaviours","blockSpec","blocker","isBlocked","onBlock","blockWith","unblock","onUnblock","BlockingApis","BlockingSchema","init$4","BlockingState","Blocking","getAttrs","getBusySpec$1","_root","_behaviours","focusBusyComponent","throbber","toggleEditorTabIndex","tabIndexAttr","dataTabIndexAttr","iframeElement","tabIndex","toggleThrobber","throbberFocus","busyComp","renderThrobber","isFocusEvent","isPasteBinTarget","targetElm","setup$7","lazyThrobber","throbberState","stealFocus","command","generate$1","within","withinWidth","apportion","total","parray","toUnit","fitLast","overflow","overflower","fitAll","tryFit","divide","setGroups$1","storedGroups","bGroups","findFocusedComp","refresh$2","setOverflow","builtGroups","overflowGroup","focusedComp","availableWidth","overflows","schema$c","schema$b","parts$7","expandable","schema$a","parts$6","toggledClass","toolbarSandbox","bounder","makeSandbox","factory$a","FloatingToolbarButton","schema$9","parts$5","factory$9","tgroupBehaviours","itemSelector","ToolbarGroup","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$8","getOverflowBounds","overflowToggledClass","splitToolbarBehaviours","getOverflow","SplitFloatingToolbar","schema$8","parts$4","onClosed","onOpened","toggleToolbar","overf","factory$7","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","renderToolbarGroupCommon","toolbarGroup","renderToolbarGroup","getToolbarBehaviours","toolbarSpec","modeName","onAttached","initGroups","renderMoreToolbarCommon","cyclicKeying","renderFloatingMoreToolbar","baseSpec","overflowXOffset","moreDrawerData","headerBounds","docElem","docBounds","scrollHeight","renderSlidingMoreToolbar","renderToolbar","scrolling","factory$6","getSocket","getOrNull","getHeader","setToolbar","renderedGroups","setToolbars","mToolbar","renderedToolbars","refreshToolbar","toggleToolbarDrawer","isToolbarDrawerToggled","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","floating","partMultipleToolbar","_mToolbar","tc","_index","partToolbar","renderer","lazyToolbar","lazyMoreButton","partHeader","partPromotion","partSocket","partSidebar","partThrobber","OuterContainer","defaultMenubar","defaultMenus","edit","tools","help","removedMenuItems","itemName","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","isDefaultMenu","menuData","isNotSeparator","fireSkinLoaded","done","_skinLoaded","initialized","fireSkinLoadError","loadStylesheet","stylesheetUrl","styleSheetLoader","unload","loadUiSkins","skinUiCss","loadShadowDomUiSkins","isInShadowRoot$1","shadowDomSkinCss","loadSkin","isInline","contentCSS","onSetupFormatToggle","boundCallback","binding","formatChanged","once","onSetupEvent","handleEvent","onActionToggleFormat$1","rawItem","onActionExecCommand","generateSelectItems","_editor","generateItem","response","invalid","si","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","rawFormats","buildBasicStaticDataset","Delimiter","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","getSpec$4","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignButton","createAlignMenu","findNearest","getStyles","getSpec$3","fallbackFormat","updateSelectMenuText","detectedFormat","createBlocksButton","createBlocksMenu","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$2","systemFont","getFirstFont","matchOpt","createFontFamilyButton","createFontFamilyMenu","legacyFontSizes","keywordFontSizes","precision","factor","pow","toPt","fontSize","toLegacy","getSpec$1","pt","legacy","Space","createFontSizeButton","createFontSizeMenu","getSpec","getFormatItems","flattenedItems","createStylesButton","createStylesMenu","events$3","reflectingConfig","reflectingState","renderComponents","newComponents","rawData","ActiveReflecting","reflectState","ReflectingApis","ReflectingSchema","init$3","ReflectingState","Reflecting","schema$7","arrowPart","arrow","buttonPart","btn","splitDropdown","parts$3","factory$5","openMenu","executeOnButton","buttonEvents","ariaDescriptor","splitDropdownBehaviours","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","renderCommonStructure","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","buttonComp","_c","defaultToolbar","renderFromBridge","bridgeBuilder","togglebutton","menubutton","splitbutton","grouptoolbarbutton","identify","allowToolbarGroups","TopToBottom","extractFrom","bespokeButtons","fontsize","fontfamily","blocks","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","prefixes","toolbarGroups","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents$1","contentWindow","initialDocEle","getDoc","lastWindowDimensions","innerWidth","lastDocumentDimensions","resizeWindow","outer","resizeDocument","docEle","elementLoad","render$1","lastToolbarWidth","eTargetNode","targetNode","uiRoot","socket","limit","unbinder","_ui","addQueryValueHandler","toolbarMode","refreshDrawer","iframeContainer","Iframe","parseToInt","re","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","getHeight","baseHeight","minHeight","getHeightWithFallback","getWidth","baseWidth","minWidth","getWidthWithFallback","InlineHeader","floatContainer","isSticky","editorMaxWidthOpt","headerBackstage","isSplitToolbar","removed","calcToolbarOffset","tbar","calcMode","toolbarHeight","targetBounds","roomAtTop","docHeight","roomAtBottom","winBounds","isRoomAtBottomViewport","setupMode","verticalDir","updateChromeWidth","bodyMargin","updateChromePosition","repositionPopups$1","updateChromeUi","resetDocking","updateMode","updateUi","currentMode","newMode","addClass","removeClass","getTargetPosAndBounds","setupEvents","toolbarPersist","prevPosAndBounds","resizeContent","prevPos","prevBounds","hasResized","uiContainer","Inline","showContextToolbarEvent","hideContextToolbarEvent","getFormApi","runOnExecute","formApi","renderContextButton","renderContextToggleButton","isToggleButton","mementos","asSpecs","findPrimary","compInSystem","buildInitGroups","commands","renderContextForm","toolbarType","ContextForm","isVerticalOverlap","threshold","getRangeRect","leaf$1","getSelectionBounds","bodyPos","getAnchorElementBounds","lastElement","getHorizontalBounds","contentAreaBox","viewportBounds","getVerticalBounds","isToolbarLocationTop","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","bubbleSize$1","bubbleAlignments$1","inset","isEntireElementSelected","preservePosition","currentPosition","shouldUseInsetLayouts","determineInsetLayout","contextbar","selectionBounds","isSameAnchorElement","isOverlapping","isReposition","yBounds","contextbarHeight","getAnchorSpec$2","mobile","smartInsetLayout","newAnchor","getInsetLayouts","desktopAnchorSpecLayouts","mobileAnchorSpecLayouts","getAnchorLayout","matchTargetWith","ctxs","toolbarApi","contextToolbars","contextForms","filterByPositionForStartNode","doesPositionExist","filterToolbarsByPosition","hasSelectionToolbars","hasNodeToolbars","nodeToolbars","selectionToolbars","filterByPositionForAncestorNode","findPosition","basePosition","matchStartNode","nodeCandidates","editorCandidates","nodeMatches","editorMatches","matchAncestor","startNode","scopes","ancestorElem","inNodeScope","lookup$1","rootElem","isOutsideRoot","getNode","inEditorScope","categorise","forms","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","contextToolbar","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newWidth","newContents","oldContents","forwardContents","register$9","registryContextToolbars","lastTrigger","lastContextPosition","canLaunchToolbar","isSameLaunchElement","shouldContextToolbarHide","contextToolbarBounds","anchorBounds","hideOrRepositionIfNecessary","contextBarEle","wrapInPopDialog","shortcuts","_comp","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextFormGroups","anchorLayout","launchContext","launchContextToolbar","toolbarKey","register$8","alignToolbarButtons","cmd","addButton","unsupportedLength","decimalDigits","signedInteger","exponentPart","dot","unsignedDecimalLiteral","float","isUnit","accepted","check","unitRaw","normalise","registerController","getMenuItems","getOptions","hash","oldApi","unbindWatcher","watcher","setCurrent","addMenuButton","onToolbarSetup","onMenuSetup","lineHeightSpec","languageSpec","settingsOpt","customCode","code","customValue","codeOpt","lang","register$7","register$6","onSetupOutdentState","queryCommandState","registerButtons$2","register$5","makeSetupHandler","pasteAsText","pastePlainTextToggleHandler","register$4","addToggleMenuItem","onActionToggleFormat","registerFormatButtons","_idx","registerCommandButtons","registerCommandToggleButtons","registerButtons$1","registerMenuItems$2","addMenuItem","register$3","onSetupUndoRedoState","registerMenuItems$1","registerButtons","register$2","onSetupVisualAidState","hasVisual","registerMenuItems","registerToolbarButton","register$1","setup$6","patchPipeConfig","shouldNeverUseNative","getAvoidOverlapSelector","isContextMenuDisabled","getContextMenu","contextMenus","contextMenu","transpose","dx","dy","isTouchEvent$1","fromPageXY","pageX","pageY","fromClientXY","transposeContentAreaContainer","containerPos","getPos","getPointAnchor","getSelectionAnchor","getNodeAnchor","getAnchorSpec$1","anchorType","initAndShow$1","buildMenu","contextmenu","anchorSpec","bubbleAlignments","isTouchWithinSelection","rngRectOpt","rngRect","setupiOSOverrides","originalSelection","selectionReset","setRng","unbindEventListeners","preventMousedown","clearSelectionReset","getAnchorSpec","bubbleYOffset","highlightImmediately","initAndShow","shouldHighlightImmediately","openiOS","makeContextItem","commonMenuItem","commonItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTouchEvent","isTriggeredByKeyboard","pointerType","getSelectedElement","getAnchorType","selectorExists","setup$5","hideContextMenu","showContextMenu","initAndShow$2","hideEvents","subtract","changes","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","deltaX","deltaY","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","NaN","snapsInfo","leftAttr","topAttr","getCoords","snapInfo","moveOrSnap","newCoord","mustSnap","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","inRange","getSnapPoints","matchSnap","bestSnap","deltas","bestDeltas","currAvg","bestAvg","snapTo$1","snapTo","dragConfig","getTarget","repositionTarget","snapPin","DraggingApis","initialAttribute","resetZIndex","zIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$6","getCurrentCoord","location","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","onSensor","dragBy","onDrag","calcStartData","dragState","dragMode","dragStartData","getStartData","dlt","updateStartState","setStartData","init$2","dragApi","forceDrop","drop","delayDrop","getData$1","getDelta$1","MouseData","getDelta","events$2","stop$1","schema$5","init$1","getDataFrom","TouchData","events$1","blockerSingleton","stopBlocking","schema$4","schema$3","mouse","mouseOrTouch","DraggingBranches","previous","calculateDelta","dragEvent","nuData","DragState","Dragging","dragger","snapWidth","snapOffset","calcSnap","selectorOpt","td","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","isSameCell","cellOpt","currentTd","createSelector","setup$4","tlTds","brTds","startCell","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","isAbove","isBelow","cellRect","viewportHeight","aboveViewport","belowViewport","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","otherCells","upOrLeftCells","downOrRightCells","Logo","isHidden","renderElementPath","renderElement","_btn","renderDivider","renderPathData","updatePath","parents","newPath","isDefaultPrevented","isPropagationStopped","ResizeTypes","getDimensions","resizeType","originalHeight","originalWidth","Both","resize","dim","getResizeType","None","Vertical","keyboardHandler","renderResizeHandler","_target","renderWordCount","replaceCountText","words","characters","currentVal","wordCount","renderStatusbar","renderBranding","getTextComponents","hasPlugin","getComponents","resizeHandler","getLazyMothership","setup$3","lazyOuterContainer","lazyMothership","lazyUiMothership","touchPlatformClass","deviceClasses","isToolbarBottom","memAnchorBar","lazySinkResult","lazyAnchorBar","makeHeaderPart","verticalDirAttributes","hasMultipleToolbar","hasToolbar","hasMenubar","shouldHavePromotion","makePromotion","getPartToolbar","menubarCollection","promotion","makeSidebarDefinition","renderSink","isGridUiContainer","sinkSpec","reactiveWidthSpec","sidebarContainer","statusbar","editorComponents","containerComponents","opacity","border","setEditorSize","parsedHeight","parsedWidth","setupShortcutsAndCommands","addShortcut","addQueryStateHandler","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","getMothership","getUiMothership","describedBy","describedElement","describeElement","describeId","labelledBy","labelledElement","labelElement","schema$2","basic","parts$2","dragBlockClass","getDragBounds","factory$4","dialogComp","showDialog","externalBlocker","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseFooterButtonFields","dialogFooterButtonFields","normalFooterButtonFields","menuFooterButtonFields","dialogFooterButtonSchema","submit","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","formComponentFields","formComponentWithLabelFields","checkboxFields","checkboxSchema","checkboxDataProcessor","collectionFields","collectionSchema","collectionDataProcessor","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerFields","colorPickerSchema","colorPickerDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","htmlPanelFields","htmlPanelSchema","iframeFields","iframeSchema","iframeDataProcessor","imagePreviewSchema","imagePreviewDataProcessor","inputFields","inputSchema","inputDataProcessor","createLabelFields","listBoxSingleItemFields","listBoxNestedItemFields","listBoxItemSchema","listBoxFields","listBoxSchema","listBoxDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","sliderFields","sliderSchema","sliderInputDataProcessor","tableFields","tableSchema","textAreaFields","textAreaSchema","textAreaDataProcessor","urlInputFields","urlInputSchema","urlInputDataProcessor","createItemsField","itemSchema","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogButtonFields","dialogButtonSchema","dialogSchema","tabpanel","createDialog","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","getAllObjects","isNamedItem","dataProcessors","togglemenuitem","getDataProcessor","getNamedItems","createDataValidator","namedItems","internalDialog","dataValidator","DialogManager","openUrl","redial","toValidValues","renderBodyPanel","memForm","formValue","factory$3","tabButtonBehaviours","TabButton","schema$1","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","clickToDismiss","tabClass","parts$1","factory$2","tabbarBehaviours","selectedClass","tab","Tabbar","factory$1","tabviewBehaviours","Tabview","barPart","tabs","viewPart","tabValue","tabview","tabWithValue","tabData","onChangeTab","changeTabBy","section","byPred","tabSectionBehaviours","selectFirst","onDismissTab","getViewItems","showTab","tabKey","getTabIfNotActive","optTab","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","tabviewHeight","isTabListBeside","currentTabHeight","dialogTopMargin","dialogBottomMargin","dialogHeight","chromeHeight","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartMode","extraEvents","maxTabHeightOpt","oldHeight","newHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","formData","validData","currentData","setDataOnForm","oldTab","tabMode","_viewItems","oldName","tsection","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","renderBody","dialogId","contentId","ariaAttrs","incoming","isTabPanel","ariaAttributes","renderInlineBody","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","footer","pFooterGroup","startButtons","endButtons","renderDialog$1","dialogClass","blockerBackdropClass","scrollLockClass","extraStyles","dialogEvents","renderClose","renderTitle","titleId","renderDragHandle","renderInlineHeader","renderModalHeader","pTitle","pHandle","draghandle","draggable","bs","getEventExtras","lazyDialog","closeWindow","blockEvent","renderModalDialog","mapMenuButtons","mapItems","extractCellsToObject","menuButton","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","rootNode","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","getCompByName","getFormWrapper","footerState","validateData$1","dialogState","getDialogApi","doRedial","menuItemStates","withRoot","valueComp","representedValues","menuItemCurrentState","setData","prevData","instanceApi","mergedData","newInternalData","bodyState","tabSection","getId","dialogInit","getDialogSizeClasses","renderDialog","storedMenuButtons","objOfCells","dialogSize","modalAccess","getForm","outerForm","renderInlineDialog","dialogLabelId","dialogContentId","memHeader","memBody","storagedMenuButtons","memFooter","global","getUrlDialogApi","sendMessage","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","mceAction","isCustomMessage","handleMessage","insertContent","renderUrlDialog","iframeUri","base_uri","href","iframeDomain","protocol","port","messageHandlerUnbinder","isSameOrigin","onMessage","iframeEle","iframeWin","postMessage","setup$2","closeDialog","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","setup$1","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData","isAlertOrConfirmDialog","inlineAdditionalBehaviours","isStickyToolbar$1","openInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","refreshDocking","dialogUi","inlineDialogComp","confirm","registerOptions","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","getSeparatorHtml","shouldSplitBlock","pageBreakClass","getPlaceholderHtml","transparentSrc","separatorHtml","shouldSplitBlock$1","pageBreakSeparatorRegExp","serializer","addNodeFilter","getBlockElements","hasClass","Plugin","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getTemplateReplaceValues","getTemplates","getCdateFormat","getMdateFormat","getContentStyle","shouldUseContentCssCors","getBodyClass","addZeros","getDateTime","daysShort","daysLong","monthsShort","monthsLong","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","entitiesAttr","'","htmlEscape","hasAnyClasses","createTemplateList","templateList","ok","json","replaceTemplateValues","templateValues","replaceVals","insertTemplate","addVisual","getPreviewContent","contentCssEntries","contentStyle","cors","bodyClass","isMetaKeyPressed","preventClicksOnLinksScript","directionality","dirAttr","getURI","createTemplates","template","isUrlTemplate","createSelectBoxItems","templates","findTemplate","templateTitle","loadFailedAlert","getTemplateContent","updateDialog","newTemplateTitle","previewHtml","catch","openDialog","selectBoxItems","buildDialogSpec","bodyItems","dialogApi","optTemplates","dateFormat","allowHtmlInNamedAnchor","namedAnchorSelector","isEmptyString","getIdFromAnchor","isNamedAnchor","isEmptyNamedAnchor","removeEmptyNamedAnchorsInSelection","walk","isValidId","getNamedAnchor","getParent","createAnchor","createHTML","updateAnchor","anchorElement","insertAnchor","newId","currentId","isNamedAnchorNode","isEmptyNamedAnchorNode","setContentEditable","parser","onmatch","_fmt","_itemName","selectorChangedWithUnbind","fireInsertCustomChar","chr","insertChar","evtChr","isArray$1","charMapProcessor","getCharMap$1","getCharMapAppend","UserDefined","getDefaultCharMap","charmapFilter","charmap","grep","getCharsFromOption","optionValue","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap","insertChar$1","fromCodePoint","charMatches","charCode","lowerCasePattern","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","SEARCH_DELAY","updateFilter","bridgeSpec","changeData","addAutocompleter","trigger","_maxResults","_reject","autocompleteApi","groupBy","wasType","isDuplicated","fromDom$1","lastChild","shallowAs","mutate","matchNodeName","matchNodeNames","regex","isTextNode","isListNode","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isTextBlock","getTextBlockElements","isBlock","blockElements","isBogusBr","previousSibling","isEmpty$1","keepBookmarks","isChildOfBody","isChildOf","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","createFragment","blockName","blockAttrs","textBlock","hasContentNode","DOM$2","splitList","li","removeAndKeepBookmarks","bookmarks","newBlock","tmpRng","extractContents","insertAfter","isDescriptionDetail","isDescriptionTerm","outdentDlItem","dl","indentDlItem","dlIndentation","indentation","dlItems","getNormalizedPoint","normalizeRange","outRng","cloneRange","rangeStart","rangeEnd","listNames","listSelector","getParentList","getClosestListHost","isParentListSelected","parentList","selectedBlocks","findSubLists","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","getClosestEditingHost","parentTableCell","isListHost","listName","isValidChild","parentBlocks","parentBlock","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","isCustomList","inList","isWithinNonEditable","getContentEditableParent","selectionIsWithinNonEditableList","isWithinNonEditableList","setNodeChangeHandler","nodeChangeHandler","initialNode","fromElements","fireListEvent","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","createSegments","populateSegments","listAttributes","itemAttributes","normalizeSegment","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList","hasFirstChildList","hasLastChildList","isIndented","cloneItemContent","createEntry","dirty","indentEntry","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","outdentedComposer","normalizedEntries","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","selectionIndentation","isHandled","bookmark","getBookmark","moveToBookmark","handleIndentation","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","listToggleActionFromListName","updateListStyle","setStyle","setAttribs","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","getContentEditable","selectedTextBlocks","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","liSibling","updateList$1","newList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","toggleSingleList","toggleList","selectedSubLists","normalizeList","normalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","walker","walkFn","prev2","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","mergeLiElements","listNode","ul","nestedLists","mergeIntoEmptyLi","fromLi","toLi","setCursorLocation","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","otherLi","removeBlock","backspaceDeleteIntoListCaret","findValidElement","findRoot","otherLiCell","caretCell","backspaceDeleteCaret","hasListSelection","startListParent","backspaceDeleteRange","backspaceDelete","DELETE","updateList","setStyles","setAttrib","parseAlphabeticBase26","chars","char","charValue","charCodeAt","composeAlphabeticBase26","quotient","fromCharCode","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","listStyleType","parseDetail","currentList","getAttrib","queryListCommandState","registerDialog","setupTabKey","metaKeyPressed","setupToggleButtonHandler","toggleButtonHandler","setupMenuButtonHandler","menuButtonHandler","listProperties","addContextMenu","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","allowUnsafeLinkTarget","isZwsp","removeZwsp","isBracketOrSpace","hasProtocol","isPunctuation","findChar","charAt","freefallRtl","tempOffset","parseCurrentLine","voidElements","getVoidElements","autoLinkPattern","textSeeker","endSpot","backwards","lastTextNode","startSpot","newRng","rngText","convertToLink","beforeExecEvent","defaultLinkTarget","handleSpacebar","handleBracket","handleEnter","punctuationStr","punctuation$1","punctuation","isText$1","compareDocumentPosition","documentPositionPreceding","DOCUMENT_POSITION_PRECEDING","isSimpleBoundary","isContentEditableTrueInCef","getWhitespaceElements","isBoundary","nuSection","sOffset","fOffset","toLeaf","walkerFn","skipStart","isCefNode","stopWalking","cef","boundary","collectTextToBoundary","forwards","rootBlock","collect","finishSection","collectRangeSections","commonAncestorContainer","ceTrueNode","fromRng","fromNode","fromNodes","lastIndex","matchedText","matchIndex","matchStart","matchFinish","nodePositions","matchIdx","matchId","mark","replacementNode","textNode","splitText","matchNode","findAndMark","textSections","findAndMarkInSelection","getElmIndex","markAllMatches","currentSearchState","inSelection","unwrap","findSpansByIndex","spans","getElementsByTagName","moveSelection","forward","searchState","testIndex","scrollIntoView","removeNode","escapeSearchText","wholeWord","escapedText","wordRegex","matchCase","isForwardSelection","isMatchSpan","currentIndex","currentMatchIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","currentState","done$1","next$1","prev$1","replace$1","selectedText","updateButtonStates","updateSearchState","matchcase","wholewords","inselection","disableAll","notFoundAlert","focusButtonIfRequired","doFind","findtext","replacetext","getAudioTemplateCallback","getVideoTemplateCallback","getIframeTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","trimPx","getEphoxEmbedData","altsource","poster","htmlToData","forced_root_block","extend","guess","mimes","mp3","m4a","wav","mp4","webm","ogg","swf","fileEnd","Parser","allow_conditional_comments","addPx","updateEphoxEmbed","styleMap","serializeStyle","sources","updateAll","numSources","sourceCount","hasImage","serialize","urlPatterns","allowFullscreen","getProtocol","protocolMatches","getUrl","newUrl","matchPattern","getIframeHtml","iframeTemplateCallback","allowfullscreen","getFlashHtml","getAudioHtml","audioTemplateCallback","altsourcemime","getVideoHtml","videoTemplateCallback","sourcemime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","isMediaElement","selectedNode","objectType","unescape","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","getEditorData","snippet","addEmbedHtml","snippetData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","sizeInput","constrain","generalTab","embedTextarea","embedTab","advancedFormItems","advancedTab","showDialog$1","isLiveEmbedNode","defaultValue","setDimensions","previewNode","useDefaults","defaultWidth","fallbackHeight","defaultHeight","appendNodeContent","newNode","context","createPlaceholderNode","placeHolder","retainAttributesAndInnerHtml","createPreviewNode","previewWrapper","frameborder","attrName","sanitizedHtml","shimNode","sourceNode","attribs","ai","attrValue","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","parseAndSanitize","boolAttrs","getBoolAttrs","getElementRule","attributesOrder","addAttributeFilter","realElmName","realElm","customTabs","addTab","currentCustomTabs","dialogOpener","getHelpTabs","getForcedPlugins","tab$3","tab$2","shortcutList","shortcutText","tablePanel","urls","slug","tab$1","availablePlugins","premiumPlugins","sortedPremiumPlugins","s1","s2","localeCompare","premiumPluginList","pluginName","makeLink","identifyUnknownPlugin","getMetadata","plugins","metadata","getPluginData","getPluginKeys","forcedPlugins","pluginLister","pluginKeys","sortedPluginData","pd1","pd2","pluginLis","pluginsString","installedPlugins","htmlPanel","getVersion","majorVersion","minorVersion","changeLogLink","parseHelpTabsSetting","tabsFromSettings","newTabs","getNamesFromTabs","parseCustomTabs","nav","versions","foundTabs","dialogTabs","fireVisualBlocks","toggleVisualBlocks","pluginUrl","enabledState","isEnabledByDefault","toggleActiveState","editorEventCallback","getBodyId","getPreviewHtml","headHtml","bodyId","dataApi","applyListFormat","styleValue","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","styleValueToText","normalizeStyleValue","isWithinList","tableCellIndex","iconStyle","listStyle","addControl","flatten$1","COMMENT","isComment","rawParent","prevSibling","children$3","child$3","children$2","oot","toInt","radix","toFloat","getAttrValue","firstLayer","filterFirstLayer","validSectionList","isValidSection","parentName","rowspan","colspan","extended","isLocked","rowdetail","finishRow","finishCol","columnext","colgroup","tags","isRootOrUpperTable","columnGroups","columnGroup","fromRowsOrColGroups","elems","getSection","cells$1","getParentSection","fromTable$1","rows$1","columnGroups$1","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getAt","warehouse","findItem","filtered","filterItems","generateColumns","rowData","columnsGroup","tableOpt","lockedColumns","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","colgroups","colgroup$1","grid$1","fromTable","justCells","justColumns","hasColumns","getColumnAt","Warehouse","getTDTHOverallStyle","firstChildStyle","currentStyle","setAlign","setVAlign","fireTableModified","toNumber","px","getProp","calcContentBoxSize","upper","lower","paddingUpper","paddingLower","borderUpper","borderLower","getCalculatedWidth","boxSizing","getInnerWidth","getInner","defaultTableToolbar","defaultCellBorderWidths","defaultCellBorderStyles","getPixelForcedWidth","determineDefaultStyles","defaultStyles","isResponsiveForced","shouldStyleWithCss","isPixelsForced","determineDefaultAttributes","defaultAttributes","getTableSizingMode","getTableBorderWidths","getTableBorderStyles","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","getCellClassList","getRowClassList","getTableClassList","getTableBackgroundColorMap","getTableBorderColorMap","getDefaultStyles","getDefaultAttributes","getNodeName","getIsRoot","removePxSuffix","addPxSuffix","getSelectionStart","getSelectionEnd","getEnd","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox$1","getWarehouse","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","isSpecial","getLanguage","up","down","copyTo","afterAll","appendAll","getText","setText","universe","look","oneAll","unsafeOne","commonElement","sharedOne$1","sharedOne","_universe","retrieve$1","sels","getEdges","firstSelectedSelector","lastSelectedSelector","retrieve","retrieveBox","sectionSelector","firstAncestor","lastAncestor","fA","lA","strSelected","strSelectedSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","ephemera","selectedSelector","firstSelected","lastSelected","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getSelectedCells","getRowsFromSelection","rowsOpt","verticalAlignValues","rgbaToHexString","onSetupToggle","formatValue","selectedCells","checkNode","isListGroup","buildListItems","buildMenuItems","applyTableCellStyle","filterNoneItem","generateMenuItemsCallback","buildColorMenu","colorList","changeRowHeader","currentType","newType","changeColumnHeader","getClassList$1","getItems$2","getAdvancedTab","dialogName","emptyBorderStyle","advTabItems","borderWidth","setFormat","DomModifier","isHeaderCell","getRowHeaderType","isHeaderRow","isHeaderCells","getRowType$1","findCommonCellType","subType","headerCells","findCommonRowType","rowTypes","hasHeader","hasFooter","hasBody","findInWarehouse","extractCells","cell$1","lc","onMergable","_warehouse","mergable","onUnmergable","unmergable","onCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","opGetRowsType","only","house","lastSelectedCell","minRowRange","maxRowRange","selectedRows","getRowsType","rgbToHex","extractAdvancedStyles","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAlignment","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","getRowType","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","colElm","celltype","halign","allCells","cellA","cellB","updateSimpleProps$1","modifier","colModifier","shouldUpdate","updateAdvancedProps$1","applyStyleData$1","wasChanged","isSingleCell","cellElm","shouldOverrideCurrentValue","applyStructureData$1","no_events","applyCellData","oldData","modifiedData","styleModified","structureModified","onSubmitCellForm","cellsData","open$2","dialogTabPanel","dialogPanel","getClassList","formChildren","getItems$1","updateSimpleProps","updateAdvancedProps","applyStyleData","isSingleRow","rowElm","applyStructureData","applyRowData","typeModified","onSubmitRowForm","rowsData","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","styleTDTH","tagName","applyDataToElement","tableElm","advData","onSubmitTableForm","cols","captionElm","captionModified","generalPanel","nonAdvancedForm","advancedForm","mceTableProps","mceTableRowProps","mceTableCellProps","func","hasSpan","hasRowOrColSpan","noMenu","getSelectionTargets","changeHandlers","selectionDetails","isCaption","isDisabledForSelection","findTargets","startCellOrCaption","startTable","endTable","getExtractedDetails","onAny","onFirst","onLast","unmergeable","resetTargets","setupHandler","onSetupWithToggle","isDisabledFromLocked","lockedDisable","onSetupTable","onSetupCellOrRow","onSetupColumn","onSetupPasteable","getClipboardData","onSetupPasteableColumn","onSetupMergeable","_targets","onSetupUnmergeable","onSetupTableWithCaption","onSetupTableHeaders","headerType","onSetupTableRowHeaders","onSetupTableColumnHeaders","tableTypeBase","tableTypeRow","tableTypeColumn","getType","getRows","getColumns","addButtons","selectionTargets","addButtonIfRegistered","queryCommandSupported","addToggleButtonIfRegistered","tableClassList","tableCellClassList","addToolbars","isTable","addContextToolbar","addMenuItems","addMenuIfRegistered","addToggleMenuIfRegistered","insertTableAction","hasRowMenuItems","hasColumnMenuItems","hasCellMenuItems","Plugin$1","eq$2","each$2","sort$1","last$2","clone$2","fromPoint$1","before$3","after$5","after$4","copy$2","cloneChildren","mutate$1","detailnew","isNew","rowdetailnew","elementnew","rowcells","body$1","getBody$1","ancestors$4","ancestors$3","bindFrom","getRaw$2","copy$1","sourceDom","targetDom","cssText","getSpan","hasColspan","cellOrCol","hasRowspan","getCssValue","columns$1","fromPastedRows","detect$5","getHeight$1","getRuntime$1","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cloneRow","cloneCell","getLockedColumnsFromGrid","lockedArr","_val","isValidCell","rowsArr","getBlock","getFallback","decide","inBlock","validInBlock","detailOption","isSingle","deduce","aa","getRuntime","rowInfo","colInfo","rtlEdge","ltrEdge","getTop$1","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","ltr$1","rtl$1","amount","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getRaw$1","getRawWidth$1","getRawHeight","getPercentageWidth","getPixelWidth$1","getGenericWidth","setGenericWidth","getPixelTableWidth","getPercentTableWidth","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","justCols","isValidColumn","supportsColWidths","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","tableSize","minCellWidth","cellWidth","pixelWidth","getPixelWidths","getHeightFrom","getPixelHeights","getRawHeights","widthLookup","noneSize","zero","getWidths","getCellDelta","singleColumnWidth","setElementWidth","adjustTableWidth","isRelative","percentageSize","getFloatWidth","_delta","pixelSize","newNext","chooseSize","percentMatch","getTableSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","findSelectedStats","totalColumns","totalRows","endRow","endCol","seenSelected","fillInGaps","stats","needCell","clean","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","selectedColsWidth","extract$1","replicaHouse","replicaStats","unselectedCells","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","descendantRtl","transferableAttributes","createCell","createCol","createColgroup","createRow$1","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","attributeName","cellOperations","formatsToClone","cloneCss","lastNode","colGap","gap","paste$1","removeDataStyle","removeStyleAttribute","getPixelWidth","getPixelHeight","getRawWidth","isPercentage$1","isPixel","leftEdge","rightEdge","topEdge","bottomEdge","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","ancestors$2","ps1","ps2","ind","pruned1","pruned2","firstpath","secondpath","ancestors$1","universe$3","ancestors","rootTable","boxes","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","expandTo","shiftSelection","strAttributeSelector","attributeSelector","paste","clipboard","generators","pasteRows","_cell","getCellsFromFakeSelection","extractSelected","serializeElements","getTextContent","registerEvents","multiCellContext","pasteCells","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","surround","sizes","startIndex","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","resizeTable","calcFixedDeltas","clampedDelta","calcRelativeDeltas","ratio","newThis","calcLeftEdgeDeltas","calcMiddleDeltas","_prev","resizer","calcRightEdgeDeltas","calcRedestributedWidths","totalWidth","pixelDelta","tableWidth","newSizes","clampTableDelta","preserveTable","isLastColumn","_minCellSize","maxDelta","_totalWidth","_pixelDelta","_isRelative","getGridSize","findTableRowHeaderType","rowType","transformCell","substitution","transformRow","fixedCell","sectionCells","newSection","getTableSectionType","TableSection","isEditable$1","assumeEditable","isContentEditable","editable","setIfNot","insert$1","generateSection","sectionName","newRows","syncRows","gridSection","tr","syncColGroup","colGroup","renderSection","sync","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","clonedCell","getColumn","getRow","findDiff","subgrid","isColRow","toDetails","seen","updateSeen","toGrid","colgroupCols","rowCells","rowDetail","fromWarehouse","toDetailList","operation","postAction","genWrappers","tableSection","out","newElements","tableSizing","sizing","resizing","onPasteByEditor","onUnlockedCells","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","splitRows","rowPrevCells","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","gridBRows","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","ex","withinSpan","getElementFor","insertColumnAt","deleteColumnsAt","deleteRowsAt","notInStartRow","notInStartColumn","isDuplicatedCell","rowReplacerPredicate","targetRow","columnHeaders","entireTableIsHeader","_rowIndex","columnReplacePredicate","targetColumn","rowHeaders","_colIndex","determineScope","applyScope","newScope","isInHeader","getScope","oppositeScope","rowScopeGenerator","columnScopeGenerator","replaceIn","genScope","shouldReplace","isTarget","getColumnCells","getRowCells","replaceColumns","indexes","shouldReplaceCell","scopeGenerator","replaceRows","newGrid","replaceCells","targetCells","ColumnContext","neighbours","determine","onOnly","onMiddle","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","recalculateHeightForCells","matchRowHeight","sumUp","recalculate","recalculateAndApply","adjustWidth","clampedStep","newWidths","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","tablePixelWidth","adjustWidthTo","_info","uniqueColumns","uniqueCheck","columnExists","currentDetail","isCol","isColgroup","isRow$1","elementToData","toData","nuCell","nuRow","recent","getOrInit","transform$1","makeNew","replaceOrInit","getScopeAttribute","merging","getScopeProperty","stringAttributes","baseScope","isMixed","Generators","blockList","isList$1","isBlock$1","isEmptyTag$1","universe$1","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","findEditableCursorPosition","elementFromGrid","cursorElement","uniqueRows","rowCompilation","rowExists","opInsertRowsBefore","targetIndex","newG","opInsertRowsAfter","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeColumnsHeader","initialGrid","columnIndexes","opMakeCellsHeader","opUnmakeColumnsHeader","opUnmakeCellsHeader","makeRowsSection","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","opEraseColumns","_comparator","_genWrappers","maxColIndex","opEraseRows","maxRowIndex","opMergeCells","opUnmergeCells","unmerge$1","opPasteCells","pasteDetails","gridify","wh","mergedGrid","gridifyRows","opPasteColsBefore","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnsType","minColRange","maxColRange","selectedColumnCells","opGetCellsType","adjustAndRedistributeWidths","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","checkLocked","eraseColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","unmergeCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","getCellsType","fireNewRow","fireNewCell","fireTableSelectionChange","fireTableSelectionClear","fireObjectResizeStart","fireObjectResized","styleAndStructureModified","determineDefaultTableStyles","isTableResponsiveForced","isTablePixelsForced","determineDefaultTableAttributes","getTableCloneElements","hasTableObjectResizing","objectResizing","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","isTablePercentagesForced","hasTableResizeBars","getTableDefaultAttributes","getTableDefaultStyles","tableUseColumnGroup","TableActions","cellSelectionHandler","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","setSelectionFromAction","firstCell","clearSelectedCells","des","guard","effect","noEvents","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","makeCellsHeader$1","unmakeCellsHeader$1","makeColumnsHeader$1","unmakeColumnsHeader$1","makeRowsHeader$1","makeRowsBody$1","makeRowsFooter$1","getTableCellType","getTableColType","getTableRowType","constrainSpan","currentColspan","isColInRange","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","pixels","validateFor","rawAmount","Size","redistributeToPercent","colType","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","redistributeValues","_pc","redistribute$1","floats","normalize","roundDown","floored","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","hUnit","totalHeight","oldHeights","nuHeights","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","convertToNoneSize","rowElements","DefaultRenderOptions","colGroups","tableHeaderCell","tableCell","tableColumn","createRow","createGroupRow","createRows","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRowHeaders","theadRows","tbody","numRowHeaders","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","colHeaders","insertTable","checkInput","headerRows","headerColumns","fakeClipboardItem","FakeClipboardItem","clearData","setRows","clearRows","setColumns","columnsOpt","clearColumns","getSelectionStartCellOrCaption","getSelectionStartCell","eraseTable","cellOrCaption","setSizingMode","isForcedSizing","getTableFromCell","performActionOnSelection","toggleTableClass","toggleTableCellClass","allHaveClass","formatterAction","toggleCaption","postExecute","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","mceTableCellToggleClass","mceTableToggleClass","mceTableToggleCaption","mceTableSizingMode","mceTableCellType","mceTableColType","mceTableRowType","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","before$2","after$3","Response","selectNodeContents","selectNodeContentsUsing","Situs","convertToRange","makeSitus","selectRange","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","traverse","backtrack","_direction","sidestep","advance","successors","ruleOpt","succ","left$1","right$1","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","seekLeft","seekRight","failedUp","failedDown","bridge","beforeBounds","getRect","afterBounds","isRow","verify","beforeOffset","afterOffset","failure","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","br","adjacent","tryBr","analysis","_message","getTop","getBottom","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","findSpot","brNeighbour","fromSitus","tryCursor","situs","tryAgain","tryAt","handle$1","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","MouseSelection","clearstate","applySelection","singleCell","isNonEditableCell","isCellClosestContentEditable","selectContents","isKey","keycode","isUp","isDown","isNavigation","isBackward","by","caretPositionFromPoint","caretRangeFromPoint","availableSearch","beforeSpecial","preprocessRelative","preprocessExact","doSetNativeRange","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","setToElement","selectNodeContents$1","rngGetter","getAtPoint","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","keyboard","clearToNavigate","realEvent","update$1","removeClasses","byClass","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","onMultiple","onSingle","Selections","lazyRoot","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","hasInternalTarget","TableCellSelectionHandler","cellSelection","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","addTempAttr","Event","typeDefs","reqMessage","unsuppMessage","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","dupe","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","compare","dataOption","NoDrag","Movement","noDragState","inDragState","mutation","throttledDrop","runIfActive","namespace","dashNamespace","styles$1","resolve$1","Blocker","layerClass","mdown","mup","mmove","mout","MouseDrag","Mutation","drag","BarMutation","assign","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","isResizable","resizableColumns","resizableCols","colElmOpt","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","destroy$1","tbl","hideBars","showBars","lazySizing","hdirection","vdirection","beforeResize","afterResize","startDrag","refreshBars","TableResize","detached","chrome","ResizeWire","createContainer","barResizerPrefix","syncPixels","computedWidth","TableResizeHandler","selectionRng","tableResize","resizeWire","startW","startRawW","lazyResizingBehaviour","afterCornerResize","isRightEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","setupTable","DomModel","Model","getDateFormat","getTimeFormat","getFormats","shouldInsertTimeElement","getDefaultDateTime","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","defaultFormat","makeMenuItemHandler","_vm","_h","$createElement","_self","tinyConfig","$$v","local","expression","staticRenderFns","validEvents","isValidKey","bindHandlers","initEvent","forEach","bindModelHandlers","modelEvents","$props","normalizedEvents","$emit","outputFormat","initEditor","$watch","prevVal","$listeners","uuid","now","isTextarea","normalizePluginArray","mergePlugins","initPlugins","inputPlugins","isNullOrUndefined","createState","scriptLoaded","CreateScriptLoader","injectScriptTag","scriptTag","referrerPolicy","getElementById","reinitialize","ScriptLoader","editorProps","apiKey","cloudChannel","Boolean","tinymceScriptSrc","__assign","arguments","renderInline","renderIframe","initialise","finalInit","elementId","inlineEditor","Editor","created","watch","setMode","mounted","$el","scriptSrc","beforeDestroy","deactivated","activated","typeof","theme","branding","image_caption","toolbar_sticky","imagetools_cors_hosts","images_upload_handler","content_style","methods","imageUploadHandler","blobInfo","onUploadProgress","computed","assumeExternalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","useQuickLink","sanitizeList","sanitizeWith","extracter","sanitize","createUi","ListOptions","isLink","getHref","collectNodesInRange","cloneContents","applyRelTargetRules","isUnsafe","rels","addTargetRules","removeTargetRules","inArray","newRels","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","isInAnchor","getAnchorText","anchorElm","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getTextInlineElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","newRel","updateLink","createLink","linkImageFigure","linkDomMutation","attachState","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","cls","sanitizeData","uriOptions","allow_html_data_urls","allow_script_urls","allow_svg_data_urls","isDomSafe","sanitizedData","fig","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","linkCatalog","persistentData","getTitleFromUrlChange","getTextFromUrlChange","onUrlChange","onCatalogChange","DialogChanges","delayedConfirm","tryEmailTransform","suggestMailTo","tryProtocolTransform","defaultLinkProtocol","suggestProtocol","DialogConfirms","anchorNodes","AnchorListOptions","ClassListOptions","parseJson","getLinks","extractor","linkList","optItems","noneItem","LinkListOptions","getRels","isTargetBlank","enforceSafe","safeRelExtractor","sanitizer","RelOptions","fallbacks","getTargets","TargetOptions","nonEmptyAttr","extractFromAnchor","onlyText","linkClass","linkNode","links","optNode","flags","titleEnabled","DialogInfo","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","appendClickRemove","createEvent","initMouseEvent","getLink","getSelectedLink","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","gotoSelectedLink","setupGotoLinks","toggler","toggleEnabledState","toggleUnlinkState","hasLinks$1","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","getLinkText","addContextForm","getGlobal","getTinymce","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","showAccessibilityOptions","isAutomaticUploadsEnabled","hasUploadUrl","hasUploadHandler","parseIntAndGetMax","val1","val2","getImageSize","onload","onerror","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","imgElm","selectImage","blobToDataUri","reader","FileReader","readAsDataURL","isPlaceholderImage","isSafeImageUrl","getHspace","marginLeft","marginRight","getVspace","marginTop","marginBottom","hasCaption","updateAttrib","wrapInFigure","figureElm","removeFigure","normalizeStyle","normalizeCss","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","borderStyle","getBorderStyle","isFigure","isImage","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","updateAlt","normalized","normalizeCss$1","mergedCss","compressed","getSelectedImage","splitTextBlock","textBlockElements","parentElm","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","sanitizeImageData","insertOrUpdateImage","partialData","selectedImageData","isGroup","findEntryDelegate","findEntry","optList","ListUtils","makeTab$2","AdvTab","makeTab","urlListSanitizer","futureImageList","hasAdvTab$1","hasUploadTab$1","hasUploadUrl$1","hasUploadHandler$1","hasDescription$1","hasImageTitle$1","hasDimensions$1","hasImageCaption$1","hasAccessibilityOptions","automaticUploads","prependURL","preUrl","makeItems","imageUrl","imageDescription","imageTitle","imageDimensions","getDialogContainerType","useColumns","makeTab$1","MainTab","UploadTab","prevImage","prevAlt","fromImageData","images","fileinput","toImageData","removeEmptyAlt","addPrependUrl2","srcURL","prependUrl","addPrependUrl","formFillFromMeta2","formFillFromMeta","calculateImageSize","helpers","imageSize","updateImagesDropdown","changeSrc","changeImages","changeFileInput","blobUri","URL","createObjectURL","finalize","revokeObjectURL","updateSrcAndSwitchTab","dataUrl","createBlobCache","uploadImage","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","submitHandler","finalData","editorUpload","uploadImagesAuto","blobCache","filename","base64","stylesArg","upload","Dialog","hasImageClass","toggleContentEditableState","toggleContentEditable","S","O","I","E","P","R","C","D","M","U","A","F","T","L","N","B","G","H","W","V","X","Y","q","J","K","Z","$","Q","ee","oe","te","drawImage","ne","ae","Image","XMLHttpRequest","responseType","send","le","atob","Uint8Array","Blob","de","HTMLCanvasElement","toBlob","toDataURL","ce","ue","he","pe","ge","littleEndian","dataView","DataView","readByteAt","buffer","byteLength","getUint8","ye","be","we","ve","xe","Se","Oe","Ie","Ee","Pe","274","270","271","272","305","34665","34853","Re","36864","40961","40962","40963","36867","33434","33437","34855","37377","37378","37383","37384","37385","37386","41986","41987","41990","41988","41992","41993","41994","Ce","0","1","2","3","4","De","513","514","Me","ColorSpace","MeteringMode","5","6","255","LightSource","9","10","11","12","13","14","15","17","18","19","20","21","22","23","24","Flash","7","16","25","29","31","32","65","69","71","73","77","79","89","93","95","ExposureMode","WhiteBalance","SceneCaptureType","Contrast","Saturation","Sharpness","GPSLatitudeRef","78","83","GPSLongitudeRef","87","Ue","Ae","Fe","Te","Orientation","ImageDescription","Make","Software","ExifIFDPointer","GPSInfoIFDPointer","Le","ExifVersion","PixelXDimension","PixelYDimension","DateTimeOriginal","ExposureTime","FNumber","ISOSpeedRatings","ShutterSpeedValue","ApertureValue","FocalLength","DigitalZoomRatio","ke","GPSVersionID","GPSLatitude","GPSLongitude","JPEGInterchangeFormat","JPEGInterchangeFormatLength","Ne","onloadend","readAsArrayBuffer","ze","rawHeaders","tiff","exif","gps","Be","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","toCanvas","Ge","He","je","We","Ve","Xe","Ye","qe","putImageData","Je","Ke","Ze","$e","Qe","et","tt","PI","cos","sin","rt","ot","nt","at","it","lt","dt","exp","ct","ut","mt","ht","gt","ft","yt","rotate","bt","invert","sharpen","emboss","saturate","contrast","grayscale","sepia","colorize","gamma","exposure","crop","exifRotate","wt","onreadystatechange","readyState","withCredentials","setRequestHeader","vt","xt","St","Ot","It","readAsText","Et","Pt","encodeURIComponent","Rt","Ct","Dt","Mt","Ut","At","Ft","Tt","Lt","kt","_t","Nt","zt","Bt","Gt","Ht","Xt","Yt","jt","Wt","Vt","URI","qt","Jt","getByUri","Kt","Zt","uri","Delay","$t","_scanForImages","Qt","er","rr","ar","ir","sr","lr","dr","cr","ur","mr","hr","gr","pr","fr","yr","wr","vr","xr","Sr","Or","Ir","Er","Pr","Rr","Cr","Dr","Mr","Ur","Ar","Fr","Tr","Lr","kr","_r","Nr","zr","Br","Gr","Hr","changedTouches","jr","Wr","xMul","yMul","deltaW","deltaH","geom","Rect","scrollWidth","screenX","screenY","VK","SPACEBAR","Observable","setClampRect","setRect","getInnerRect","setInnerRect","setViewPortRect","Vr","Xr","Yr","qr","Jr","Kr","barComponents","renderFinal","onZoom","inflate","Zr","$r","Qr","eo","undo","redo","canUndo","canRedo","addState","destroyState","getTempState","setTempState","applyTempState","destroyTempState","existingApi","renderInitial","renderChange","ro","PluginManager","requireLangPack","mceImageRotateLeft","mceImageRotateRight","mceImageFlipVertical","mceImageFlipHorizontal","mceEditImage","typeOf$1","isEquatableType","compareFn","contramap","eqa","tripleEq","eqString","eqArray","eqSortedArray","eqRecord","kx","ky","eqAny","tx","ty","is$4","apply$1","indexOf$1","map$3","each$e","filter$5","findUntil$1","findIndex$2","last$3","unique$1","hasOwnProperty$2","each$d","filter$4","equal$1","stringArray","isArrayLike","toArray$1","each$c","filter$3","reduce","iteratee","accumulator","thisArg","trim$3","lTrim","rTrim","isEmpty$3","repeat","platform$2","platform$1","browser$1","windowsPhone","Env","documentMode","cacheSuffix","canHaveCSP","whiteSpaceRegExp$1","trim$2","is$3","makeMap$4","delim","resolvedItems","hasOwnProperty$1","extend$3","exts","ext","walk$4","resolve$2","explode$3","_addCacheSuffix","hasOwn","isComment$1","isElement$7","isText$b","isDocument$2","isDocumentFragment$1","remove$b","hasNone","clone$4","read$4","remove$a","remove$9","remove$8","fromDom$2","fromPoint$2","recurse","parents$1","filterSelf","prevSiblings","nextSiblings","childNodesCount","getHead","getStyleContainer","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","isElement$6","lowerCasedName","lowerCasedNames","matchStyleValues","cssValue","hasAttributeValue","isBogus$2","isBogusAll$1","isTable$2","isTextareaOrInput","isText$a","isCData","isPi","isDocument$1","isBr$6","isImg","isContentEditableTrue$3","isContentEditableFalse$a","isTableCell$3","isTableCellOrCaption","isMedia$2","isListItem$2","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","castOffsetParent","ancestor$3","sibling$1","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","_setReferrerPolicy","addStyle","removeStyle","styleContainer","getOrCreateState","passed","failed","urlWithSuffix","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheets","styleSheet","ownerNode","linkElem","contentCssCors","loadAll","loadedUrls","allSettled","reason","unloadAll","create$d","WeakMap","forElement","referenceElement","rootDom","sl","instance","DomTreeWalker","findSibling","findPreviousNode","startName","siblingName","tableCells","tableSections","headings","listItems$1","wsElements","wrapBlockElements","lazyLookup","isBlock$2","isTable$1","isInline$1","isBr$5","isTextBlock$2","isListItem$1","isTableSection","isTableCell$2","isWsPreserveElement","isWrapBlockElement","isWrapElement","isZwsp$1","getLastChildren$1","rawNode","removeTrailingBr","allBrs","brs","createPaddingBr","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","ZWSP$1","isElement$5","isText$9","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","hasContent","insertInline$1","endsWithCaretContainer$1","startsWithCaretContainer$1","isBeforeInline","isAtStart","isAfterInline","isAtEnd","insertBlock","blockNode","trimBogusBr","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$2","isContentEditableFalse$9","isBr$4","isText$8","isInvalidTextElement","isAtomicInline","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic$1","isEditableCaretCandidate$1","whiteSpaceRegExp","isWhitespaceText","isCollapsibleWhitespace$1","isNewLineChar","isNewline","normalize$4","tabSpaces","isStartOfContent","isEndOfContent","tabSpace","normalizedText","pcIsSpace","hasWhitespacePreserveParent","rootElement","isWhitespace$1","isContent$1","isBookmark","isBogus$1","isBogusAll","isEmptyNode","skipBogus","brCount","isEmpty$2","isSpan","isInlineContent","surroundedByInlineContent","prevIsInline","nextIsInline","isBookmarkNode$2","isKeepTextNode","isKeepElement","trimNode","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","128","130","131","132","133","134","135","136","137","138","139","140","142","145","146","147","148","149","150","151","152","153","154","155","156","158","159","baseEntities","reverseEntities","nativeDecode","buildEntitiesLookup","itemList","entity","namedEntities","encodeRaw","encodeNumeric","encodeNamed","entities","resolveEntities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","decode","Entities","lookupCache","mapCache","dummyObj","makeMap$2","each$b","extend$2","explode$2","split$1","createMap","extendWith","getTextRootBlockElements","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","childNames","ni","addAttrs","schemaItem","html4PhrasingContent","html4BlockContent","video","audio","script","compileElementMap","Schema","patternElements","customElementsMap","specialElements","createLookupTable","schemaType","schemaItems","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whitespaceElementsMap","selfClosingElementsMap","voidElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","validElements","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","validElementsArr","globalAttributesOrder","ei","elementName","outputName","attrData","paddEmpty","removeEmpty","removeEmptyAttrs","attrDatas","al","attrType","attrPrefix","attributesRequired","attributesDefault","attributesForced","forcedValue","validValues","attrPattern","attributePatterns","patternElement","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","padd_empty_block_inline_children","paddInEmptyBlock","custom_elements","valid_children","extended_valid_elements","dd","th","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","seal","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","getSpecialElements","attrPatterns","getCustomElements","Styles","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","compress2","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","serializeStyles","elemName","validStyleList","styleList","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","isNativeEvent","hasIsDefaultPrevented","needsNormalizing","clone$3","originalEvent","normalize$3","fallbackTarget","srcElement","defaultPrevented","cancelBubble","isImmediatePropagationStopped","eventExpandoPrefix","mouseEventRe","addEvent","removeEvent","isMouseEvent","fix","eventDoc","bindOnReady","eventUtils","domLoaded","isDocReady","readyHandler","EventUtils","expando","hasFocusIn","callbackList","defaultNativeHandler","executeHandlers","namesList","nativeHandler","fakeName","eventMap","ci","newCallbackList","parentWindow","each$a","internalStyleName","numericalCssMap","legacySetAttribute","camelCaseToHyphens","findNodeIndex","lastNodeType","updateInternalStyleAttr","convertStyleToString","cssName","applyStyle$1","$elm","normalizedName","setupAttrHooks","keepValues","keep_values","keepUrlHook","sugarElm","internalName","attrHooks","DOMUtils","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","_get","defaultVal","hook","getAttribs","originalValue","onSetAttrib","attrElm","root_element","getViewPort","argWin","getPos$1","update_styles","resolvedRoot","selectorVal","_findSib","getPrev","isParentNode","setHTML","newElm","outHtml","frag","keepChildren","$node","removeAllAttribs","removeAttributeNode","styleElm","loadCSS","uniqueId","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","replaceChild","attrNode","findCommonAncestor","isNonEmptyElement","whitespaceElements","nonEmptyElements","bogusVal","splitElm","replacementElm","beforeFragment","afterFragment","rv","boundTarget","boundName","boundFunc","fire","dumpRng","DOM$b","QUEUED","LOADING","LOADED","FAILED","states","queue","scriptLoadedCallbacks","queueLoadedCallbacks","loading","cleanup","loadScripts","scripts","execCallbacks","processResults","failures","loadScript","processQueue","nextQueuedItem","uniqueScripts","isRaw","isTokenised","currentCode","getLanguageData","setCode","newCode","getCode","langData","translation","getLangData","textstr","removeContext","substitued","$1","$2","isRtl$1","hasCode","I18n","AddOnManager","_listeners","runListeners","matchedListeners","isLoaded","isAdded","loadLanguagePack","languages","language","wrappedLanguages","languageLoad","waitFor","addOn","createUrl","baseUrl","resource","addOnUrl","urlString","lastIndexOf","ThemeManager","ModelManager","repeatable","intervalId","clearInterval","functionToRepeat","setInterval","annotation","dataAnnotation","dataAnnotationId","dataAnnotationActive","dataAnnotationClasses","dataAnnotationAttributes","isRoot$1","annotationName","an","newStart","findMarkers","isAnnotation","isBogusElement","findAll","nodesAlready","setup$x","changeCallbacks","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","toggleActiveAttr","onNodeChange","getNames","addListener","setup$w","dataAnnotation$1","identifyParserNode","removeDirectAnnotation","customAttrNames","customClasses","newClassList","persistent","create$c","deep$1","TextWalker","TextSeeker","isBlockBoundary","newOffset","round$2","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove$1","halfHeight","isBelow$1","containsXY","boundingClientRectFromRects","prevRect","distanceToRectEdgeFromXY","cx","cy","overlapY","r1","r2","clamp$2","getSelectedNode","getNode$1","safeOffset","getNodeUnsafe","extendingChars","isExtendingChar","isElement$4","isCaretCandidate$2","isFloated","isValidElementCaretCandidate","isNotPre","isText$7","isBr$3","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","ec","so","getBoundingClientRect$1","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","trimEmptyTextNode$1","insertNode","insertFragment","rangeInsertNode","isText$6","isBogus","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","parentsUntil$1","create$b","outputOffset","resolvePathItem","findTextPosition","targetOffset","dataLen","nodeOffset","isContentEditableFalse$8","getNormalizedTextOffset$1","trimmedOffset","getPoint","getLocation","fakeCaret","isFakeCaret","moveEndPoint$1","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","getBookmark$2","getUndoBookmark","isInlinePattern","isBlockPattern","normalizePattern","formatOrCmd","onFormat","onCommand","commandValue","getBlockPatterns","getInlinePatterns","createPatternSet","dynamicPatternsLookup","inlinePatterns","blockPatterns","fromRawPatterns","fromRawPatternsLookup","lookupFn","rawPatterns","deviceDetection$1","DOM$a","getHash","isRegExp","stringOrObjectProcessor","bodyOptionProcessor","bodyObj","documentBaseUrl","_ctx","getIframeAttrs","getDocType","getDocumentBaseUrl","getContentSecurityPolicy","shouldPutBrInPre$1","getNewlineBehavior","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","getFontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","getThemeUrl","getModel","getModelUrl","isInlineBoundariesEnabled","getPreviewStyles","canFormatEmptyLines","getFormatNoneditableSelector","getCustomUiSelector","hasHiddenInput","shouldPatchSubmit","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeAriaText","getSetupCallback","getInitInstanceCallback","getUrlConverterCallback","getAutoFocus","shouldBrowserSpellcheck","getProtect","shouldPasteBlockDrop","shouldPasteDataImages","getPastePreProcess","getPastePostProcess","getPasteWebkitStyles","shouldPasteRemoveWebKitStyles","shouldPasteMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getPasteTabSpaces","shouldAllowHtmlDataUrls","getTextPatterns","getTextPatternsLookup","getNonEditableClass","getEditableClass","getNonEditableRegExps","shouldPreserveCData","hasTextPatternsLookup","getFontStyleValues","getFontSizeClasses","isEncodingXml","getAllowedImageFileTypes","hasTableTabNavigation","isElement$3","isText$5","removeNode$1","trimCount","trimmedText","deleteZwspChars","deleteData","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","isContentEditableFalse$7","isMedia$1","isTableCell$1","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","lastVisualCaret","cursorInterval","caretBlock","isInlineFakeCaretTarget","startBlink","caretState","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableTrue$1","isContentEditableFalse$6","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$2","isText$4","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","getEditingHost","isCETrue","getParentBlock$3","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","isMoveInsideSameBlock","inSameBlock","HDirection","isContentEditableFalse$5","isText$3","isBr$2","isCaretCandidate","isAtomic","isEditableCaretCandidate","getParents$3","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","Forwards","startPos","innerNode","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","currentNode","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","isForwardBookmark","addBogus","resolveCaretPositionBookmark","endPos","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","markerParent","otherMarker","appendData","resolvePaths","resolveId","spos","epos","resolveIndex","getBookmark$1","isBookmarkNode$1","expected","isNbsp","isWhiteSpace","isContent","getRanges$1","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","getCellsFromEditor","getSel","getClosestTable","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","moveEndPoint","hasAnyRanges","runOnRanges","fakeSelectionNodes","fakeNodeRng","fillBookmark","isNode","isElementNode$1","isElementDirectlySelected","selectedAttr","isEditable$3","preserveSelection","shouldMoveStart","selectedNodeBeforeAction","isSelectedBeforeNodeNoneditable","isBeforeNodeStillNoneditable","moveStartToNearestText","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","allowSpaces","isEmptyTextNode$1","isWrapNoneditableTarget","baseDataSelector","formatNoneditableSelector","isWrappableNoneditable","replaceVars","vars","isEq$5","str1","strValue","getTextDecoration","decoration","getParents$2","isFormatPredicate","isVariableFormatName","hasVariableValues","isVariableValue","fieldValues","areSimilarFormats","otherFormatName","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isWrappingBlockFormat","isNonWrappingBlockFormat","isMixedFormat","shouldExpandToSelector","getParents$1","isWhiteSpaceNode","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","textOffset","spaceResult","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","block_expand","isSelfOrParentBookmark","expandRng","includeTrailingSpace","startPoint","endPoint","walk$3","firstNode","collectSiblings","findEndPoint","walkBoundary","validBlocks","isZeroWidth","wrapName","applyWordGrab","applyAnnotation","masterUId","decorate","directAnnotation","otherData","attributeNames","makeAnnotation","eDoc","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","masterUid","Annotator","removeAnnotations","annotationChanged","removeAll","BookmarkManager","isXYWithinRange","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","fireFormatApply","fireFormatRemove","fireBeforeSetContent","fireSetContent","fireBeforeGetContent","fireGetContent","fireAutocompleterStart","fireAutocompleterUpdate","fireAutocompleterEnd","firePastePreProcess","firePastePostProcess","firePastePlainTextToggle","ESC","PAGE_UP","PAGE_DOWN","END","HOME","modifierPressed","elementSelectionAttr","controlElmSelector","resizeHandles","nw","sw","ControlSelection","editableDoc","rootDocument","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTargets","firstElementChild","createGhostElement","setSizeProp","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","showResizeRect","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","handleElm","throttledShowResizeRect","removeSelected","isChildOrEqual","updateResizeRect","composing","controlElm","disableGeckoResize","startElm","create$a","getStart$2","toNative","getDomRange","isEq$4","rng1","findParent","hasParent$1","hasParentWithName","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","newContainer","RangeUtils","normalizedRng","compareRanges","getCaretRangeFromPoint","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","createMarker$1","elementMarker","withMarker","preserveWith","_s","applyWithMarker","withScrollEvents","startElement","endElement","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scroller","scrollRangeIntoView","hasFocus$1","clamp$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","bookmarkToNativeRng","newBookmark","isEditorUIElement$1","FocusManager","isEditorUIElement","wrappedSetTimeout","wrappedSetInterval","setEditorInterval","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerMouseUp","registerEditorEvents","documentFocusInHandler","DOM$9","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","registerEvents$1","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","setup$v","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasUiFocus","hasEditorOrUiFocus","focusEditor","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","getEndpointElement","real","getEnd$1","skipEmptyTextNodes","endElm","processRanges","create$9","typeLookup","walk$2","isEmptyTextNode","AstNode","selfAttrs","cloneAttrs","selfAttr","refNode","whitespace","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","findMatchingEndTagIndex","startTagRegExp","endTagRegExp","startMatch","endMatch","trimHtml$1","tempAttrs","trimContentRegExp","trimInternal","bogusAllRegExp","getTempAttrs","matchLength","endTagIndex","trimExternal","trimEmptyContents","emptyRegExp","getPlainTextContent","offscreenDiv","bogusElements","bogusValue","getContentFromBody","shouldTrim","getContentInternal","makeMap$1","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","cdata","comment","pi","doctype","HtmlSerializer","writer","8","sortedAttrs","elementRule","nonInheritableStyles","Set","nonInheritableStylesArr","shorthandStyleProps","getStyleProps","isNonInheritableStyle","hasInheritableStyles","getLonghandStyleProps","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","parentValue","nodeStyleProp","propExists","longhandProps","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","dropLast","parentsUntil","parentsAndSelf","navigateIgnoreEmptyTextNodes","getClosestBlock$1","isAtBeforeAfterBlockBoundary","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$1","isBeforeBr$1","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","isCefBlock","isSiblingCefBlock","isBeforeCefBlock","nextPos","isNextCefBlock","isAfterCefBlock","isPrevCefBlock","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","isWhiteSpaceAt","hasNbsp","normalizeNbspMiddle","normalizeNbspAtStart","makeNbsp","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","lastPos","normalizeNbsps","normalizeNbspsInEditor","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","insertData","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition","findCaretPosOutsideElmAfterDelete","setSelection$1","eqRawNode","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","strongRtl","hasStrongRtl","isInlineTarget","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","execCommandIgnoreInputEvents","inputBlocker","execEditorDeleteCommand","execNativeDeleteCommand","execNativeForwardDeleteCommand","isBeforeRoot","isTextBlockOrListItem","getParentBlock$2","paddEmptyBody","no_selection","willDeleteLastPositionInElement","fromPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","deleteRangeContents","deleteContents","lastBlock","additionalCleanupNodes","isRootFromElement","getTableCells","getTableDetailsFromRange","getTable","isStartInTable","isEndInTable","isSameTable","isMultiTable","tableCellRng","tableSelection","deleteAction","singleCellTable","fullTable","partialTable","multiTable","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","getCellRng","endCell","getCellRangeFromStartTable","getCellRangeFromEndTable","getTableSelectionFromCellRng","getTableSelections","sameTableSelection","startTableSelection","endTableSelection","getCellIndex","isSingleCellTableContentSelected","optCellRng","unselectCells","otherContentRng","handleSingleTable","handleMultiTable","startTableSelectedCells","endTableSelectedCells","getActionFromRange","cleanCells","getOutsideBlock","handleEmptyBlock","startInTable","emptyBlock","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","outsideBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$2","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$3","backspaceDelete$9","getContentEditableRoot$1","internalAttributesPrefixes","each$9","ElementUtils","internalAttributes","isAttributeInternal","compareObjects","obj1","obj2","matchNode$1","nodeFilters","attributeFilters","nl","findMatchingNodes","childNode","runFilters","matchRecord","filteringAttributes","valueMatches","paddEmptyNode","astNode","isPaddedWithNbsp","hasOnlyChild","isPadded","isLineBreakNode","removeOrUnwrapInvalidNode","originalNodeParent","cleanInvalidNodes","onCreate","nonSplittableElements","newParent","normalizeBlockSelectionRange","newEndPos","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","caretWalker","newCaretPos","findLastOf","insertMiddle","insertBefore$1","insertAfter$1","insertAtCaret$1","liTarget","liElms","BEGINNING","isAt","newPosNode","mergeableWrappedElements","shouldPasteContentOnly","isPastingSingleElement","isWrappedElement","isPastingInTheSameBlockTag","isPastingInContentEditable","isTableCell","isTableCellContentSelected","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","elementUtils","styleConflict","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","nextRng","parentEditableElm","findNextCaretRng","deleteSelectedContent","insertHtmlAtCaret","bookmarkHtml","caretElement","parserArgs","_selectionOverrides","showBlockCaretContainer","markerNode","toExtract","invalidChildren","getNodeFilters","getAttributeFilters","isTreeNode","setEditorHtml","noSelection","setContentString","padd","forcedRootBlockName","isRootContent","trimmedHtml","setContentTree","setContentInternal","isEq$3","matchesUnInheritedFormatSelector","inherit","matchParents","similar","matchedNode","matchName","matchItems","matchAttributes","expectedValue","isEmptyValue","match$2","matchAll","matchedFormatNames","checkedMap","rawElm","matchAllOnNode","formatNames","matchSimilar","ZWSP","importNode","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","fill","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","validFormats","matchedFormats","uniqueFormats","fmtName","clonedFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","setup$u","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","isPre","addPostProcessHook","hooks","postProcess$1","hasPreSibling","pre","joinPre","pre1","pre2","sPre2","preBlocks","listItemStyles","hasListStyles","findExpandedListItemFormat","getExpandedListItemFormat","isRngStartAtStartOfElement","isRngEndAtEndOfElement","isEditableListItem","getFullySelectedBlocks","getFullySelectedListItems","getPartiallySelectedListItems","each$8","isElementNode","findElementSibling","mergeSiblingsNodes","isPrevEditable","isNextEditable","tmpSibling","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$7","isEq$2","isTableCellOrRow","isChildOfInlineParent","lastIdx","normalizeTableSelection","wrapWithSiblings","isColorFormatAndAnchor","rootBlockElm","forcedRootBlock","list_block","processFormatAttrOrStyle","removeEmptyStyleAttributeIfNeeded","compareNode","stylesModified","styleName","normalizedStyleValue","remove_similar","removeListStyleFormats","liFmt","removeFormatInternal","ceFalseOverride","preserveAttributes","preserve_attributes","attrsToPreserve","valueOut","removeFormat$1","newName","findFormatRoot","formatRoot","removeFormatFromClone","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","removeNodeFormat","currentNodeMatches","textDecorations","textDecoration","removeRngStyle","each$6","mergeTextDecorationsAndColor","processTextDecorationsAndColor","parentTextDecoration","mergeBackgroundColorAndFontSize","backgroundColor","hasFontSize","mergeSubSup","inverseTagDescendants","mergeWithChildren","mergeWithParents","merge_with_parents","each$5","canFormatBR","validBRParentElements","hasCaretNodeSibling","applyStyles","styleVal","applyFormat$1","setElementFormat","onformat","applyNodeStyle","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","isMatchingWrappingBlock","canRenameBlock","isEditableDescendant","isValidBlockFormatForNode","canWrapNode","isWrappableNoneditableElm","isValidWrapNode","isCaret","isCorrectFormatForNode","currentWrapElm","lastContentEditable","contentEditableValue","getChildCount","mergeStyles","childElement","childCount","fake","hasVars","setup$t","registeredFormatListeners","updateAndFireChangeCallbacks","nodeOrRange","fallbackElement","matchingNode","isMatchingNode","matchingFormat","isUnableToMatch","registeredCallbacks","runIfChanged","withSimilar","withoutSimilar","withVars","addListeners","formatChangeItems","toAppendTo","removeListeners","formatChangedInternal","_typeof","Symbol","iterator","_setPrototypeOf","setPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","_construct","Parent","Class","Constructor","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","TypeError","isFrozen","getOwnPropertyDescriptor","create$8","_ref","thisValue","Func","arrayForEach","unapply","arrayPop","arrayPush","stringToLowerCase","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","unconstruct","_len","_len2","_key2","addToSet","lcElement","object","newObject","lookupGetter","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","_createTrustedTypesPolicy","trustedTypes","createPolicy","ATTR_NAME","currentScript","policyName","createDOMPurify","DOMPurify","originalDocument","DocumentFragment","HTMLTemplateElement","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","getNextSibling","getParentNode","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","createHTMLDocument","PARSER_MEDIA_TYPE","transformCaseFunc","MUSTACHE_EXPR$1","ERB_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","namespaceURI","parentTagName","_forceRemove","_removeAttribute","getAttributeNode","_initDocument","leadingWhitespace","dirtyPayload","parseFromString","createDocument","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","_isNode","_executeHook","entryPoint","_sanitizeElements","allowedTags","_basicCustomElementTest","_isValidAttribute","lcTag","_sanitizeAttributes","hookEvent","keepAttr","allowedAttributes","_attr","forceKeepAttr","setAttributeNS","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","oldNode","returnNode","toStaticHTML","nodeIterator","shadowroot","serializedHTML","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","purify","explode$1","create$7","filters","addFilter","getFilters","removeFilter","newCallbacks","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeFilter","convertToSTag","addFilters","convert_fonts_to_spans","font_size_legacy_values","inline_styles","blobUriToBlob","extractBase64Data","parseDataUri","base64Encoded","extractedData","decodeURIComponent","buildBlob","dataUriToBlob","uriToBlob","count$1","uniqueId$1","processDataUri","dataUri","base64Only","generateBlobInfo","btoa","createBlobInfo$1","dataUriToBlobInfo","getByData","imageToBlobInfo","imageSrc","invalidDataUri","isBogusImage","isInternalImageSource","registerBase64ImageFilter","blob_cache","processImage","inputSrc","remove_trailing_brs","prevName","lastParent","appendRel","addNoOpener","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","each$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","safeSvgDataUrlElements","blockSvgDataUris","allowSvgDataUrls","decodeUri","encodedUri","isInvalidUri","decodedUri","baseUri","isProtocolRelative","toAbsPath","urlMatch","userInfo","uriComponents","pathname","pathMatch","relativeUri","tu","uu","toRelPath","noHost","absoluteUri","defaultPort","breakPoint","normalizedBase","nb","normalizedPath","baseParts","pathParts","outPath","noProtoHost","extend$1","basePurifyConfig","filteredUrlAttrs","internalElementAttr","getPurifyConfig","mimeType","setupPurify","purify$1","lcTagName","isInternalElement","bogus","transferChildren","nativeParent","nativeChild","walkTree","preprocessors","postprocessors","traverseOrder","whitespaceCleaner","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isTextRootBlockEmpty","isAtEdgeOfBlock","neighbour","isNodeEmpty","getRootBlockName","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","root_name","parseAndSanitizeWithContext","rootName","isSpecialRoot","wrappedHtml","removeNodeFilter","removeAttributeFilter","findInvalidChildren","addRootBlocks","rootBlockName","rootBlockNode","forced_root_block_attrs","whitespacePre","whitespacePost","invalidFinder","matchFinder","topLevelChildren","otherChildren","exports","serializeContent","withSerializedContent","fireEvent","serializedContent","eventArgs","preProcessGetContent","postProcessGetContent","processedEventArgs","preProcessSetContent","postProcessSetContent","tableModel","tableRow","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listStyles","_style","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","isCollapsibleWhitespace","getInnerText","bin","getContextNodeName","parentBlockOpt","contextNodeName","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","extractSelectedContent","setupArgs$3","getSelectedContentInternal","defaultedArgs","updatedArgs","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","getOuterHtml","insertAt","removeAt","applyDiff","fragments","currentFragments","lazyTempDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","addUndoLevel$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","setDirty","clear$1","extra$1","callback1","callback2","redo$1","undo$1","hasUndo$1","hasRedo$1","transact$1","beforeChange","ignore$1","addVisualInternal","matchedElm","makePlainAdaptor","bindEvents","hasUndo","hasRedo","addDecoration","removeDecoration","makeRtcAdaptor","rtcEditor","defaultVars","_undoManager","_locks","_node","_similar","_rfl","_details","getRawModel","makeNoopAdaptor","nul","isRtc","getRtcSetup","rtcPlugin","setup$s","editorCast","rtcInstance","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","addUndoLevel","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","toggleFormat","getContent$2","setContent$2","insertContent$1","getSelectedContent","addVisual$1","addAutocompleterDecoration","removeAutocompleterDecoration","getContent$1","walkPastBookmark","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","normalizer","innerTextNode","rngSetContent","prevText","nextText","setupArgs$2","cleanContent","contextBlock","contextArgs","setContent$1","cleanedContent","createContextualFragment","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","matchedSelectors","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","getRng$1","bookmarkManager","select$1","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","controlSelection","htmlParser","hasChildren","preserve_cdata","trimTrailingBr","brNode1","brNode2","preProcess$1","oldDoc","clonedNode","impl","shouldFireEvent","hasEventListeners","process$1","postProcess","outArgs","getHtmlFromNode","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializerImpl","addRules","setRules","DomSerializer","domSerializer","defaultFormat$1","setupArgs$1","setupArgs","removedOptions","removedPlugins","getRemovedOptions","settingNames","setting","getRemovedPlugins","plugin","pluginNames","logRemovedWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","optionsMessage","logWarnings","DOM$8","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","restoreForm","_mceOldSubmit","formEventDelegate","save","is_removing","unbindAllNativeEvents","automatic","destroyed","_beforeUnload","CreateIconManager","iconPack","IconManager","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","unimplemented","NotificationManager","notifications","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","serviceMessage","WindowManagerImpl","WindowManager","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","windowManagerImpl","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","themeLoadError","modelLoadError","pluginInitError","initError","isContentCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","contentCssFile","appendContentCssFromSettings","getAllImages","ImageScanner","uploadStatus","cachedPromises","isUploaded","promises","imageInfo","newPromise","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","isPending","markPending","markUploaded","removeFailed","seed","rnd","BlobCache","mimeToExt","mime","toBlobInfo","findFirst","cachedBlobInfo","removeByUri","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","xhr","credentials","onprogress","responseText","basePath","FormData","uploadHandler","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","uploadUri","dispatchChange","isValidDataUriImage","resultItem","replaceBlobUris","source_view","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","strike","forecolor","hilitecolor","fontname","lineheight","lineHeight","fontsize_class","blockquote","subscript","superscript","removeformat","genericBase","cellBase","cellFormats","tablecellbackgroundcolor","tablecellverticalalign","tablecellbordercolor","borderColor","tablecellclass","tableclass","tablecellborderstyle","tablecellborderwidth","FormatRegistry","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","ancestorName","parentRequired","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","parseSelector","previewCss","previewStyles","removeVars","previewFrag","previewElm","rawParentFontSize","parentFontSize","numValue","setup$r","Formatter","formatChangeState","shouldIgnoreCommand","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","setup$q","updatePlaceholder","showPlaceholder","isPlaceholderShown","blockPosition","blockBoundary","getBlockPosition","containerElm","isDifferentBlocks","hasSameParent","parent1","parent2","isEditable$2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$8","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$1","backspaceDelete$7","_forward","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","backspaceDelete$6","getEdgeCefPosition","atStart","isCefAtEdgeSelected","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","deleteElement$1","hideFakeCaret","getAncestorCe","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$5","deleteCaret$2","backspaceDelete$4","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","readLocation","getName","outside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","hasSelectionModifyApi","modify","moveRel","moveByWord","BreakType","walk$1","getBreakType","currentPos","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$4","distanceToRectLeft$1","distanceToRectRight$1","isNodeClientRect","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","VDirection","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","getLastClientRect","positionsUntil","isBelowFn","isAboveLine","isLine","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","newRange","rangeIsInContainerBlock","moveVertically","caretClientRect","getClosestFn","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","lineInfo","moveToLineEndPoint$3","setCaretPosition","setSelected","renderCaretLocation","getPositionFromRange","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","caretValue","renderInsideInlineCaret","inlines","_inline","move$2","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$3","getParentInlines","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$1","backspaceDelete$2","deleteElement","deleteCaret","isNearMedia","backspaceDelete$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","parsedValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","outdent","findAction","deleteCommand","forwardDeleteCommand","setup$p","setup$o","debounceLongpress","isEqualNode","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","createRootBlock","rootNodeName","restoreSelection","insertEmptyLine","setup$n","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","tagHtml","convertRegExpsToNonEditable","nonEditableRegExps","setup$m","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","findBlockCaretContainer","blockCaretContainer","handleBlockContainer","setup$l","isContentEditableFalse$3","moveToCeFalseHorizontally","moveToCeFalseVertically","exitPreBlock","getVisualCaretPosition$1","getHorizontalRange","getVerticalRange","moveH$2","moveV$3","moveToLineEndPoint$1","isCefPosition","selectToEndPoint","curRng","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","insertFn","moveV$2","baseKeyPattern","defaultPatterns","defaultDelayedPatterns","matchesEvent","match$1","matchDelayed","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","isEligible","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","renderBlock","navigateVertically","mover","moveH","moveV","getCellFirstCursorPosition","tabGo","_current","tabForward","tabBackward","rootElements","executeKeydownOverride$4","setup$k","DOM$7","alwaysNext","textBefore","textAfter","scanLeft","scanRight","repeatLeft","isValidTextRange","isWhitespace","stripTrigger","findTrigger","firstChar","findStart","findTriggerIndex","triggerIndex","toLast","isPreviousCharContent","_element","isStartOfWord","getTriggerContext","database","getDatabase","lookupWithContext","startText","autocompleters","lookupByTrigger","ac","fetchResult","maxResults","autocompleterSchema","createAutocompleter","popups","datasetValues","dv","setupEditorInput","setup$j","activeAutocompleter","uiActive","commenceIfNecessary","getAutocompleters","doLookup","newContext","lookupInfo","createAndFireInputEvent","specifics","isComposing","currentTarget","eventPhase","AT_TARGET","originalTarget","explicitOriginalTarget","isTrusted","cancelable","InputEvent","fireFakeInputEvent","fireFakeBeforeInputEvent","executeKeydownOverride$3","applyAction","beforeInput","executeKeyupOverride","setup$i","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$1","getParentBlockName","isListItemParentBlock","hasFirstChild","hasParent","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","insert$3","createNewBlock","newBlockName","containerParent","trimZwsp","isEmptyAnchor","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","startNodeParent","addBrToBlockIfNeeded","shouldEndContainer","insert$2","parentBlockName","isAfterLastNodeInContainer","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","liBlock","parentBlockParent","fakeEventName$1","blockbreak","fakeEventName","hasRightSideContent","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","anchorLocation","linebreak","matchesSelector","shouldInsertBr","shouldBlockNewLine$1","newLineAction","shouldBlockNewLine","_shiftKey","inListBlock","requiredState","inCefBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre","inBrContext","canInsertIntoEditableRoot","rootEditable","predicates","isMatch","insertBreak","logicalAction","handleEnterKeyEvent","setup$h","executeKeydownOverride$2","setup$g","setup$f","executeKeyupAction","isPageUpDown","setNodeChangeBlocker","blocked","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","insertSpaceOrNbspAtSelection","executeKeydownOverride$1","tableTabNavigation","executeKeydownOverride","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","currentPath","internalMimeType","internalHtmlMime","internalMark","unmark","isMarked","isPlainText","openContainer","rootTag","rootAttrs","toBlockElements","tagOpen","tagClose","paragraphs","stitch","pasteBinDefaultContent","create$6","lastRngCell","pasteBinElm","pasteBinClone","isPasteBin","copyAndRemove","pasteBinClones","dirtyWrappers","cleanWrapper","isDefaultPasteBinContent","PasteBin","getLastRng","ignoreElements","trimHtml","trimSpaces","createIdGenerator","getImageMimeType","lowerExt","mimeOverrides","jpg","jpe","jfi","jif","jfif","pjpeg","pjp","preProcess","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","pasteHtml$1","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","linkSelection","insertImage","smartInsertContent","doPaste","pasteHtml","internalFlag","pasteText","encodedText","getDataTransferItems","contentType","hasContentType","clipboardContent","hasHtmlOrText","extractFilename","createBlobInfo","useFileName","pasteImage","imageItem","existingBlobInfo","isClipboardEvent","readFilesAsDataUris","allowedExtensions","extension","getImagesFromDataTransfer","kind","getAsFile","pasteImageData","clipboardData","fileResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","insertClipboardContent","plainTextMode","isInternal","isPlainTextHtml","isAbsoluteUrl$1","registerEventHandlers","pasteBin","pasteFormat","keyboardPastePlainTextState","registerDataImageFilter","isWebKitFakeUrl","isDataUri","isPasteInsert","registerEventsAndFilters","togglePlainTextPaste","setHtml5Clipboard","setClipboardData","contenteditable","offscreenRange","isTableSelection","hasSelectedContent","getCaretRangeFromEvent","isPlainTextFileUrl","plainTextContent","setFocusedRange","draggingInternallyState","dropContent","internalContent","trimmedContent","addPreProcessFilter","filterFunc","rgbRegExp","removeWebKitStyles","webKitStylesOption","webKitStyles","outputStyles","compareInput","outputStyle","preventSummaryToggle","filterDetails","isContentEditableFalse$2","getClosestScope","getClosestCef","findEdgeCaretCandidate","findClosestBlockRange","startRng","clickNode","onTripleClickSelect","FakeCaretPosition","distanceToRectLeft","distanceToRectRight","isInsideY","collidesY","overlap","splitRectsPerAxis","intersectingRects","boundingRect","vertical","clientInfo","Before","After","horizontalDistance","_y","closestChildCaretCandidateNodeRect","caretCandidateRect","getClosestTextNode","distance","deltaDistance","findClosestCaretCandidateNodeRect","sortedRects","horizontalRects","verticalRects","above","below","traverseUp","helper","prevScope","uncheckedChildren","closestCaretCandidateNodeRect","elementAtPoint","closestFakeCaretCandidate","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","scrollPixelsPerInterval","scrollIntervalValue","mouseRangeToTriggerScrollInsideEditor","mouseRangeToTriggerScrollOutsideEditor","isContentEditableFalse$1","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","appendGhostToBody","scrollEditor","behavior","scrollRight","scrollUp","scrollDown","moveGhost","mouseY","mouseX","overflowX","outerMouseY","outerMouseX","dragging","removeElement","isLeftMouseButtonPressed","applyRelPos","relX","ceElm","elmPos","relY","ghost","throttledPlaceCaretAt","state_","targetPos","getRawTarget","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockUnsupportedFileDrop","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","renderFocusCaret","getContentEditableRoot","SelectionOverrides","realSelectionId","isFakeSelectionElement","isFakeSelectionTargetElement","setRange","contentEditableRoot","removeElementSelection","setElementSelection","closestContentEditable","caretInfo","normalizeVoidElementSelection","isRangeInCaretContainer","isWithinCaretContainer","setupOffscreenSelection","realSelectionContainer","selectElement","nodeElm","afterNode","getNormalizedTextOffset","generatePath","generatePathRange","resolvePath","nodePath","resolvedNode","resolvePathRange","generatePathRangeFromRange","cleanEmptyNodes","deleteRng","startParent","endParent","getParentBlock","resolveFromDynamicPatterns","patternSet","beforeText","dynamicPatterns","getBeforeText","stripPattern","firstTextNode","applyPattern$1","isBlockFormatName","formatSet","sortPatterns","findPattern$1","sortedPatterns","findPatterns$1","normalizedMatches","blockText","applyMatches$1","newMarker","rangeFromMarker","createMarker","markerPrefix","pathRange","textEnd","textStart","startParentNode","endParentNode","removeMarker","isReplacementPattern","matchesPattern","patternContent","searchText","startEndIndex","findPatternStartFromSpot","startPattern","nextSpot","findPatternStart","requireGap","startRange","findPattern","endPathRng","endRng","resultsOpt","findPatternsRec","remainingPatterns","startPathRng","patternsWithoutCurrent","applyPattern","patternRange","applyReplacementPattern","markerRange","applyPatternWithContent","startMarker","endMarker","markerEndRange","markerStartRange","patternMarker","addMarkers","matchesWithEnds","findPatterns","applyMatches","matchesWithMarkers","dynamicPatternSet","inlineMatches","blockMatches","handleInlineKey","checkKeyEvent","codes","checkKeyCode","checkCharCode","charCodes","keyCodes","getPatternSet","hasDynamicPatterns","hasPatterns","handleInlineTrigger","Quirks","isGecko","isWebKit","setEditorCommandState","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","documentElementEditingFocus","removeHrOnBackspace","Range","selectControlElements","visualAidsAnchorClass","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","isAllContentSelected","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","setupRtc","DOM$6","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSchemaSettings","mkSerializerSettings","createParser","autoFocus","moveSelectionToFirstCaretPosition","bindPendingEventDelegates","initInstanceCallback","getStyleSheetLoader$1","makeStylesheetLoadingPromises","framedFonts","loadContentCss","fontCss","removeCss","contentCssText","allStylesheets","preInit","spellcheck","protect","loadInitialContent","startContent","initEditorWithInitialContent","contentBodyLoaded","annotator","_nodeChangeDispatcher","setupRtcThunk","setProgressState","_rtcMode","initContentBody","skipWrite","orgVisibility","iframeHTML","DOM$5","createIframeElement","customAttrs","frameBorder","allowTransparency","translatedAriaText","createIframe","boxInfo","iframeTitle","ifr","hidden","DOM$4","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initIcons","iconPackName","currentIcons","loadIcons","svgData","addIcon","initTheme","initModel","renderFromLoadedTheme","renderThemeFalse","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeUi","augmentEditorUiApi","uiApiFacade","renderInfo","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","loadTheme","themeUrl","loadModel","modelUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","loadPlugin","isThemeLoaded","isModelLoaded","loadQueue","getStyleSheetLoader","resetContent","triggerSave","set_dirty","sectionResult","deviceDetection","normalizePlugins","trimmedPlugins","extractSections","sectionOptions","hasSection","getSectionConfig","getMobileOverrideOptions","mobileOptions","defaultMobileOptions","table_grid","object_resizing","toolbar_mode","defaultPhoneOptions","getExternalPlugins","userDefinedExternalPlugins","external_plugins","combinePlugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","processPlugins","defaultOverrideOptions","forced_plugins","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineOptions","defaultOptions","deviceOverrideOptions","extendedOptions","normalizeOptions","registerExecCommands$3","toggleAlign","editorCommands","addCommands","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","JustifyNone","registerQueryStateCommands$1","alignStates","registerCommands$a","registerCommands$9","queryCommandEnabled","trimOrPadLeftRight","processValue$1","trimOrPad","insertAtCaret","insertedContent","registerCommands$8","mceCleanup","_command","insertHorizontalRule","insertText","insertHTML","mceInsertContent","mceSetContent","mceReplaceContent","mceNewDocument","legacyPropNames","isFont","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","getCaretElement","atStartOfNode","bindRange","mapRange","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","lineHeightQuery","specifiedStyle","computedStyle","lineHeightAction","registerExecCommands$2","registerQueryValueCommands","isFormatMatch","registerCommands$7","registerCommands$6","mceAddUndoLevel","mceEndUndoLevel","Undo","Redo","registerCommands$5","Indent","Outdent","registerCommands$4","applyLinkToSelection","linkDetails","mceInsertLink","registerExecCommands$1","listParent","registerQueryStateCommands","registerCommands$3","registerCommands$2","insertParagraph","mceInsertNewLine","InsertLineBreak","registerCommands$1","mceSelectNodeDepth","mceSelectNode","editingHost","registerExecCommands","mceRemoveNode","mcePrint","print","mceFocus","mceToggleVisualAid","EditorCommands","lowerCaseCommand","skip_focus","commandList","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","registerFilters","registerReadOnlyContentFilters","isClickEvent","allowedEvents","isReadOnlyAllowedEvent","getAnchorHrefOpt","processReadonlyEvents","registerReadOnlySelectionBlockers","nativeEvents","EventDispatcher","bindings","toggleEvent","beforeFire","wrappedCallback","currentName","bindingName","filteredHandlers","getEventDispatcher","_eventDispatcher","isNative","toggleNativeEvent","dispatcherArgs","customEventRootDelegates","getEventTarget","eventRoot","isListening","bindEventDelegate","delegates","eventRootElm","editors","EditorObservable","_pendingNativeEvents","stringListProcessor","getBuiltInProcessor","processValue","isBuiltInSpec","getErrorMessage","additionalText","isValidResult","processDefaultValue","create$5","initialOptions","isRegistered","immutable","unset","registered","defaultModes","switchToMode","activeMode","availableModes","oldMode","activate","deactivate","editorReadOnly","registerMode","design","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","isModifier","parseShortcut","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","cmdFunc","normalizeCommandFunc","createShortcut","addSidebar","loadedCSS","isNotDirty","documentBaseURL","_setBaseUrl","baseURI","setupCallback","loadArgs","saveArgs","initialContent","oldState","urlConverterCallback","toRelative","beforeUnloadDelegate","boundGlobalEvents","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","compatMode","releaseDate","tinyMCEPreInit","srcScript","base_url","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","invalidInlineTargets","isInvalidInlineTarget","createId","execCallback","provideResults","initEditors","initCount","createEditor","existingEditor","editorId","editorOptions","addI18n","dataValue","FakeClipboard","relativePosition","targetW","targetH","relChars","findBestRelativePosition","constrainRect","intersect","cropRect","x1","y1","clampRect","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","awaiter","resolveCb","rejectCb","tasks","resultFns","loadErrMsg","runErrMsg","task","waiter","Resource","removeItem","localStorage","LocalStorage","publicApi","TreeWalker","Serializer","Selection","exportToModuleLoaders","module","exportToWindowGlobal","tinyMCE","editorContent","fullscreenState","isFullscreen","siblings$2","fireFullscreenStateChanged","getFullscreenNative","getFullscreenRoot","getFullscreenElement","fullscreenElement","msFullscreenElement","webkitFullscreenElement","getFullscreenchangeEventName","requestFullscreen","sugarElem","msRequestFullscreen","webkitRequestFullScreen","exitFullscreen","sugarDoc","msExitFullscreen","webkitCancelFullScreen","isFullscreenElement","siblings$1","siblingStyles","ancestorPosition","ancestorStyles","bgFallback","matchColor","editorBody","clobberStyles","gatherSiblings","clobber","clobberStyle","backup","bgColor","containerStyles","restoreStyles","clobberedEls","getScrollPos","setScrollPos","viewportUpdate","resizeBinder","scrollBinder","refreshScroll","refreshVisualViewport","toggleFullscreen","editorContainerS","fullscreenRoot","fullscreenInfo","editorContainerStyle","iframeStyle","handleClasses","fullscreenChangeHandler","iframeWidth","containerWidth","containerHeight","containerTop","containerLeft","_evt","newFullScreenInfo"],"mappings":"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WAAY,CACV,CACE,GACA,eAEF,CACE,IACA,aAEF,CACE,KACA,aAEF,CACE,IACA,cAEF,CACE,IACA,YAEF,CACE,IACA,iBAEF,CACE,KACA,sBAEF,CACE,KACA,cAEF,CACE,KACA,iBAEF,CACE,KACA,qBAEF,CACE,KACA,aAEF,CACE,KACA,aAEF,CACE,KACA,cAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,KACA,YAEF,CACE,KACA,mBAEF,CACE,KACA,aAEF,CACE,KACA,YAEF,CACE,KACA,eAEF,CACE,KACA,gBAEF,CACE,KACA,uBAEF,CACE,KACA,aAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,aAEF,CACE,KACA,uBAEF,CACE,KACA,iBAEF,CACE,KACA,cAEF,CACE,KACA,qBAEF,CACE,KACA,qBAEF,CACE,KACA,oBAEF,CACE,KACA,cAEF,CACE,KACA,cAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,2CAEF,CACE,MACA,oCAIN,CACEnlL,KAAM,OACNmlL,WAAY,CACV,CACE,IACA,kBAEF,CACE,IACA,mBAEF,CACE,KACA,mBAEF,CACE,KACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,cAEF,CACE,KACA,UAEF,CACE,KACA,oBAEF,CACE,KACA,kBAEF,CACE,KACA,oBAEF,CACE,IACA,gBAEF,CACE,IACA,kBAEF,CACE,IACA,uBAIN,CACEnlL,KAAM,aACNmlL,WAAY,CACV,CACE,KACA,6CAEF,CACE,KACA,8CAEF,CACE,IACA,2BAEF,CACE,IACA,4BAEF,CACE,KACA,8BAEF,CACE,KACA,+BAEF,CACE,KACA,8BAEF,CACE,KACA,+BAEF,CACE,KACA,+BAEF,CACE,KACA,+BAEF,CACE,GACA,kBAEF,CACE,GACA,qBAEF,CACE,KACA,yBAEF,CACE,KACA,4BAEF,CACE,KACA,WAEF,CACE,KACA,WAEF,CACE,IACA,UAEF,CACE,KACA,YAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,6BAEF,CACE,IACA,wBAEF,CACE,IACA,qBAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,KACA,cAEF,CACE,IACA,mBAEF,CACE,IACA,iBAEF,CACE,KACA,kBAEF,CACE,IACA,uBAEF,CACE,IACA,mBAEF,CACE,IACA,mBAEF,CACE,IACA,qBAEF,CACE,IACA,wBAEF,CACE,IACA,qBAEF,CACE,IACA,6BAIN,CACEnlL,KAAM,eACNmlL,WAAY,CACV,CACE,IACA,qBAEF,CACE,KACA,YAEF,CACE,KACA,kBAEF,CACE,KACA,YAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,KACA,0BAEF,CACE,KACA,mBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,cAEF,CACE,KACA,qBAEF,CACE,KACA,sBAEF,CACE,KACA,iBAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,IACA,YAEF,CACE,KACA,gBAEF,CACE,KACA,SAEF,CACE,KACA,wBAEF,CACE,KACA,WAEF,CACE,KACA,gBAEF,CACE,KACA,YAEF,CACE,KACA,uBAEF,CACE,KACA,qBAEF,CACE,KACA,mBAEF,CACE,KACA,WAIN,CACEnlL,KAAM,iBACNmlL,WAAY,CACV,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,OAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,aAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,SAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,OAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,WAEF,CACE,IACA,YAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,SAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,WAEF,CACE,IACA,QAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,UAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,WAEF,CACE,IACA,MAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,OAEF,CACE,IACA,WAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,WAEF,CACE,IACA,QAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,UAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,WAEF,CACE,IACA,MAEF,CACE,IACA,OAEF,CACE,IACA,eAEF,CACE,IACA,SAEF,CACE,IACA,OAEF,CACE,IACA,WAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,WAIN,CACEnlL,KAAM,UACNmlL,WAAY,CACV,CACE,KACA,eAEF,CACE,IACA,aAEF,CACE,KACA,oBAEF,CACE,IACA,yBAEF,CACE,KACA,iBAEF,CACE,KACA,oBAIN,CACEnlL,KAAM,SACNmlL,WAAY,CACV,CACE,KACA,mBAEF,CACE,KACA,iBAEF,CACE,KACA,oBAEF,CACE,KACA,mBAEF,CACE,KACA,oBAEF,CACE,KACA,mBAEF,CACE,KACA,0BAEF,CACE,KACA,wBAEF,CACE,KACA,2BAEF,CACE,KACA,0BAEF,CACE,KACA,2BAEF,CACE,KACA,aAEF,CACE,KACA,aAEF,CACE,KACA,eAEF,CACE,KACA,mBAEF,CACE,KACA,yBAEF,CACE,KACA,2BAEF,CACE,KACA,gBAEF,CACE,KACA,iBAEF,CACE,KACA,iBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,iBAEF,CACE,KACA,cAEF,CACE,KACA,eAEF,CACE,KACA,+BAEF,CACE,KACA,gCAEF,CACE,KACA,WAEF,CACE,KACA,oBAEF,CACE,KACA,mBAEF,CACE,KACA,oBAEF,CACE,KACA,sBAEF,CACE,KACA,YAEF,CACE,KACA,YAEF,CACE,KACA,cAEF,CACE,KACA,yBAEF,CACE,KACA,qBAEF,CACE,KACA,sBAEF,CACE,KACA,yBAMJiiB,EAAgBC,GACb1K,EAAO2K,KAAKD,EAAS1xL,GACnBtV,EAAQsV,IAAyB,IAAhBA,EAAK3T,QAG3BulM,EAAqBC,GACrBnnM,EAAQmnM,GACHJ,EAAcI,GAEI,oBAAhBA,EACFA,IAEF,GAEHC,EAAgB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tR,EACF,OAAOA,IAOjB,iBAAiB3T,EAAM2tB,GACrB,GAAI3tB,EAAM,CACR,MAAM2T,EAAU3T,EAAK49L,gBACrB,GAAI3mM,KAAKo1L,UAAY14K,IAAY1c,KAAKo1L,SACpC,OAEF,GAAI14K,EAAS,CACX,IAAKga,EACH,IAAK,IAAIwK,EAAQxkB,EAAQ6oL,UAAWrkK,EAAOA,EAAQA,EAAMqkK,UACvD,IAAKrkK,EAAMqkK,UACT,OAAOrkK,EAIb,OAAOxkB,EAET,MAAMxP,EAASnE,EAAKoE,WACpB,GAAID,GAAUA,IAAWlN,KAAKo1L,SAC5B,OAAOloL,IAOf,MAAMkxJ,GAAS,CACb,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,WAEIyrI,GAAa,CACjB,KACA,MAEIC,GAAgB,CACpB,QACA,QACA,SAEI/4F,GAAa,CACjB,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEIg5F,GAAW,CACf,KACA,KACA,KACA,KACA,KACA,MAEIC,GAAc,CAClB,KACA,KACA,MAEIj/F,GAAQ,CACZ,KACA,KACA,MAEIk/F,GAAa,CACjB,MACA,SACA,WACA,SAEIC,GAAoB,CAAC,OAAOhrS,OAAO6qS,IACnCI,GAAa/3O,IACjB,IAAIH,EACJ,OAAOlpD,IACLkpD,EAASA,GAAkB5uD,GAAY+uD,EAAO5yD,GACvC4F,GAAM6sD,EAAQp2D,GAAKkN,MAGxBqhS,GAAYD,GAAW/rI,IACvBisI,GAAYthS,GAAuB,UAAflN,GAAKkN,GACzBuhS,GAAavhS,GAAQ66R,GAAY76R,KAAUqhS,GAAUrhS,GACrDwhS,GAASxhS,GAAQ66R,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AAS,MAEzB,IAAK1qV,KAAY+rV,EACXj+V,GAAM4F,GAAgBq4V,EAAQ,CAAC/rV,MACjCgsV,EAAUhsV,GAAY+rV,EAAO/rV,IAGjC,OAAOgsV,EAET,SAASC,GAAaF,EAAQv5U,GAC5B,MAAkB,OAAXu5U,EAAiB,CACtB,IAAIxxU,EAAOkwU,GAAyBsB,EAAQv5U,GAC5C,GAAI+H,EAAM,CACR,GAAIA,EAAK5Y,IACP,OAAOopV,GAAQxwU,EAAK5Y,KAEtB,GAA0B,oBAAf4Y,EAAKruB,MACd,OAAO6+V,GAAQxwU,EAAKruB,OAGxB6/V,EAAShhW,GAAeghW,GAE1B,SAASG,EAAc9xV,GAErB,OADAhC,QAAQouB,KAAK,qBAAsBpsB,GAC5B,KAET,OAAO8xV,EAET,IAAIC,GAASp9U,GAAO,CAClB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAEEq9U,GAAQr9U,GAAO,CACjB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAEEs9U,GAAat9U,GAAO,CACtB,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAEEu9U,GAAgBv9U,GAAO,CACzB,UACA,gBACA,SACA,UACA,eACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAEEw9U,GAAWx9U,GAAO,CACpB,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAEEy9U,GAAmBz9U,GAAO,CAC5B,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAEErW,GAAOqW,GAAO,CAAC,UACfpX,GAAOoX,GAAO,CAChB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAEE4kE,GAAM5kE,GAAO,CACf,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAEE09U,GAAS19U,GAAO,CAClB,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA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","file":"js/chunk-58166fd0.a36d8695.js","sourcesContent":["/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$1(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$2(value, Object);\n const isArray = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const noarg = f => () => f();\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant$1 = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant$1(false);\n const always = constant$1(true);\n\n var global$a = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$2 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const chunk$1 = (array, size) => {\n const r = [];\n for (let i = 0; i < array.length; i += size) {\n const s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n const map$2 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$3 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$5 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex$1 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$2(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$2(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const pure$2 = x => [x];\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$h = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$h(xs, 0);\n const last$1 = xs => get$h(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$1 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const find$4 = (obj, pred) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$g = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const sequence = arr => {\n const r = [];\n for (let i = 0; i < arr.length; i++) {\n const x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Optional.none();\n }\n }\n return Optional.some(r);\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const mapFrom = (a, f) => a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const addToEnd = (str, suffix) => {\n return str + suffix;\n };\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const ensureTrailing = (str, suffix) => {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$1 = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n\n const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$2 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml: fromHtml$2,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path$1 = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path$1(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie$1 = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie$1('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name$3 = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name$3(e) === tag;\n\n const is = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$3 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$4 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner$4(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const offsetParent = element => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map$2(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported = constant$1(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const isInShadowRoot = e => getShadowRoot(e).isSome();\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$1(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body = () => getBody(SugarElement.fromDom(document));\n const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$9 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$f = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$f(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported$1(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$8 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const setOptions = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n v.fold(() => {\n internalRemove(dom, k);\n }, value => {\n internalSet(dom, k, value);\n });\n });\n };\n const get$e = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported$1(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const isValidValue = (tag, property, value) => {\n const element = SugarElement.fromTag(tag);\n set$8(element, property, value);\n const style = getRaw(element, property);\n return style.isSome();\n };\n const remove$6 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n remove$7(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$e(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$e(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api$2 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$d = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const setMax$1 = (element, value) => {\n const inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n const absMax = api$2.max(element, value, inclusions);\n set$8(element, 'max-height', absMax + 'px');\n };\n\n const r$1 = (left, top) => {\n const translate = (x, y) => r$1(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r$1;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute$3 = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport$1 = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const api$1 = Dimension('width', element => element.dom.offsetWidth);\n const set$7 = (element, h) => api$1.set(element, h);\n const get$c = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const setMax = (element, value) => {\n const inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n const absMax = api$1.max(element, value, inclusions);\n set$8(element, 'max-width', absMax + 'px');\n };\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant$1(isiPad),\n isiPhone: constant$1(isiPhone),\n isTablet: constant$1(isTablet),\n isPhone: constant$1(isPhone),\n isTouch: constant$1(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant$1(iOSwebview),\n isDesktop: constant$1(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$3 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$d(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n const unknown$3 = () => {\n return nu$d(0, 0);\n };\n const nu$d = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$d,\n detect: detect$4,\n unknown: unknown$3\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$5(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$5(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$3(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant$1(browsers),\n oses: constant$1(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$2 = () => {\n return nu$c({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$c = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$2,\n nu: nu$c,\n edge: constant$1(edge),\n chromium: constant$1(chromium),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown$1 = () => {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$b = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown: unknown$1,\n nu: nu$b,\n windows: constant$1(windows),\n ios: constant$1(ios),\n android: constant$1(android),\n linux: constant$1(linux),\n macos: constant$1(macos),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform();\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$2 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$2(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend$1 = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$2(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$2 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$2(parent, element);\n }, v => {\n before$1(v, element);\n });\n };\n\n const append$1 = (parent, elements) => {\n each$1(elements, x => {\n append$2(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove$5(rogue);\n });\n };\n const remove$5 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n const get$b = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n const get$a = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds$1 = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds$3 = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$b(SugarElement.fromDom(doc));\n return get$a(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant$1([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n const paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner$3 = element => owner$4(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n const find$2 = element => {\n const doc = getDocument();\n const scroll = get$b(doc);\n const path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), frames => {\n const offset = viewport$1(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport$1(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n });\n };\n\n const pointed = (point, width, height) => ({\n point,\n width,\n height\n });\n const rect = (x, y, width, height) => ({\n x,\n y,\n width,\n height\n });\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const box$1 = element => {\n const xy = absolute$3(element);\n const w = getOuter$1(element);\n const h = getOuter$2(element);\n return bounds(xy.left, xy.top, w, h);\n };\n const absolute$2 = element => {\n const position = find$2(element);\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const win = () => getBounds$3(window);\n\n const value$4 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant$1(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error$1 = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error$1(err), value$4);\n const Result = {\n value: value$4,\n error: error$1,\n fromOption\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition$2 = results => {\n const values = [];\n const errors = [];\n each$1(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n const map = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n const bind$1 = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult$1 = res => fold$1(res, Result.error, Result.value);\n const fromResult$1 = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue,\n partition: partition$2,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const field$2 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (value, ifField, ifCustom) => {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n const shallow$1 = (old, nu) => {\n return nu;\n };\n const deep = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has$2(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep);\n const merge$1 = baseMerge(shallow$1);\n\n const required$2 = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant$1(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n const mergeWithThunk = baseThunk => ({\n tag: 'mergeWithThunk',\n process: baseThunk\n });\n const mergeWith = base => mergeWithThunk(constant$1(base));\n\n const mergeValues$1 = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors$1 = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant$1('... (only showing first ten failures)')\n }]) : errors;\n return map$2(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu$a = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu$a(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu$a(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu$a(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const unsupportedFields = (path, unsupported) => nu$a(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified');\n const custom = (path, err) => nu$a(path, constant$1(err));\n\n const value$3 = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant$1('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value$3(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$g(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$g(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$g(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$g(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant$1({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const valueThunk = getDelegate => {\n const extract = (path, val) => getDelegate().extract(path, val);\n const toString = () => getDelegate().toString();\n return {\n extract,\n toString\n };\n };\n const getSetKeys = obj => keys(filter$1(obj, isNonNullable));\n const objOfOnly = fields => {\n const delegate = objOf(fields);\n const fieldNames = foldr(fields, (acc, value) => {\n return fold(value, key => deepMerge(acc, { [key]: true }), constant$1(acc));\n }, {});\n const extract = (path, o) => {\n const keys = isBoolean(o) ? [] : getSetKeys(o);\n const extra = filter$2(keys, k => !hasNonNullableKey(fieldNames, k));\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract,\n toString: delegate.toString\n };\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$2(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$2(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$2(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const setOf$1 = (validator, prop) => {\n const validateKeys = (path, keys) => arrOf(value$3(validator)).extract(path, keys);\n const extract = (path, o) => {\n const keys$1 = keys(o);\n const validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, validKeys => {\n const schema = map$2(validKeys, vk => {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n const toString = () => 'setOf(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const thunk = (_desc, processor) => {\n const getP = cached(processor);\n const extract = (path, val) => getP().extract(path, val);\n const toString = () => getP().toString();\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\n\n const anyValue = constant$1(anyValue$1);\n const typedValue = (validator, expectedType) => value$3(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n const isPostMessageable = val => {\n if (Object(val) !== val) {\n return true;\n }\n switch ({}.toString.call(val).slice(8, -1)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'RegExp':\n case 'Blob':\n case 'FileList':\n case 'ImageData':\n case 'ImageBitmap':\n case 'ArrayBuffer':\n return true;\n case 'Array':\n case 'Object':\n return Object.keys(val).every(prop => isPostMessageable(val[prop]));\n default:\n return false;\n }\n };\n const postMessageable = value$3(a => {\n if (isPostMessageable(a)) {\n return SimpleResult.svalue(a);\n } else {\n return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n }\n });\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$g(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$2 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$g(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const arrOfVal = () => arrOf(anyValue$1);\n const valueOf = validator => value$3(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const setOf = (validator, prop) => setOf$1(v => SimpleResult.fromResult(validator(v)), prop);\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const getOrDie = extraction => {\n return extraction.fold(errInfo => {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n const thunkOf = (desc, schema) => thunk(desc, schema);\n\n const field$1 = field$2;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const required$1 = key => field$1(key, key, required$2(), anyValue());\n const requiredOf = (key, schema) => field$1(key, key, required$2(), schema);\n const requiredNumber = key => requiredOf(key, number);\n const requiredString = key => requiredOf(key, string);\n const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values));\n const requiredBoolean = key => requiredOf(key, boolean);\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const forbid = (key, message) => field$1(key, key, asOption(), value$3(_v => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message)));\n const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema));\n const option$3 = key => field$1(key, key, asOption(), anyValue());\n const optionOf = (key, schema) => field$1(key, key, asOption(), schema);\n const optionNumber = key => optionOf(key, number);\n const optionString = key => optionOf(key, string);\n const optionStringEnum = (key, values) => optionOf(key, validateEnum(values));\n const optionFunction = key => optionOf(key, functionProcessor);\n const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema));\n const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field$1(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema));\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const generate$7 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$1(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate: generate$7 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$1(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const exclude$1 = (obj, fields) => {\n const r = {};\n each(obj, (v, k) => {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n const wrap$2 = (key, value) => ({ [key]: value });\n const wrapAll$1 = keyvalues => {\n const r = {};\n each$1(keyvalues, kv => {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n const exclude = (obj, fields) => exclude$1(obj, fields);\n const wrap$1 = (key, value) => wrap$2(key, value);\n const wrapAll = keyvalues => wrapAll$1(keyvalues);\n const mergeValues = (values, base) => {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n };\n const mergeErrors = errors => Result.error(flatten(errors));\n const consolidate = (objs, base) => {\n const partitions = partition$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor$2 = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop));\n };\n\n const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target);\n\n const defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n const nu$9 = parts => {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return {\n ...defaultEventHandler,\n ...parts\n };\n };\n const all$2 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true);\n const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false);\n const read$2 = handler => isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n const fuse$1 = handlers => {\n const can = all$2(handlers, handler => handler.can);\n const abort = any(handlers, handler => handler.abort);\n const run = (...args) => {\n each$1(handlers, handler => {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can,\n abort,\n run\n };\n };\n\n const constant = constant$1;\n const touchstart = constant('touchstart');\n const touchmove = constant('touchmove');\n const touchend = constant('touchend');\n const touchcancel = constant('touchcancel');\n const mousedown = constant('mousedown');\n const mousemove = constant('mousemove');\n const mouseout = constant('mouseout');\n const mouseup = constant('mouseup');\n const mouseover = constant('mouseover');\n const focusin = constant('focusin');\n const focusout = constant('focusout');\n const keydown = constant('keydown');\n const keyup = constant('keyup');\n const input = constant('input');\n const change = constant('change');\n const click = constant('click');\n const transitioncancel = constant('transitioncancel');\n const transitionend = constant('transitionend');\n const transitionstart = constant('transitionstart');\n const selectstart = constant('selectstart');\n\n const prefixName = name => constant$1('alloy.' + name);\n const alloy = { tap: prefixName('tap') };\n const focus$4 = prefixName('focus');\n const postBlur = prefixName('blur.post');\n const postPaste = prefixName('paste.post');\n const receive = prefixName('receive');\n const execute$5 = prefixName('execute');\n const focusItem = prefixName('focus.item');\n const tap = alloy.tap;\n const longpress = prefixName('longpress');\n const sandboxClose = prefixName('sandbox.close');\n const typeaheadCancel = prefixName('typeahead.cancel');\n const systemInit = prefixName('system.init');\n const documentTouchmove = prefixName('system.touchmove');\n const documentTouchend = prefixName('system.touchend');\n const windowScroll = prefixName('system.scroll');\n const windowResize = prefixName('system.resize');\n const attachedToDom = prefixName('system.attached');\n const detachedFromDom = prefixName('system.detached');\n const dismissRequested = prefixName('system.dismissRequested');\n const repositionRequested = prefixName('system.repositionRequested');\n const focusShifted = prefixName('focusmanager.shifted');\n const slotVisibility = prefixName('slotcontainer.visibility');\n const changeTab = prefixName('change.tab');\n const dismissTab = prefixName('dismiss.tab');\n const highlight$1 = prefixName('highlight');\n const dehighlight$1 = prefixName('dehighlight');\n\n const emit = (component, event) => {\n dispatchWith(component, component.element, event, {});\n };\n const emitWith = (component, event, properties) => {\n dispatchWith(component, component.element, event, properties);\n };\n const emitExecute = component => {\n emit(component, execute$5());\n };\n const dispatch = (component, target, event) => {\n dispatchWith(component, target, event, {});\n };\n const dispatchWith = (component, target, event, properties) => {\n const data = {\n target,\n ...properties\n };\n component.getSystem().triggerEvent(event, target, data);\n };\n const retargetAndDispatchWith = (component, target, eventName, properties) => {\n const data = {\n ...properties,\n target\n };\n component.getSystem().triggerEvent(eventName, target, data);\n };\n const dispatchEvent = (component, target, event, simulatedEvent) => {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n const derive$2 = configs => wrapAll(configs);\n const abort = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n const can = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n const preventDefault = name => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n const run$1 = (name, handler) => {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n const runActionExtra = (name, action, extra) => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n const runOnName = name => {\n return handler => run$1(name, handler);\n };\n const runOnSourceName = name => {\n return handler => ({\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n });\n };\n const redirectToUid = (name, uid) => {\n return run$1(name, (component, simulatedEvent) => {\n component.getSystem().getByUid(uid).each(redirectee => {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n const redirectToPart = (name, detail, partName) => {\n const uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n const runWithTarget = (name, f) => {\n return run$1(name, (component, simulatedEvent) => {\n const ev = simulatedEvent.event;\n const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n const closest = closest$4(ev.target, el => component.getSystem().getByDom(el).toOptional(), never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n const cutter = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.cut();\n });\n };\n const stopper = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.stop();\n });\n };\n const runOnSource = (name, f) => {\n return runOnSourceName(name)(f);\n };\n const runOnAttached = runOnSourceName(attachedToDom());\n const runOnDetached = runOnSourceName(detachedFromDom());\n const runOnInit = runOnSourceName(systemInit());\n const runOnExecute$1 = runOnName(execute$5());\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n const get$9 = element => element.dom.innerHTML;\n const set$6 = (element, content) => {\n const owner = owner$4(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$9(container);\n };\n\n const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone(original, false);\n\n const getHtml = element => {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n const clone = shallow(element);\n return getOuter(clone);\n }\n };\n\n const element = elem => getHtml(elem);\n\n const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target);\n const events$i = derive$2([can(focus$4(), (component, simulatedEvent) => {\n const event = simulatedEvent.event;\n const originator = event.originator;\n const target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$i\n });\n\n let unique = 0;\n const generate$6 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n const prefix$1 = constant$1('alloy-id-');\n const idAttr$1 = constant$1('data-alloy-id');\n\n const prefix = prefix$1();\n const idAttr = idAttr$1();\n const write = (label, elem) => {\n const id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n const writeOnly = (elem, uid) => {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n const read$1 = elem => {\n const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n const generate$5 = prefix => generate$6(prefix);\n\n const make$8 = identity;\n\n const NoContextApi = getComp => {\n const getMessage = event => `The component must be in a context to execute: ${ event }` + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n const fail = event => () => {\n throw new Error(getMessage(event));\n };\n const warn = event => () => {\n console.warn(getMessage(event));\n };\n return {\n debugInfo: constant$1('fake'),\n triggerEvent: warn('triggerEvent'),\n triggerFocus: warn('triggerFocus'),\n triggerEscape: warn('triggerEscape'),\n broadcast: warn('broadcast'),\n broadcastOn: warn('broadcastOn'),\n broadcastEvent: warn('broadcastEvent'),\n build: fail('build'),\n buildOrPatch: fail('buildOrPatch'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n isConnected: never\n };\n };\n const singleton$1 = NoContextApi();\n\n const markAsBehaviourApi = (f, apiName, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n });\n return f;\n };\n const cleanParameters = parameters => map$2(parameters, p => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p);\n const markAsExtraApi = (f, extraName) => {\n const delegate = f.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: extraName,\n parameters: cleanParameters(parameters)\n });\n return f;\n };\n const markAsSketchApi = (f, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n });\n return f;\n };\n\n const premadeTag = generate$6('alloy-premade');\n const premade$1 = comp => {\n Object.defineProperty(comp.element.dom, premadeTag, {\n value: comp.uid,\n writable: true\n });\n return wrap$1(premadeTag, comp);\n };\n const isPremade = element => has$2(element.dom, premadeTag);\n const getPremade = spec => get$g(spec, premadeTag);\n const makeApi = f => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f);\n\n const NoState = { init: () => nu$8({ readState: constant$1('No State required') }) };\n const nu$8 = spec => spec;\n\n const generateFrom$1 = (spec, all) => {\n const schema = map$2(all, a => optionObjOf(a.name(), [\n required$1('config'),\n defaulted('state', NoState)\n ]));\n const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(errInfo => {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, identity);\n return {\n list: all,\n data: map$1(validated, optBlobThunk => {\n const output = optBlobThunk.map(blob => ({\n config: blob.config,\n state: blob.state.init(blob.config)\n }));\n return constant$1(output);\n })\n };\n };\n const getBehaviours$3 = bData => bData.list;\n const getData$2 = bData => bData.data;\n\n const byInnerKey = (data, tuple) => {\n const r = {};\n each(data, (detail, key) => {\n each(detail, (value, indexKey) => {\n const chain = get$g(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n const nu$7 = s => ({\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n });\n const merge = (defnA, mod) => ({\n ...defnA,\n attributes: {\n ...defnA.attributes,\n ...mod.attributes\n },\n styles: {\n ...defnA.styles,\n ...mod.styles\n },\n classes: defnA.classes.concat(mod.classes)\n });\n\n const combine$2 = (info, baseMod, behaviours, base) => {\n const modsByBehaviour = { ...baseMod };\n each$1(behaviours, behaviour => {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({\n name,\n modification\n }));\n const combineObjects = objects => foldr(objects, (b, a) => ({\n ...a.modification,\n ...b\n }), {});\n const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []);\n const combinedAttributes = combineObjects(byAspect.attributes);\n const combinedStyles = combineObjects(byAspect.styles);\n return nu$7({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n const sortKeys = (label, keyName, array, order) => {\n try {\n const sorted = sort(array, (a, b) => {\n const aKey = a[keyName];\n const bKey = b[keyName];\n const aIndex = order.indexOf(aKey);\n const bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n const uncurried = (handler, purpose) => ({\n handler,\n purpose\n });\n const curried = (handler, purpose) => ({\n cHandler: handler,\n purpose\n });\n const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n const getCurried = descHandler => descHandler.cHandler;\n\n const behaviourTuple = (name, handler) => ({\n name,\n handler\n });\n const nameToHandlers = (behaviours, info) => {\n const r = {};\n each$1(behaviours, behaviour => {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n const groupByEvents = (info, behaviours, base) => {\n const behaviourEvents = {\n ...base,\n ...nameToHandlers(behaviours, info)\n };\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n const combine$1 = (info, eventOrder, behaviours, base) => {\n const byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n const assemble = rawHandler => {\n const handler = read$2(rawHandler);\n return (component, simulatedEvent, ...rest) => {\n const args = [\n component,\n simulatedEvent\n ].concat(rest);\n if (handler.abort.apply(undefined, args)) {\n simulatedEvent.stop();\n } else if (handler.can.apply(undefined, args)) {\n handler.run.apply(undefined, args);\n }\n };\n };\n const missingOrderError = (eventName, tuples) => Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map$2(tuples, c => c.name), null, 2)]);\n const fuse = (tuples, eventOrder, eventName) => {\n const order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(sortedTuples => {\n const handlers = map$2(sortedTuples, tuple => tuple.handler);\n return fuse$1(handlers);\n });\n }\n };\n const combineGroups = (byEventName, eventOrder) => {\n const r = mapToArray(byEventName, (tuples, eventName) => {\n const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n return combined.map(handler => {\n const assembled = assemble(handler);\n const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], o => exists(tuples, t => t.name === o)).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n const baseBehaviour = 'alloy.base.behaviour';\n const schema$z = objOf([\n field$1('dom', 'dom', required$2(), objOf([\n required$1('tag'),\n defaulted('styles', {}),\n defaulted('classes', []),\n defaulted('attributes', {}),\n option$3('value'),\n option$3('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith({\n [execute$5()]: [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ],\n [focus$4()]: [\n baseBehaviour,\n 'focusing',\n 'keying'\n ],\n [systemInit()]: [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing'\n ],\n [input()]: [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n [detachedFromDom()]: [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [touchstart()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [mouseover()]: [\n 'item-type-events',\n 'tooltipping'\n ],\n [receive()]: [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ]\n }), anyValue()),\n option$3('domModification')\n ]);\n const toInfo = spec => asRaw('custom.definition', schema$z, spec);\n const toDefinition = detail => ({\n ...detail.dom,\n uid: detail.uid,\n domChildren: map$2(detail.components, comp => comp.element)\n });\n const toModification = detail => detail.domModification.fold(() => nu$7({}), nu$7);\n const toEvents = info => info.events;\n\n const read = (element, attr) => {\n const value = get$f(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$9(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$9(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$8 = element => read(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const add$1 = (element, classes) => {\n each$1(classes, x => {\n add$2(element, x);\n });\n };\n const remove$1 = (element, classes) => {\n each$1(classes, x => {\n remove$2(element, x);\n });\n };\n const hasAll = (element, classes) => forall(classes, clazz => has(element, clazz));\n const getNative = element => {\n const classList = element.dom.classList;\n const r = new Array(classList.length);\n for (let i = 0; i < classList.length; i++) {\n const item = classList.item(i);\n if (item !== null) {\n r[i] = item;\n }\n }\n return r;\n };\n const get$7 = element => supports(element) ? getNative(element) : get$8(element);\n\n const get$6 = element => element.dom.value;\n const set$5 = (element, value) => {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n const determineObsoleted = (parent, index, oldObsoleted) => {\n const newObsoleted = child$2(parent, index);\n return newObsoleted.map(newObs => {\n const elemChanged = oldObsoleted.exists(o => !eq(o, newObs));\n if (elemChanged) {\n const oldTag = oldObsoleted.map(name$3).getOr('span');\n const marker = SugarElement.fromTag(oldTag);\n before$1(newObs, marker);\n return marker;\n } else {\n return newObs;\n }\n });\n };\n const ensureInDom = (parent, child, obsoleted) => {\n obsoleted.fold(() => append$2(parent, child), obs => {\n if (!eq(obs, child)) {\n before$1(obs, child);\n remove$5(obs);\n }\n });\n };\n const patchChildrenWith = (parent, nu, f) => {\n const builtChildren = map$2(nu, f);\n const currentChildren = children(parent);\n each$1(currentChildren.slice(builtChildren.length), remove$5);\n return builtChildren;\n };\n const patchSpecChild = (parent, index, spec, build) => {\n const oldObsoleted = child$2(parent, index);\n const childComp = build(spec, oldObsoleted);\n const obsoleted = determineObsoleted(parent, index, oldObsoleted);\n ensureInDom(parent, childComp.element, obsoleted);\n return childComp;\n };\n const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build));\n const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => {\n const optObsoleted = child$2(parent, index);\n ensureInDom(parent, node, optObsoleted);\n return node;\n });\n\n const diffKeyValueSet = (newObj, oldObj) => {\n const newKeys = keys(newObj);\n const oldKeys = keys(oldObj);\n const toRemove = difference(oldKeys, newKeys);\n const toSet = bifilter(newObj, (v, k) => {\n return !has$2(oldObj, k) || v !== oldObj[k];\n }).t;\n return {\n toRemove,\n toSet\n };\n };\n const reconcileToDom = (definition, obsoleted) => {\n const {\n class: clazz,\n style,\n ...existingAttributes\n } = clone$1(obsoleted);\n const {\n toSet: attrsToSet,\n toRemove: attrsToRemove\n } = diffKeyValueSet(definition.attributes, existingAttributes);\n const updateAttrs = () => {\n each$1(attrsToRemove, a => remove$7(obsoleted, a));\n setAll$1(obsoleted, attrsToSet);\n };\n const existingStyles = getAllRaw(obsoleted);\n const {\n toSet: stylesToSet,\n toRemove: stylesToRemove\n } = diffKeyValueSet(definition.styles, existingStyles);\n const updateStyles = () => {\n each$1(stylesToRemove, s => remove$6(obsoleted, s));\n setAll(obsoleted, stylesToSet);\n };\n const existingClasses = get$7(obsoleted);\n const classesToRemove = difference(existingClasses, definition.classes);\n const classesToAdd = difference(definition.classes, existingClasses);\n const updateClasses = () => {\n add$1(obsoleted, classesToAdd);\n remove$1(obsoleted, classesToRemove);\n };\n const updateHtml = html => {\n set$6(obsoleted, html);\n };\n const updateChildren = () => {\n const children = definition.domChildren;\n patchDomChildren(obsoleted, children);\n };\n const updateValue = () => {\n const valueElement = obsoleted;\n const value = definition.value.getOrUndefined();\n if (value !== get$6(valueElement)) {\n set$5(valueElement, value !== null && value !== void 0 ? value : '');\n }\n };\n updateAttrs();\n updateClasses();\n updateStyles();\n definition.innerHtml.fold(updateChildren, updateHtml);\n updateValue();\n return obsoleted;\n };\n\n const introduceToDom = definition => {\n const subject = SugarElement.fromTag(definition.tag);\n setAll$1(subject, definition.attributes);\n add$1(subject, definition.classes);\n setAll(subject, definition.styles);\n definition.innerHtml.each(html => set$6(subject, html));\n const children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(value => {\n set$5(subject, value);\n });\n return subject;\n };\n const attemptPatch = (definition, obsoleted) => {\n try {\n const e = reconcileToDom(definition, obsoleted);\n return Optional.some(e);\n } catch (err) {\n return Optional.none();\n }\n };\n const hasMixedChildren = definition => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n const renderToDom = (definition, optObsoleted) => {\n const canBePatched = candidate => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n const elem = optObsoleted.filter(canBePatched).bind(obsoleted => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n writeOnly(elem, definition.uid);\n return elem;\n };\n\n const getBehaviours$2 = spec => {\n const behaviours = get$g(spec, 'behaviours').getOr({});\n return bind$3(keys(behaviours), name => {\n const behaviour = behaviours[name];\n return isNonNullable(behaviour) ? [behaviour.me] : [];\n });\n };\n const generateFrom = (spec, all) => generateFrom$1(spec, all);\n const generate$4 = spec => {\n const all = getBehaviours$2(spec);\n return generateFrom(spec, all);\n };\n\n const getDomDefinition = (info, bList, bData) => {\n const definition = toDefinition(info);\n const infoModification = toModification(info);\n const baseModification = { 'alloy.base.modification': infoModification };\n const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n return merge(definition, modification);\n };\n const getEvents = (info, bList, bData) => {\n const baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n const build$2 = (spec, obsoleted) => {\n const getMe = () => me;\n const systemApi = Cell(singleton$1);\n const info = getOrDie(toInfo(spec));\n const bBlob = generate$4(spec);\n const bList = getBehaviours$3(bBlob);\n const bData = getData$2(bBlob);\n const modDefinition = getDomDefinition(info, bList, bData);\n const item = renderToDom(modDefinition, obsoleted);\n const events = getEvents(info, bList, bData);\n const subcomponents = Cell(info.components);\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(getMe));\n };\n const syncComponents = () => {\n const children$1 = children(item);\n const subs = bind$3(children$1, child => systemApi.get().getByDom(child).fold(() => [], pure$2));\n subcomponents.set(subs);\n };\n const config = behaviour => {\n const b = bData;\n const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n const hasConfigured = behaviour => isFunction(bData[behaviour.name()]);\n const getApis = () => info.apis;\n const readState = behaviourName => bData[behaviourName]().map(b => b.state.readState()).getOr('not enabled');\n const me = {\n uid: spec.uid,\n getSystem: systemApi.get,\n config,\n hasConfigured,\n spec,\n readState,\n getApis,\n connect,\n disconnect,\n element: item,\n syncComponents,\n components: subcomponents.get,\n events\n };\n return me;\n };\n\n const buildSubcomponents = (spec, obsoleted) => {\n const components = get$g(spec, 'components').getOr([]);\n return obsoleted.fold(() => map$2(components, build$1), obs => map$2(components, (c, i) => {\n return buildOrPatch(c, child$2(obs, i));\n }));\n };\n const buildFromSpec = (userSpec, obsoleted) => {\n const {\n events: specEvents,\n ...spec\n } = make$8(userSpec);\n const components = buildSubcomponents(spec, obsoleted);\n const completeSpec = {\n ...spec,\n events: {\n ...DefaultEvents,\n ...specEvents\n },\n components\n };\n return Result.value(build$2(completeSpec, obsoleted));\n };\n const text$1 = textContent => {\n const element = SugarElement.fromText(textContent);\n return external$1({ element });\n };\n const external$1 = spec => {\n const extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$1('element'),\n option$3('uid')\n ]), spec);\n const systemApi = Cell(NoContextApi());\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(() => me));\n };\n const uid = extSpec.uid.getOrThunk(() => generate$5('external'));\n writeOnly(extSpec.element, uid);\n const me = {\n uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect,\n disconnect,\n getApis: () => ({}),\n element: extSpec.element,\n spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n const uids = generate$5;\n const isSketchSpec$1 = spec => has$2(spec, 'uid');\n const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n uid: uids(''),\n ...spec\n };\n return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n });\n const build$1 = spec => buildOrPatch(spec, Optional.none());\n const premade = premade$1;\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$1 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$3 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$5(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n\n const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is$1 = (element, selector) => is(element, selector);\n return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n };\n\n const attribute = 'aria-controls';\n const find$1 = queryElem => {\n const dependent = closest$3(queryElem, elem => {\n if (!isElement$1(elem)) {\n return false;\n }\n const id = get$f(elem, 'id');\n return id !== undefined && id.indexOf(attribute) > -1;\n });\n return dependent.bind(dep => {\n const id = get$f(dep, 'id');\n const dos = getRootNode(dep);\n return descendant(dos, `[${ attribute }=\"${ id }\"]`);\n });\n };\n const manager = () => {\n const ariaId = generate$6(attribute);\n const link = elem => {\n set$9(elem, attribute, ariaId);\n };\n const unlink = elem => {\n remove$7(elem, attribute);\n };\n return {\n id: ariaId,\n link,\n unlink\n };\n };\n\n const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists(owner => isPartOf$1(component, owner));\n const isPartOf$1 = (component, queryElem) => closest$2(queryElem, el => eq(el, component.element), never) || isAriaPartOf(component, queryElem);\n\n const unknown = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n const eventConfig = Cell({});\n const makeEventLogger = (eventName, initialTarget) => {\n const sequence = [];\n const startTime = new Date().getTime();\n return {\n logEventCut: (_name, target, purpose) => {\n sequence.push({\n outcome: 'cut',\n target,\n purpose\n });\n },\n logEventStopped: (_name, target, purpose) => {\n sequence.push({\n outcome: 'stopped',\n target,\n purpose\n });\n },\n logNoParent: (_name, target, purpose) => {\n sequence.push({\n outcome: 'no-parent',\n target,\n purpose\n });\n },\n logEventNoHandlers: (_name, target) => {\n sequence.push({\n outcome: 'no-handlers-left',\n target\n });\n },\n logEventResponse: (_name, target, purpose) => {\n sequence.push({\n outcome: 'response',\n purpose,\n target\n });\n },\n write: () => {\n const finishTime = new Date().getTime();\n if (contains$2([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom,\n sequence: map$2(sequence, s => {\n if (!contains$2([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n const processEvent = (eventName, initialTarget, f) => {\n const status = get$g(eventConfig.get(), eventName).orThunk(() => {\n const patterns = keys(eventConfig.get());\n return findMap(patterns, p => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none());\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n const logger = makeEventLogger(eventName, initialTarget);\n const output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n const path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n const getTrace = () => {\n const err = new Error();\n if (err.stack !== undefined) {\n const lines = err.stack.split('\\n');\n return find$5(lines, line => line.indexOf('alloy') > 0 && !exists(path, p => line.indexOf(p) > -1)).getOr(unknown);\n } else {\n return unknown;\n }\n };\n const ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f);\n const noLogger = constant$1(ignoreEvent);\n\n const menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n const itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n const itemSchema$3 = constant$1(objOf(itemFields()));\n\n const _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n const itemMarkers = () => requiredOf('markers', itemSchema$3());\n const tieredMenuMarkers = () => requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n const markers$1 = required => requiredObjOf('markers', map$2(required, required$1));\n const onPresenceHandler = (label, fieldName, presence) => {\n getTrace();\n return field$1(fieldName, fieldName, presence, valueOf(f => Result.value((...args) => {\n return f.apply(undefined, args);\n })));\n };\n const onHandler = fieldName => onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n const onKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n const onStrictHandler = fieldName => onPresenceHandler('onHandler', fieldName, required$2());\n const onStrictKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n const output$1 = (name, value) => customField(name, constant$1(value));\n const snapshot = name => customField(name, identity);\n const initSize = constant$1(_initSize);\n\n const nu$6 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({\n x,\n y,\n bubble,\n direction,\n placement,\n restriction: boundsRestriction,\n label: `${ labelPrefix }-${ placement }`,\n alwaysFit\n });\n\n const adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n const cata$2 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle);\n const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west);\n const southeast$3 = adt$a.southeast;\n const southwest$3 = adt$a.southwest;\n const northeast$3 = adt$a.northeast;\n const northwest$3 = adt$a.northwest;\n const south$3 = adt$a.south;\n const north$3 = adt$a.north;\n const east$3 = adt$a.east;\n const west$3 = adt$a.west;\n\n const cycleBy = (value, delta, min, max) => {\n const r = value + delta;\n if (r > max) {\n return min;\n } else if (r < min) {\n return max;\n } else {\n return r;\n }\n };\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n const getRestriction = (anchor, restriction) => {\n switch (restriction) {\n case 1:\n return anchor.x;\n case 0:\n return anchor.x + anchor.width;\n case 2:\n return anchor.y;\n case 3:\n return anchor.y + anchor.height;\n }\n };\n const boundsRestriction = (anchor, restrictions) => mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], dir => get$g(restrictions, dir).map(restriction => getRestriction(anchor, restriction)));\n const adjustBounds = (bounds$1, restriction, bubbleOffset) => {\n const applyRestriction = (dir, current) => restriction[dir].map(pos => {\n const isVerticalAxis = dir === 'top' || dir === 'bottom';\n const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n const newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n const adjustedLeft = applyRestriction('left', bounds$1.x);\n const adjustedTop = applyRestriction('top', bounds$1.y);\n const adjustedRight = applyRestriction('right', bounds$1.right);\n const adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n const labelPrefix$2 = 'layout';\n const eastX$1 = anchor => anchor.x;\n const middleX$1 = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY$2 = (anchor, element) => anchor.y - element.height;\n const southY$2 = anchor => anchor.y + anchor.height;\n const centreY$1 = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const eastEdgeX$1 = anchor => anchor.x + anchor.width;\n const westEdgeX$1 = (anchor, element) => anchor.x - element.width;\n const southeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), labelPrefix$2);\n const southwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), labelPrefix$2);\n const northeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), labelPrefix$2);\n const northwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), labelPrefix$2);\n const north$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n const south$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n const east$2 = (anchor, element, bubbles) => nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n const west$2 = (anchor, element, bubbles) => nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n const all$1 = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const allRtl$1 = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const aboveOrBelow = () => [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n const aboveOrBelowRtl = () => [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n const belowOrAbove = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n const belowOrAboveRtl = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n\n const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, ch => contains$2(message.channels, ch));\n const events$h = receiveConfig => derive$2([run$1(receive(), (component, message) => {\n const channelMap = receiveConfig.channels;\n const channels = keys(channelMap);\n const receivingData = message;\n const targetChannels = chooseChannels(channels, receivingData);\n each$1(targetChannels, ch => {\n const channelInfo = channelMap[ch];\n const channelSchema = channelInfo.schema;\n const data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$h\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n const executeEvent = (bConfig, bState, executor) => runOnExecute$1(component => {\n executor(component, bConfig, bState);\n });\n const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => {\n f(component, bConfig, bState);\n });\n const create$4 = (schema, name, active, apis, extra, state) => {\n const configSchema = objOfOnly(schema);\n const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const createModes$1 = (modes, name, active, apis, extra, state) => {\n const configSchema = modes;\n const schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const wrapApi = (bName, apiFunction, apiName) => {\n const f = (component, ...rest) => {\n const args = [component].concat(rest);\n return component.config({ name: constant$1(bName) }).fold(() => {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, info => {\n const rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n const revokeBehaviour = name => ({\n key: name,\n value: undefined\n });\n const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => {\n const getConfig = info => hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName));\n const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n const me = {\n ...wrappedExtra,\n ...wrappedApis,\n revoke: curry(revokeBehaviour, name),\n config: spec => {\n const prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me,\n configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)),\n initialConfig: spec,\n state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: (info, base) => {\n return lift2(getConfig(info), get$g(active, 'exhibit'), (behaviourInfo, exhibitor) => {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(() => nu$7({}));\n },\n name: constant$1(name),\n handlers: info => {\n return getConfig(info).map(behaviourInfo => {\n const getEvents = get$g(active, 'events').getOr(() => ({}));\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n };\n return me;\n };\n\n const derive$1 = capabilities => wrapAll(capabilities);\n const simpleSchema = objOfOnly([\n required$1('fields'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const create$3 = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$4(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n const modeSchema = objOfOnly([\n required$1('branchKey'),\n required$1('branches'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const createModes = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n const revoke = constant$1(undefined);\n\n const Receiving = create$3({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n const exhibit$6 = (base, posConfig) => nu$7({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n const focus$3 = element => element.dom.focus();\n const blur$1 = element => element.dom.blur();\n const hasFocus = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const preserve$1 = (f, container) => {\n const dos = getRootNode(container);\n const refocus = active$1(dos).bind(focused => {\n const hasFocus = elem => eq(focused, elem);\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n const result = f(container);\n refocus.each(oldFocus => {\n active$1(dos).filter(newFocus => eq(newFocus, oldFocus)).fold(() => {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n const NuPositionCss = (position, left, top, right, bottom) => {\n const toPx = num => num + 'px';\n return {\n position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n const toOptions = position => ({\n ...position,\n position: Optional.some(position.position)\n });\n const applyPositionCss = (element, position) => {\n setOptions(element, toOptions(position));\n };\n\n const adt$9 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n const positionWithDirection = (posName, decision, x, y, width, height) => {\n const decisionRect = decision.rect;\n const decisionX = decisionRect.x - x;\n const decisionY = decisionRect.y - y;\n const decisionWidth = decisionRect.width;\n const decisionHeight = decisionRect.height;\n const decisionRight = width - (decisionX + decisionWidth);\n const decisionBottom = height - (decisionY + decisionHeight);\n const left = Optional.some(decisionX);\n const top = Optional.some(decisionY);\n const right = Optional.some(decisionRight);\n const bottom = Optional.some(decisionBottom);\n const none = Optional.none();\n return cata$2(decision.direction, () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, none, none, right, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none));\n };\n const reposition = (origin, decision) => origin.fold(() => {\n const decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, (x, y, width, height) => {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, (x, y, width, height) => {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n const toBox = (origin, element) => {\n const rel = curry(find$2, element);\n const position = origin.fold(rel, rel, () => {\n const scroll = get$b();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const viewport = (origin, getBounds) => getBounds.fold(() => origin.fold(win, win, bounds), b => origin.fold(b, b, () => {\n const bounds$1 = b();\n const pos = translate$2(origin, bounds$1.x, bounds$1.y);\n return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n }));\n const translate$2 = (origin, x, y) => {\n const pos = SugarPosition(x, y);\n const removeScroll = () => {\n const outerScroll = get$b();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n adt$9.none;\n const relative$1 = adt$9.relative;\n const fixed$1 = adt$9.fixed;\n\n const anchor = (anchorBox, origin) => ({\n anchorBox,\n origin\n });\n const box = (anchorBox, origin) => anchor(anchorBox, origin);\n\n const placementAttribute = 'data-alloy-placement';\n const setPlacement$1 = (element, placement) => {\n set$9(element, placementAttribute, placement);\n };\n const getPlacement = element => getOpt(element, placementAttribute);\n const reset$2 = element => remove$7(element, placementAttribute);\n\n const adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n const determinePosition = (box, bounds) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds;\n const {x, y, right, bottom, width, height} = box;\n const xInBounds = x >= boundsX && x <= boundsRight;\n const yInBounds = y >= boundsY && y <= boundsBottom;\n const originInBounds = xInBounds && yInBounds;\n const rightInBounds = right <= boundsRight && right >= boundsX;\n const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n const sizeInBounds = rightInBounds && bottomInBounds;\n const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds,\n sizeInBounds,\n visibleW,\n visibleH\n };\n };\n const calcReposition = (box, bounds$1) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds$1;\n const {x, y, width, height} = box;\n const maxX = Math.max(boundsX, boundsRight - width);\n const maxY = Math.max(boundsY, boundsBottom - height);\n const restrictedX = clamp(x, boundsX, maxX);\n const restrictedY = clamp(y, boundsY, maxY);\n const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n const calcMaxSizes = (direction, box, bounds) => {\n const upAvailable = constant$1(box.bottom - bounds.y);\n const downAvailable = constant$1(bounds.bottom - box.y);\n const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n const westAvailable = constant$1(box.right - bounds.x);\n const eastAvailable = constant$1(bounds.right - box.x);\n const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth,\n maxHeight\n };\n };\n const attempt = (candidate, width, height, bounds$1) => {\n const bubble = candidate.bubble;\n const bubbleOffset = bubble.offset;\n const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n const newX = candidate.x + bubbleOffset.left;\n const newY = candidate.y + bubbleOffset.top;\n const box = bounds(newX, newY, width, height);\n const {originInBounds, sizeInBounds, visibleW, visibleH} = determinePosition(box, adjustedBounds);\n const fits = originInBounds && sizeInBounds;\n const fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n const {maxWidth, maxHeight} = calcMaxSizes(candidate.direction, fittedBox, bounds$1);\n const reposition = {\n rect: fittedBox,\n maxHeight,\n maxWidth,\n direction: candidate.direction,\n placement: candidate.placement,\n classes: {\n on: bubble.classesOn,\n off: bubble.classesOff\n },\n layout: candidate.label,\n testY: newY\n };\n return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n };\n const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => {\n const panelWidth = elementBox.width;\n const panelHeight = elementBox.height;\n const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => {\n const next = layout(anchorBox, elementBox, bubbles, element, bounds);\n const attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n const improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n const abc = foldl(candidates, (b, a) => {\n const bestNext = curry(attemptBestFit, a);\n return b.fold(constant$1(b), bestNext);\n }, adt$8.nofit({\n rect: anchorBox,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast$3(),\n placement: 'southeast',\n classes: {\n on: [],\n off: []\n },\n layout: 'none',\n testY: anchorBox.y\n }, -1, -1, false));\n return abc.fold(identity, identity);\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const destroyable = () => singleton(s => s.destroy());\n const unbindable = () => singleton(s => s.unbind());\n const value$2 = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n const capture = (element, event, handler) => capture$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n const timerAttr = 'data-alloy-transition-timer';\n const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes);\n const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n return lastPlacement.exists(placer => {\n const mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n const hasChanges = (position, intermediate) => {\n const round = value => parseFloat(value).toFixed(3);\n return find$4(intermediate, (value, key) => {\n const newValue = position[key].map(round);\n const val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n const getTransitionDuration = element => {\n const get = name => {\n const style = get$e(element, name);\n const times = style.split(/\\s*,\\s*/);\n return filter$2(times, isNotEmpty);\n };\n const parse = value => {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n const num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n const delay = get('transition-delay');\n const duration = get('transition-duration');\n return foldl(duration, (acc, dur, i) => {\n const time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n const setupTransitionListeners = (element, transition) => {\n const transitionEnd = unbindable();\n const transitionCancel = unbindable();\n let timer;\n const isSourceTransition = e => {\n var _a;\n const pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n };\n const transitionDone = e => {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n const type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$7(element, timerAttr);\n remove$1(element, transition.classes);\n }\n }\n };\n const transitionStart = bind(element, transitionstart(), e => {\n if (isSourceTransition(e)) {\n transitionStart.unbind();\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n }\n });\n const duration = getTransitionDuration(element);\n requestAnimationFrame(() => {\n timer = setTimeout(transitionDone, duration + 17);\n set$9(element, timerAttr, timer);\n });\n };\n const startTransitioning = (element, transition) => {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(timerId => {\n clearTimeout(parseInt(timerId, 10));\n remove$7(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => {\n const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$8(element, 'position', position.position);\n const rect = toBox(origin, element);\n const intermediatePosition = reposition(origin, {\n ...decision,\n rect\n });\n const intermediateCssOptions = mapToObject(properties, prop => intermediatePosition[prop]);\n if (hasChanges(position, intermediateCssOptions)) {\n setOptions(element, intermediateCssOptions);\n if (shouldTransition) {\n startTransitioning(element, transition);\n }\n reflow(element);\n }\n } else {\n remove$1(element, transition.classes);\n }\n };\n\n const elementSize = p => ({\n width: getOuter$1(p),\n height: getOuter$2(p)\n });\n const layout = (anchorBox, element, bubbles, options) => {\n remove$6(element, 'max-height');\n remove$6(element, 'max-width');\n const elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n const setClasses = (element, decision) => {\n const classInfo = decision.classes;\n remove$1(element, classInfo.off);\n add$1(element, classInfo.on);\n };\n const setHeight = (element, decision, options) => {\n const maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n const setWidth = (element, decision, options) => {\n const maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n const position$2 = (element, decision, options) => {\n const positionCss = reposition(options.origin, decision);\n options.transition.each(transition => {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n const setPlacement = (element, decision) => {\n setPlacement$1(element, decision.placement);\n };\n\n const setMaxHeight = (element, maxHeight) => {\n setMax$1(element, Math.floor(maxHeight));\n };\n const anchored = constant$1((element, available) => {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n const expandable$1 = constant$1((element, available) => {\n setMaxHeight(element, available);\n });\n\n const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key];\n const simple = (anchor, element, bubble, layouts, lastPlacement, getBounds, overrideOptions, transition) => {\n const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n const anchorBox = anchor.anchorBox;\n const origin = anchor.origin;\n const options = {\n bounds: viewport(origin, getBounds),\n origin,\n preference: layouts,\n maxHeightFunction,\n maxWidthFunction,\n lastPlacement,\n transition\n };\n return go(anchorBox, element, bubble, options);\n };\n const go = (anchorBox, element, bubble, options) => {\n const decision = layout(anchorBox, element, bubble, options);\n position$2(element, decision, options);\n setPlacement(element, decision);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n return {\n layout: decision.layout,\n placement: decision.placement\n };\n };\n\n const allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n const nu$5 = (xOffset, yOffset, classes, insetModifier = 1) => {\n const insetXOffset = xOffset * insetModifier;\n const insetYOffset = yOffset * insetModifier;\n const getClasses = prop => get$g(classes, prop).getOr([]);\n const make = (xDelta, yDelta, alignmentsOn) => {\n const alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind$3(alignmentsOn, getClasses),\n classesOff: bind$3(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: () => make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]),\n southwest: () => make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]),\n south: () => make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]),\n northeast: () => make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]),\n northwest: () => make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]),\n north: () => make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]),\n east: () => make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]),\n west: () => make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]),\n insetNortheast: () => make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]),\n insetNorthwest: () => make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]),\n insetNorth: () => make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]),\n insetSoutheast: () => make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]),\n insetSouthwest: () => make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]),\n insetSouth: () => make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]),\n insetEast: () => make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]),\n insetWest: () => make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ])\n };\n };\n const fallback = () => nu$5(0, 0, {});\n\n const nu$4 = identity;\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$e(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n const Attribute = 'data-alloy-vertical-dir';\n const isBottomToTopDir = el => closest$2(el, current => isElement$1(current) && get$f(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop);\n\n const schema$y = () => optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option$3('onBottomLtr'),\n option$3('onBottomRtl')\n ]);\n const get$5 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n const customLtr = info.layouts.map(ls => ls.onLtr(elem));\n const customRtl = info.layouts.map(ls => ls.onRtl(elem));\n const ltr = isBottomToTop ? info.layouts.bind(ls => ls.onBottomLtr.map(f => f(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n const rtl = isBottomToTop ? info.layouts.bind(ls => ls.onBottomRtl.map(f => f(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n const f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n const placement$4 = (component, anchorInfo, origin) => {\n const hotspot = anchorInfo.hotspot;\n const anchorBox = toBox(origin, hotspot.element);\n const layouts = get$5(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts,\n placer: Optional.none()\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option$3('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n const placement$3 = (component, anchorInfo, origin) => {\n const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n const layouts = get$5(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts,\n placer: Optional.none()\n }));\n };\n var MakeshiftAnchor = [\n required$1('x'),\n required$1('y'),\n defaulted('height', 0),\n defaulted('width', 0),\n defaulted('bubble', fallback()),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$3)\n ];\n\n const adt$7 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n const toFixed = pos => pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop));\n const toAbsolute = pos => pos.fold(identity, identity);\n const sum = points => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0));\n const sumAsFixed = positions => {\n const points = map$2(positions, toFixed);\n return sum(points);\n };\n const sumAsAbsolute = positions => {\n const points = map$2(positions, toAbsolute);\n return sum(points);\n };\n const screen = adt$7.screen;\n const absolute$1 = adt$7.absolute;\n\n const getOffset = (component, origin, anchorInfo) => {\n const win = defaultView(anchorInfo.root).dom;\n const hasSameOwner = frame => {\n const frameOwner = owner$4(frame);\n const compOwner = owner$4(component.element);\n return eq(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n };\n const getRootPoint = (component, origin, anchorInfo) => {\n const doc = owner$4(component.element);\n const outerScroll = get$b(doc);\n const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n const getBox = (left, top, width, height) => {\n const point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map(box => {\n const points = [\n rootPoint,\n box.point\n ];\n const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n const layouts = get$5(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts,\n placer: Optional.none()\n });\n });\n\n const placement$2 = (component, anchorInfo, origin) => {\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(target => {\n const rect = target.dom.getBoundingClientRect();\n const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n const elem = anchorInfo.node.getOr(component.element);\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n required$1('node'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n\n const create$2 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$2 };\n\n const adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before = adt$6.before;\n const on$1 = adt$6.on;\n const after$1 = adt$6.after;\n const Situ = {\n before,\n on: on$1,\n after: after$1,\n cata,\n getStart: getStart$1\n };\n\n const adt$5 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$5.domRange;\n const relative = adt$5.relative;\n const exact = adt$5.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range$1 = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range: range$1\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n const getBounds$2 = rng => {\n const rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant$1(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$4.ltr, rng));\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$4.ltr;\n adt$4.rtl;\n\n const descendants = (scope, selector) => all$3(selector, scope);\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner$4(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getBounds$1 = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getBounds$2(rng);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$4 = element => api.get(element);\n\n const point = (element, offset) => ({\n element,\n offset\n });\n const descendOnce$1 = (element, offset) => {\n const children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n const last = children$1[children$1.length - 1];\n const len = isText(last) ? get$4(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset);\n const getAnchorSelection = (win, anchorInfo) => {\n const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win));\n return getSelection().map(sel => {\n const modStart = descendOnce(sel.start, sel.soffset);\n const modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n });\n };\n const placement$1 = (component, anchorInfo, origin) => {\n const win = defaultView(anchorInfo.root).dom;\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n const selectionBox = getAnchorSelection(win, anchorInfo).bind(sel => {\n const optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(() => {\n const x = SugarElement.fromText(zeroWidth);\n before$1(sel.start, x);\n const rect = getFirstRect(win, SimSelection.exact(x, 0, x, 1));\n remove$5(x);\n return rect;\n });\n return optRect.bind(rawRect => getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height));\n });\n const targetElement = getAnchorSelection(win, anchorInfo).bind(sel => isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start));\n const elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option$3('getSelection'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n const labelPrefix$1 = 'link-layout';\n const eastX = anchor => anchor.x + anchor.width;\n const westX = (anchor, element) => anchor.x - element.width;\n const northY$1 = (anchor, element) => anchor.y - element.height + anchor.height;\n const southY$1 = anchor => anchor.y;\n const southeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n const southwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), labelPrefix$1);\n const northeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), labelPrefix$1);\n const northwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), labelPrefix$1);\n const all = () => [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n const allRtl = () => [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n\n const placement = (component, submenuInfo, origin) => {\n const anchorBox = toBox(origin, submenuInfo.item.element);\n const layouts = get$5(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts,\n placer: Optional.none()\n }));\n };\n var SubmenuAnchor = [\n required$1('item'),\n schema$y(),\n defaulted('overrides', {}),\n output$1('placement', placement)\n ];\n\n var AnchorSchema = choose$1('type', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n const TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n const PositionSchema = [\n defaulted('useFixed', never),\n option$3('getBounds')\n ];\n const PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n const getFixedOrigin = () => {\n const html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n const getRelativeOrigin = component => {\n const position = absolute$3(component.element);\n const bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n const place = (component, origin, anchoring, getBounds, placee, lastPlace, transition) => {\n const anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, getBounds, anchoring.overrides, transition);\n };\n const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n positionWithin(component, posConfig, posState, placee, placementSpec, Optional.none());\n };\n const positionWithin = (component, posConfig, posState, placee, placementSpec, boxElement) => {\n const boundsBox = boxElement.map(box$1);\n return positionWithinBounds(component, posConfig, posState, placee, placementSpec, boundsBox);\n };\n const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, bounds) => {\n const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n const anchorage = placeeDetail.anchor;\n const element = placee.element;\n const placeeState = posState.get(placee.uid);\n preserve$1(() => {\n set$8(element, 'position', 'fixed');\n const oldVisibility = getRaw(element, 'visibility');\n set$8(element, 'visibility', 'hidden');\n const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n const placer = anchorage.placement;\n const getBounds = bounds.map(constant$1).or(posConfig.getBounds);\n placer(component, anchorage, origin).each(anchoring => {\n const doPlace = anchoring.placer.getOr(place);\n const newState = doPlace(component, origin, anchoring, getBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(() => {\n remove$6(element, 'visibility');\n }, vis => {\n set$8(element, 'visibility', vis);\n });\n if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is$1(getRaw(element, 'position'), 'fixed')) {\n remove$6(element, 'position');\n }\n }, element);\n };\n const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute';\n const reset$1 = (component, pConfig, posState, placee) => {\n const element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], prop => remove$6(element, prop));\n reset$2(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithin: positionWithin,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset$1\n });\n\n const init$g = () => {\n let state = {};\n const set = (id, data) => {\n state[id] = data;\n };\n const get = id => get$g(state, id);\n const clear = id => {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$8({\n readState: () => state,\n clear,\n set,\n get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n const Positioning = create$3({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n const isConnected = comp => comp.getSystem().isConnected();\n const fireDetaching = component => {\n emit(component, detachedFromDom());\n const children = component.components();\n each$1(children, fireDetaching);\n };\n const fireAttaching = component => {\n const children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n const virtualAttach = (parent, child) => {\n parent.getSystem().addToWorld(child);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n };\n const virtualDetach = comp => {\n fireDetaching(comp);\n comp.getSystem().removeFromWorld(comp);\n };\n const attach$1 = (parent, child) => {\n append$2(parent.element, child.element);\n };\n const detachChildren$1 = component => {\n each$1(component.components(), childComp => remove$5(childComp.element));\n empty(component.element);\n component.syncComponents();\n };\n const replaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n detachChildren$1(component);\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, comp => {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n component.getSystem().addToWorld(childComp);\n attach$1(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach$1(component, childComp);\n }\n });\n component.syncComponents();\n };\n const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n const existingComps = bind$3(newSpecs, spec => getPremade(spec).toArray());\n each$1(subs, childComp => {\n if (!contains$2(existingComps, childComp)) {\n virtualDetach(childComp);\n }\n });\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, deletedComp => {\n if (isConnected(deletedComp)) {\n virtualDetach(deletedComp);\n }\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n virtualAttach(component, childComp);\n }\n });\n component.syncComponents();\n };\n\n const attach = (parent, child) => {\n attachWith(parent, child, append$2);\n };\n const attachWith = (parent, child, insertion) => {\n parent.getSystem().addToWorld(child);\n insertion(parent.element, child.element);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n parent.syncComponents();\n };\n const doDetach = component => {\n fireDetaching(component);\n remove$5(component.element);\n component.getSystem().removeFromWorld(component);\n };\n const detach = component => {\n const parent$1 = parent(component.element).bind(p => component.getSystem().getByDom(p).toOptional());\n doDetach(component);\n parent$1.each(p => {\n p.syncComponents();\n });\n };\n const detachChildren = component => {\n const subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n const attachSystem = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, append$2);\n };\n const attachSystemAfter = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, after$2);\n };\n const attachSystemWith = (element, guiSystem, inserter) => {\n inserter(element, guiSystem.element);\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n const detachSystem = guiSystem => {\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$5(guiSystem.element);\n };\n\n const rebuild = (sandbox, sConfig, sState, data) => {\n sState.get().each(_data => {\n detachChildren(sandbox);\n });\n const point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n const built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n const open$1 = (sandbox, sConfig, sState, data) => {\n const newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n cloak(sandbox, sConfig);\n open$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n const close$1 = (sandbox, sConfig, sState) => {\n sState.get().each(data => {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists(data => sConfig.isPartOf(sandbox, data, queryElem));\n const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n const store = (sandbox, cssKey, attr, newValue) => {\n getRaw(sandbox.element, cssKey).fold(() => {\n remove$7(sandbox.element, attr);\n }, v => {\n set$9(sandbox.element, attr, v);\n });\n set$8(sandbox.element, cssKey, newValue);\n };\n const restore = (sandbox, cssKey, attr) => {\n getOpt(sandbox.element, attr).fold(() => remove$6(sandbox.element, cssKey), oldValue => set$8(sandbox.element, cssKey, oldValue));\n };\n const cloak = (sandbox, sConfig, _sState) => {\n const sink = sConfig.getAttachPoint(sandbox);\n set$8(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n const hasPosition = element => exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], pos => getRaw(element, pos).isSome());\n const decloak = (sandbox, sConfig, _sState) => {\n if (!hasPosition(sandbox.element)) {\n remove$6(sandbox.element, 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open$1,\n openWhileCloaked: openWhileCloaked,\n close: close$1,\n isOpen: isOpen$1,\n isPartOf: isPartOf,\n getState: getState$2,\n setContent: setContent\n });\n\n const events$g = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n required$1('isPartOf'),\n required$1('getAttachPoint'),\n defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n const init$f = () => {\n const contents = value$2();\n const readState = constant$1('not-implemented');\n return nu$8({\n readState,\n isOpen: contents.isSet,\n clear: contents.clear,\n set: contents.set,\n get: contents.get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n const Sandboxing = create$3({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n const dismissPopups = constant$1('dismiss.popups');\n const repositionPopups = constant$1('reposition.popups');\n const mouseReleased = constant$1('mouse.released');\n\n const schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n const receivingChannel$1 = rawSpec => {\n const detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return {\n [dismissPopups()]: {\n schema: objOfOnly([required$1('target')]),\n onReceive: (sandbox, data) => {\n if (Sandboxing.isOpen(sandbox)) {\n const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n }\n };\n };\n\n const schema$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n const receivingChannel = rawSpec => {\n const detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n return {\n [repositionPopups()]: {\n onReceive: sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(() => detail.doReposition(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n };\n };\n\n const onLoad$5 = (component, repConfig, repState) => {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n const onUnload$2 = (component, repConfig, repState) => {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n const setValue$3 = (component, repConfig, repState, data) => {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n const getState$1 = (component, repConfig, repState) => repState;\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$5,\n onUnload: onUnload$2,\n setValue: setValue$3,\n getValue: getValue$3,\n getState: getState$1\n });\n\n const events$f = (repConfig, repState) => {\n const es = repConfig.resetOnDom ? [\n runOnAttached((comp, _se) => {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached((comp, _se) => {\n onUnload$2(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad$5)];\n return derive$2(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n const memory$1 = () => {\n const data = Cell(null);\n const readState = () => ({\n mode: 'memory',\n value: data.get()\n });\n const isNotSet = () => data.get() === null;\n const clear = () => {\n data.set(null);\n };\n return nu$8({\n set: data.set,\n get: data.get,\n isNotSet,\n clear,\n readState\n });\n };\n const manual = () => {\n const readState = noop;\n return nu$8({ readState });\n };\n const dataset = () => {\n const dataByValue = Cell({});\n const dataByText = Cell({});\n const readState = () => ({\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n });\n const clear = () => {\n dataByValue.set({});\n dataByText.set({});\n };\n const lookup = itemString => get$g(dataByValue.get(), itemString).orThunk(() => get$g(dataByText.get(), itemString));\n const update = items => {\n const currentDataByValue = dataByValue.get();\n const currentDataByText = dataByText.get();\n const newDataByValue = {};\n const newDataByText = {};\n each$1(items, item => {\n newDataByValue[item.value] = item;\n get$g(item, 'meta').each(meta => {\n get$g(meta, 'text').each(text => {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set({\n ...currentDataByValue,\n ...newDataByValue\n });\n dataByText.set({\n ...currentDataByText,\n ...newDataByText\n });\n };\n return nu$8({\n readState,\n lookup,\n update,\n clear\n });\n };\n const init$e = spec => spec.store.manager.state(spec);\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$e\n });\n\n const setValue$2 = (component, repConfig, repState, data) => {\n const store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const getValue$2 = (component, repConfig, repState) => {\n const store = repConfig.store;\n const key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key));\n };\n const onLoad$4 = (component, repConfig, repState) => {\n const store = repConfig.store;\n store.initialValue.each(data => {\n setValue$2(component, repConfig, repState, data);\n });\n };\n const onUnload$1 = (component, repConfig, repState) => {\n repState.clear();\n };\n var DatasetStore = [\n option$3('initialValue'),\n required$1('getFallbackEntry'),\n required$1('getDataKey'),\n required$1('setValue'),\n output$1('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$4,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n const setValue$1 = (component, repConfig, _repState, data) => {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const onLoad$3 = (component, repConfig, _repState) => {\n repConfig.store.initialValue.each(data => {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option$3('initialValue'),\n output$1('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$3,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n const setValue = (component, repConfig, repState, data) => {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n const getValue = (component, repConfig, repState) => repState.get();\n const onLoad$2 = (component, repConfig, repState) => {\n repConfig.store.initialValue.each(initVal => {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n const onUnload = (component, repConfig, repState) => {\n repState.clear();\n };\n var MemoryStore = [\n option$3('initialValue'),\n output$1('manager', {\n setValue,\n getValue,\n onLoad: onLoad$2,\n onUnload,\n state: memory$1\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted('resetOnDom', false)\n ];\n\n const Representing = create$3({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: (component, source) => {\n const value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, f => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([customField('dump', identity)]));\n const get$3 = data => data.dump;\n const augment = (data, original) => ({\n ...derive$1(original),\n ...data.dump\n });\n const SketchBehaviours = {\n field,\n augment,\n get: get$3\n };\n\n const _placeholder = 'placeholder';\n const adt$3 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n const isSubstituted = spec => has$2(spec, 'uiType');\n const subPlaceholder = (owner, detail, compSpec, placeholders) => {\n if (owner.exists(o => o !== compSpec.owner)) {\n return adt$3.single(true, constant$1(compSpec));\n }\n return get$g(placeholders, compSpec.name).fold(() => {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, newSpec => newSpec.replace());\n };\n const scan = (owner, detail, compSpec, placeholders) => {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$3.single(false, constant$1(compSpec));\n }\n };\n const substitute = (owner, detail, compSpec, placeholders) => {\n const base = scan(owner, detail, compSpec, placeholders);\n return base.fold((req, valueThunk) => {\n const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n const childSpecs = get$g(value, 'components').getOr([]);\n const substituted = bind$3(childSpecs, c => substitute(owner, detail, c, placeholders));\n return [{\n ...value,\n components: substituted\n }];\n }, (req, valuesThunk) => {\n if (isSubstituted(compSpec)) {\n const values = valuesThunk(detail, compSpec.config, compSpec.validated);\n const preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n const substituteAll = (owner, detail, components, placeholders) => bind$3(components, c => substitute(owner, detail, c, placeholders));\n const oneReplace = (label, replacements) => {\n let called = false;\n const used = () => called;\n const replace = () => {\n if (called) {\n throw new Error('Trying to use the same placeholder more than once: ' + label);\n }\n called = true;\n return replacements;\n };\n const required = () => replacements.fold((req, _) => req, (req, _) => req);\n return {\n name: constant$1(label),\n required,\n used,\n replace\n };\n };\n const substitutePlaces = (owner, detail, components, placeholders) => {\n const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph));\n const outcome = substituteAll(owner, detail, components, ps);\n each(ps, p => {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n const single$2 = adt$3.single;\n const multiple = adt$3.multiple;\n const placeholder = constant$1(_placeholder);\n\n const adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n const fFactory = defaulted('factory', { sketch: identity });\n const fSchema = defaulted('schema', []);\n const fName = required$1('name');\n const fPname = field$1('pname', 'pname', defaultedThunk(typeSpec => ''), anyValue());\n const fGroupSchema = customField('schema', () => [option$3('preprocess')]);\n const fDefaults = defaulted('defaults', constant$1({}));\n const fOverrides = defaulted('overrides', constant$1({}));\n const requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n const optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n const asNamedPart = part => {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n const name$2 = part => {\n const get = data => data.name;\n return part.fold(get, get, get, get);\n };\n const asCommon = part => {\n return part.fold(identity, identity, identity, identity);\n };\n const convert = (adtConstructor, partSchema) => spec => {\n const data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n const required = convert(adt$2.required, requiredSpec);\n const external = convert(adt$2.external, externalSpec);\n const optional = convert(adt$2.optional, optionalSpec);\n const group = convert(adt$2.group, groupSpec);\n const original = constant$1('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$2,\n asCommon: asCommon,\n original: original\n });\n\n const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n const subs = (owner, detail, parts) => {\n const internals = {};\n const externals = {};\n each$1(parts, part => {\n part.fold(data => {\n internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n const partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, data => {\n internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => {\n const units = detail[data.name];\n return map$2(units, u => data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u))));\n });\n });\n });\n return {\n internals: constant$1(internals),\n externals: constant$1(externals)\n };\n };\n\n const generate$3 = (owner, parts) => {\n const r = {};\n each$1(parts, part => {\n asNamedPart(part).each(np => {\n const g = doGenerateOne(owner, np.pname);\n r[np.name] = config => {\n const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return {\n ...g,\n config,\n validated\n };\n };\n });\n });\n return r;\n };\n const doGenerateOne = (owner, pname) => ({\n uiType: placeholder(),\n owner,\n name: pname\n });\n const generateOne$1 = (owner, pname, config) => ({\n uiType: placeholder(),\n owner,\n name: pname,\n config,\n validated: {}\n });\n const schemas = parts => bind$3(parts, part => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(data => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n const names = parts => map$2(parts, name$2);\n const substitutes = (owner, detail, parts) => subs(owner, detail, parts);\n const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n const getPart = (component, detail, partKey) => {\n const uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n const getParts = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n const getAllParts = (component, detail) => {\n const system = component.getSystem();\n return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n };\n const getAllPartNames = detail => keys(detail.partUids);\n const getPartsOrDie = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n const defaultUids = (baseUid, partTypes) => {\n const partNames = names(partTypes);\n return wrapAll(map$2(partNames, pn => ({\n key: pn,\n value: baseUid + '-' + pn\n })));\n };\n const defaultUidsSchema = partTypes => field$1('partUids', 'partUids', mergeWithThunk(spec => defaultUids(spec.uid, partTypes)), anyValue());\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$3,\n generateOne: generateOne$1,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components$1,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n const base = (partSchemas, partUidsSchemas) => {\n const ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n return ps.concat([\n required$1('uid'),\n defaulted('dom', {}),\n defaulted('components', []),\n snapshot('originalSpec'),\n defaulted('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => {\n const baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n const single$1 = (owner, schema, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const detail = asRawOrDie(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n const composite$1 = (owner, schema, partTypes, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const partSchemas = schemas(partTypes);\n const partUidsSchema = defaultUidsSchema(partTypes);\n const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n const subs = substitutes(owner, detail, partTypes);\n const components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n const hasUid = spec => has$2(spec, 'uid');\n const supplyUid = spec => {\n return hasUid(spec) ? spec : {\n ...spec,\n uid: generate$5('uid')\n };\n };\n\n const isSketchSpec = spec => {\n return spec.uid !== undefined;\n };\n const singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const compositeSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n required$1('partFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const single = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n const sketch = spec => single$1(config.name, config.configFields, config.factory, spec);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n configFields: config.configFields,\n sketch,\n ...apis,\n ...extraApis\n };\n };\n const composite = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n const sketch = spec => composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n const parts = generate$3(config.name, config.partFields);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch,\n parts,\n ...apis,\n ...extraApis\n };\n };\n\n const inside = target => isTag('input')(target) && get$f(target, 'type') !== 'radio' || isTag('textarea')(target);\n\n const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n const ComposeSchema = [required$1('find')];\n\n const Composing = create$3({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n const nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n const onLoad$1 = (component, disableConfig, disableState) => {\n const f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig);\n };\n const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n const nativeIsDisabled = component => has$1(component.element, 'disabled');\n const nativeDisable = component => {\n set$9(component.element, 'disabled', 'disabled');\n };\n const nativeEnable = component => {\n remove$7(component.element, 'disabled');\n };\n const ariaIsDisabled = component => get$f(component.element, 'aria-disabled') === 'true';\n const ariaDisable = component => {\n set$9(component.element, 'aria-disabled', 'true');\n };\n const ariaEnable = component => {\n set$9(component.element, 'aria-disabled', 'false');\n };\n const disable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n add$2(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n const enable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n remove$2(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n const isDisabled = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n const set$4 = (component, disableConfig, disableState, disabled) => {\n const f = disabled ? disable : enable;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable,\n disable: disable,\n isDisabled: isDisabled,\n onLoad: onLoad$1,\n set: set$4\n });\n\n const exhibit$5 = (base, disableConfig) => nu$7({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n const events$e = (disableConfig, disableState) => derive$2([\n abort(execute$5(), (component, _simulatedEvent) => isDisabled(component, disableConfig)),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$e\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option$3('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n const Disabling = create$3({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n const highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, h => {\n const shouldSkip = exists(skip, skipComp => eq(skipComp.element, h));\n if (!shouldSkip) {\n remove$2(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(target => {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n const dehighlight = (component, hConfig, hState, target) => {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$2(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n const highlight = (component, hConfig, hState, target) => {\n dehighlightAllExcept(component, hConfig, hState, [target]);\n if (!isHighlighted(component, hConfig, hState, target)) {\n add$2(target.element, hConfig.highlightClass);\n hConfig.onHighlight(component, target);\n emit(target, highlight$1());\n }\n };\n const highlightFirst = (component, hConfig, hState) => {\n getFirst(component, hConfig).each(firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightLast = (component, hConfig, hState) => {\n getLast(component, hConfig).each(lastComp => {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n const highlightAt = (component, hConfig, hState, index) => {\n getByIndex(component, hConfig, hState, index).fold(err => {\n throw err;\n }, firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightBy = (component, hConfig, hState, predicate) => {\n const candidates = getCandidates(component, hConfig);\n const targetComp = find$5(candidates, predicate);\n targetComp.each(c => {\n highlight(component, hConfig, hState, c);\n });\n };\n const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass);\n const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getByIndex = (component, hConfig, hState, index) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom);\n };\n const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getLast = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(c => component.getSystem().getByDom(c).toOptional());\n };\n const getDelta$2 = (component, hConfig, hState, delta) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const current = findIndex$1(items, item => has(item, hConfig.highlightClass));\n return current.bind(selected => {\n const dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1);\n const getCandidates = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, i => component.getSystem().getByDom(i).toOptional()));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight,\n highlight: highlight,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n required$1('highlightClass'),\n required$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n const Highlighting = create$3({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n const BACKSPACE = [8];\n const TAB = [9];\n const ENTER = [13];\n const ESCAPE = [27];\n const SPACE = [32];\n const LEFT = [37];\n const UP = [38];\n const RIGHT = [39];\n const DOWN = [40];\n\n const cyclePrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n const after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n const tryPrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n return find$5(before, predicate);\n };\n const cycleNext = (values, index, predicate) => {\n const before = values.slice(0, index);\n const after = values.slice(index + 1);\n return find$5(after.concat(before), predicate);\n };\n const tryNext = (values, index, predicate) => {\n const after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n const inSet = keys => event => {\n const raw = event.raw;\n return contains$2(keys, raw.which);\n };\n const and = preds => event => forall(preds, pred => pred(event));\n const isShift = event => {\n const raw = event.raw;\n return raw.shiftKey === true;\n };\n const isControl = event => {\n const raw = event.raw;\n return raw.ctrlKey === true;\n };\n const isNotShift = not(isShift);\n\n const rule = (matches, action) => ({\n matches,\n classification: action\n });\n const choose = (transitions, event) => {\n const transition = find$5(transitions, t => t.matches(event));\n return transition.map(t => t.classification);\n };\n\n const reportFocusShifting = (component, prevFocus, newFocus) => {\n const noChange = prevFocus.exists(p => newFocus.exists(n => eq(n, p)));\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus,\n newFocus\n });\n }\n };\n const dom$2 = () => {\n const get = component => search(component.element);\n const set = (component, focusee) => {\n const prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n const highlights = () => {\n const get = component => Highlighting.getHighlighted(component).map(item => item.element);\n const set = (component, element) => {\n const prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, item => {\n Highlighting.highlight(component, item);\n });\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => {\n const schema = () => infoSchema.concat([\n defaulted('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(val => contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(rule => rule(component, simulatedEvent, keyingConfig, keyingState));\n };\n const toEvents = (keyingConfig, keyingState) => {\n const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(focusIn => run$1(focus$4(), (component, simulatedEvent) => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n }));\n const tryGoInsideComponent = (component, simulatedEvent) => {\n const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(focusIn => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n const keyboardEvents = [\n run$1(keydown(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => {\n tryGoInsideComponent(component, simulatedEvent);\n }, _ => {\n simulatedEvent.stop();\n });\n }),\n run$1(keyup(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(_ => {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n };\n const me = {\n schema,\n processKey,\n toEvents\n };\n return me;\n };\n\n const create$1 = cyclicField => {\n const schema = [\n option$3('onEscape'),\n option$3('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option$3('visibilitySelector')\n ].concat([cyclicField]);\n const isVisible = (tabbingConfig, element) => {\n const target = tabbingConfig.visibilitySelector.bind(sel => closest$1(element, sel)).getOr(element);\n return get$d(target) > 0;\n };\n const findInitial = (component, tabbingConfig) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n const visibles = filter$2(tabstops, elem => isVisible(tabbingConfig, elem));\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind(elem => closest$1(elem, tabbingConfig.selector));\n const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n const focusIn = (component, tabbingConfig, _tabbingState) => {\n findInitial(component, tabbingConfig).each(target => {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, elem => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), target => {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n const go = (component, _simulatedEvent, tabbingConfig, cycle) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(tabstop => {\n const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(stopIndex => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n });\n };\n const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const goForwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind(f => f(component, simulatedEvent));\n const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind(f => f(component, simulatedEvent));\n const getKeydownRules = constant$1([\n rule(and([\n isShift,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n const getKeyupRules = constant$1([rule(inSet(ESCAPE), exit)]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn));\n };\n\n var AcyclicType = create$1(customField('cyclic', never));\n\n var CyclicType = create$1(customField('cyclic', always));\n\n const doDefaultExecute = (component, _simulatedEvent, focused) => {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n const defaultExecute = (component, simulatedEvent, focused) => {\n const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n\n const schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n const enterExec = executeConfig.useEnter ? ENTER : [];\n const downExec = executeConfig.useDown ? DOWN : [];\n const execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$4)] : []);\n };\n const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n\n const flatgrid$1 = () => {\n const dimensions = value$2();\n const setGridSize = (numRows, numColumns) => {\n dimensions.set({\n numRows,\n numColumns\n });\n };\n const getNumRows = () => dimensions.get().map(d => d.numRows);\n const getNumColumns = () => dimensions.get().map(d => d.numColumns);\n return nu$8({\n readState: () => dimensions.get().map(d => ({\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n })).getOr({\n numRows: '?',\n numColumns: '?'\n }),\n setGridSize,\n getNumRows,\n getNumColumns\n });\n };\n const init$d = spec => spec.state(spec);\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$d\n });\n\n const useH = movement => (component, simulatedEvent, config, state) => {\n const move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n const west$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n const east$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n const useV = move => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state);\n const use = (move, component, simulatedEvent, config, state) => {\n const outcome = config.focusManager.get(component).bind(focused => move(component.element, focused, config, state));\n return outcome.map(newFocus => {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n const north$1 = useV;\n const south$1 = useV;\n const move$1 = useV;\n\n const isHidden$1 = dom => dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n const isVisible = element => !isHidden$1(element.dom);\n\n const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map(index => ({\n index,\n candidates\n }));\n\n const locateVisible = (container, current, selector) => {\n const predicate = x => eq(x, current);\n const candidates = descendants(container, selector);\n const visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n const findIndex = (elements, target) => findIndex$1(elements, elem => eq(target, elem));\n\n const withGrid = (values, index, numCols, f) => {\n const oldRow = Math.floor(index / numCols);\n const oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(address => {\n const newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const onLastRow = oldRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n const onLastRow = newRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n const newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1);\n const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1);\n const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1);\n const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1);\n\n const schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n const focusIn$3 = (component, gridConfig, _gridState) => {\n descendant(component.element, gridConfig.selector).each(first => {\n gridConfig.focusManager.set(component, first);\n });\n };\n const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind(elem => closest$1(elem, gridConfig.selector));\n const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind(focused => gridConfig.execute(component, simulatedEvent, focused));\n const doMove$2 = cycle => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector).bind(identified => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n const moveLeft$3 = doMove$2(cycleLeft$1);\n const moveRight$3 = doMove$2(cycleRight$1);\n const moveNorth$1 = doMove$2(cycleUp$1);\n const moveSouth$1 = doMove$2(cycleDown$1);\n const getKeydownRules$4 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$1(moveNorth$1)),\n rule(inSet(DOWN), south$1(moveSouth$1)),\n rule(and([\n isShift,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n const getKeyupRules$4 = constant$1([\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE), stopEventForFirefox)\n ]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$3));\n\n const horizontal = (container, selector, current, delta) => {\n const isDisabledButton = candidate => name$3(candidate) === 'button' && get$f(candidate, 'disabled') === 'disabled';\n const tryCycle = (initial, index, candidates) => {\n const newIndex = cycleBy(index, delta, 0, candidates.length - 1);\n if (newIndex === initial) {\n return Optional.none();\n } else {\n return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Optional.from(candidates[newIndex]);\n }\n };\n return locateVisible(container, current, selector).bind(identified => {\n const index = identified.index;\n const candidates = identified.candidates;\n return tryCycle(index, index, candidates);\n });\n };\n\n const schema$t = [\n required$1('selector'),\n defaulted('getInitial', Optional.none),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('executeOnMove', false),\n defaulted('allowVertical', true)\n ];\n const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind(elem => closest$1(elem, flowConfig.selector));\n const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind(focused => flowConfig.execute(component, simulatedEvent, focused));\n const focusIn$2 = (component, flowConfig, _state) => {\n flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each(first => {\n flowConfig.focusManager.set(component, first);\n });\n };\n const moveLeft$2 = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n const moveRight$2 = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n const doMove$1 = movement => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n const westMovers = LEFT.concat(flowConfig.allowVertical ? UP : []);\n const eastMovers = RIGHT.concat(flowConfig.allowVertical ? DOWN : []);\n return [\n rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n rule(inSet(ENTER), execute$2),\n rule(inSet(SPACE), execute$2)\n ];\n };\n const getKeyupRules$3 = constant$1([\n rule(inSet(SPACE), stopEventForFirefox),\n rule(inSet(ESCAPE), doEscape)\n ]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$2));\n\n const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind(row => Optional.from(row[columnIndex]).map(cell => ({\n rowIndex,\n columnIndex,\n cell\n })));\n const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const cycleVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const moveVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1);\n const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1);\n const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1);\n const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1);\n const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1);\n const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1);\n const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1);\n const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1);\n\n const schema$s = [\n requiredObjOf('selectors', [\n required$1('row'),\n required$1('cell')\n ]),\n defaulted('cycles', true),\n defaulted('previousSelector', Optional.none),\n defaulted('execute', defaultExecute)\n ];\n const focusIn$1 = (component, matrixConfig, _state) => {\n const focused = matrixConfig.previousSelector(component).orThunk(() => {\n const selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(cell => {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind(focused => matrixConfig.execute(component, simulatedEvent, focused));\n const toMatrix = (rows, matrixConfig) => map$2(rows, row => descendants(row, matrixConfig.selectors.cell));\n const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => {\n const move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(inRow => {\n const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(colIndex => {\n const allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(allRows, inRow).bind(rowIndex => {\n const matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(next => next.cell);\n });\n });\n });\n };\n const moveLeft = doMove(cycleLeft, moveLeft$1);\n const moveRight = doMove(cycleRight, moveRight$1);\n const moveNorth = doMove(cycleUp, moveUp$1);\n const moveSouth = doMove(cycleDown, moveDown$1);\n const getKeydownRules$2 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n rule(inSet(UP), north$1(moveNorth)),\n rule(inSet(DOWN), south$1(moveSouth)),\n rule(inSet(SPACE.concat(ENTER)), execute$1)\n ]);\n const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$1));\n\n const schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind(focused => menuConfig.execute(component, simulatedEvent, focused));\n const focusIn = (component, menuConfig, _state) => {\n descendant(component.element, menuConfig.selector).each(first => {\n menuConfig.focusManager.set(component, first);\n });\n };\n const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift,\n inSet(TAB)\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), fireTab),\n rule(inSet(ENTER), execute),\n rule(inSet(SPACE), execute)\n ]);\n const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn));\n\n const schema$q = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted('stopSpaceKeyup', false),\n option$3('focusIn')\n ];\n const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n rule(inSet(SPACE), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), specialInfo.onEnter),\n rule(and([\n isShift,\n inSet(ENTER)\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift,\n inSet(TAB)\n ]), specialInfo.onShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), specialInfo.onTab),\n rule(inSet(UP), specialInfo.onUp),\n rule(inSet(DOWN), specialInfo.onDown),\n rule(inSet(LEFT), specialInfo.onLeft),\n rule(inSet(RIGHT), specialInfo.onRight),\n rule(inSet(SPACE), specialInfo.onSpace)\n ];\n const getKeyupRules = (component, simulatedEvent, specialInfo) => [\n ...specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [],\n rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, specialInfo => specialInfo.focusIn);\n\n const acyclic = AcyclicType.schema();\n const cyclic = CyclicType.schema();\n const flow = FlowType.schema();\n const flatgrid = FlatgridType.schema();\n const matrix = MatrixType.schema();\n const execution = ExecutionType.schema();\n const menu = MenuType.schema();\n const special = SpecialType.schema();\n\n var KeyboardBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n acyclic: acyclic,\n cyclic: cyclic,\n flow: flow,\n flatgrid: flatgrid,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n const isFlatgridState = keyState => hasNonNullableKey(keyState, 'setGridSize');\n const Keying = createModes({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: (keyingConfig, keyingState) => {\n const handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: (component, keyConfig, keyState) => {\n keyConfig.sendFocusIn(keyConfig).fold(() => {\n component.getSystem().triggerFocus(component.element, component.element);\n }, sendFocusIn => {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n if (!isFlatgridState(keyState)) {\n console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n const withoutReuse = (parent, data) => {\n preserve$1(() => {\n replaceChildren(parent, data, () => map$2(data, parent.getSystem().build));\n }, parent.element);\n };\n const withReuse = (parent, data) => {\n preserve$1(() => {\n virtualReplaceChildren(parent, data, () => {\n return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch);\n });\n }, parent.element);\n };\n\n const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n virtualDetach(replacee);\n const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n virtualAttach(component, child);\n component.syncComponents();\n };\n const insert = (component, insertion, childSpec) => {\n const child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n const replace = (component, replacee, replaceeIndex, childSpec) => {\n detach(replacee);\n insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec);\n };\n const set$3 = (component, replaceConfig, replaceState, data) => {\n const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n return replacer(component, data);\n };\n const append = (component, replaceConfig, replaceState, appendee) => {\n insert(component, append$2, appendee);\n };\n const prepend = (component, replaceConfig, replaceState, prependee) => {\n insert(component, prepend$1, prependee);\n };\n const remove = (component, replaceConfig, replaceState, removee) => {\n const children = contents(component);\n const foundChild = find$5(children, child => eq(removee.element, child.element));\n foundChild.each(detach);\n };\n const contents = (component, _replaceConfig) => component.components();\n const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n const children = contents(component);\n return Optional.from(children[replaceeIndex]).map(replacee => {\n replacer.fold(() => detach(replacee), r => {\n const replacer = replaceConfig.reuseDom ? virtualReplace : replace;\n replacer(component, replacee, replaceeIndex, r);\n });\n return replacee;\n });\n };\n const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n const children = contents(component);\n return findIndex$1(children, replaceePred).bind(replaceeIndex => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer));\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n remove: remove,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$3,\n contents: contents\n });\n\n const Replacing = create$3({\n fields: [defaultedBoolean('reuseDom', true)],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n const events$d = (name, eventHandlers) => {\n const events = derive$2(eventHandlers);\n return create$3({\n fields: [required$1('enabled')],\n name,\n active: { events: constant$1(events) }\n });\n };\n const config = (name, eventHandlers) => {\n const me = events$d(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n const focus$2 = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n const blur = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n blur$1(component.element);\n }\n };\n const isFocused = component => hasFocus(component.element);\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur,\n isFocused: isFocused\n });\n\n const exhibit$4 = (base, focusConfig) => {\n const mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$7(mod);\n };\n const events$c = focusConfig => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_, simulatedEvent) => {\n simulatedEvent.event.prevent();\n })] : []));\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$c\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n const Focusing = create$3({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n const SetupBehaviourCellState = initialState => {\n const init = () => {\n const cell = Cell(initialState);\n const get = () => cell.get();\n const set = newState => cell.set(newState);\n const clear = () => cell.set(initialState);\n const readState = () => cell.get();\n return {\n get,\n set,\n clear,\n readState\n };\n };\n return { init };\n };\n\n const updateAriaState = (component, toggleConfig, toggleState) => {\n const ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n const updateClass = (component, toggleConfig, toggleState) => {\n toggleConfig.toggleClass.each(toggleClass => {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$2(component.element, toggleClass);\n }\n });\n };\n const set$2 = (component, toggleConfig, toggleState, state) => {\n const initialState = toggleState.get();\n toggleState.set(state);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n if (initialState !== state) {\n toggleConfig.onToggled(component, state);\n }\n };\n const toggle$2 = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, !toggleState.get());\n };\n const on = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, true);\n };\n const off = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, false);\n };\n const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n const onLoad = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n toggle: toggle$2,\n isOn: isOn,\n on: on,\n off: off,\n set: set$2\n });\n\n const exhibit$3 = () => nu$7({});\n const events$b = (toggleConfig, toggleState) => {\n const execute = executeEvent(toggleConfig, toggleState, toggle$2);\n const load = loadEvent(toggleConfig, toggleState, onLoad);\n return derive$2(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$b\n });\n\n const updatePressed = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n const updateSelected = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-selected', status);\n };\n const updateChecked = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-checked', status);\n };\n const updateExpanded = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option$3('toggleClass'),\n defaulted('toggleOnExecute', true),\n onHandler('onToggled'),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted('syncWithExpanded', false),\n output$1('update', updatePressed)\n ],\n checked: [output$1('update', updateChecked)],\n expanded: [output$1('update', updateExpanded)],\n selected: [output$1('update', updateSelected)],\n none: [output$1('update', noop)]\n }))\n ];\n\n const Toggling = create$3({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n const pointerEvents = () => {\n const onClick = (component, simulatedEvent) => {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run$1(click(), onClick),\n run$1(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n const events$a = optAction => {\n const executeHandler = action => runOnExecute$1((component, simulatedEvent) => {\n action(component);\n simulatedEvent.stop();\n });\n return derive$2(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n const hoverEvent = 'alloy.item-hover';\n const focusEvent = 'alloy.item-focus';\n const toggledEvent = 'alloy.item-toggled';\n const onHover = item => {\n if (search(item.element).isNone() || Focusing.isFocused(item)) {\n if (!Focusing.isFocused(item)) {\n Focusing.focus(item);\n }\n emitWith(item, hoverEvent, { item });\n }\n };\n const onFocus$1 = item => {\n emitWith(item, focusEvent, { item });\n };\n const onToggled = (item, state) => {\n emitWith(item, toggledEvent, {\n item,\n state\n });\n };\n const hover = constant$1(hoverEvent);\n const focus$1 = constant$1(focusEvent);\n const toggled = constant$1(toggledEvent);\n\n const getItemRole = detail => detail.toggling.map(toggling => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox').getOr('menuitem');\n const getTogglingSpec = tConfig => ({\n aria: { mode: 'checked' },\n ...filter$1(tConfig, (_value, name) => name !== 'exclusive'),\n onToggled: (component, state) => {\n if (isFunction(tConfig.onToggled)) {\n tConfig.onToggled(component, state);\n }\n onToggled(component, state);\n }\n });\n const builder$2 = detail => ({\n dom: detail.dom,\n domModification: {\n ...detail.domModification,\n attributes: {\n 'role': getItemRole(detail),\n ...detail.domModification.attributes,\n 'aria-haspopup': detail.hasSubmenu,\n ...detail.hasSubmenu ? { 'aria-expanded': false } : {}\n }\n },\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, tConfig => Toggling.config(getTogglingSpec(tConfig))),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', [\n ...pointerEvents(),\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ])\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n });\n const schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option$3('toggling'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted('ignoreFocus', false),\n defaulted('domModification', {}),\n output$1('builder', builder$2),\n defaulted('eventOrder', {})\n ];\n\n const builder$1 = detail => ({\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n });\n const schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n const owner$2 = constant$1('item-widget');\n const parts$h = constant$1([required({\n name: 'widget',\n overrides: detail => {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: _component => {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n const builder = detail => {\n const subs = substitutes(owner$2(), detail, parts$h());\n const components = components$1(owner$2(), detail, subs.internals());\n const focusWidget = component => getPart(component, detail, 'widget').map(widget => {\n Keying.focusIn(widget);\n return widget;\n });\n const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n })();\n return {\n dom: detail.dom,\n components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1((component, simulatedEvent) => {\n focusWidget(component).each(_widget => {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(focusItem(), (component, _simulatedEvent) => {\n if (detail.autofocus) {\n focusWidget(component);\n } else {\n Focusing.focus(component);\n }\n })\n ]),\n behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? component => {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: (component, simulatedEvent) => {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Optional.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }\n })\n ])\n };\n };\n const schema$n = [\n required$1('uid'),\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('autofocus', false),\n defaulted('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted('domModification', {}),\n defaultUidsSchema(parts$h()),\n output$1('builder', builder)\n ];\n\n const itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\n });\n const configureGrid = (detail, movementInfo) => ({\n mode: 'flatgrid',\n selector: '.' + detail.markers.item,\n initSize: {\n numColumns: movementInfo.initSize.numColumns,\n numRows: movementInfo.initSize.numRows\n },\n focusManager: detail.focusManager\n });\n const configureMatrix = (detail, movementInfo) => ({\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n focusManager: detail.focusManager\n });\n const configureMenu = (detail, movementInfo) => ({\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n });\n const parts$g = constant$1([group({\n factory: {\n sketch: spec => {\n const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: (detail, u) => {\n return has$2(u, 'uid') ? u : {\n ...u,\n uid: generate$5('item')\n };\n },\n overrides: (detail, u) => {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n const schema$m = constant$1([\n required$1('value'),\n required$1('items'),\n required$1('dom'),\n required$1('components'),\n defaulted('eventOrder', {}),\n field('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output$1('config', configureGrid)\n ],\n matrix: [\n output$1('config', configureMatrix),\n required$1('rowSelector')\n ],\n menu: [\n defaulted('moveOnTab', true),\n output$1('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted('fakeFocus', false),\n defaulted('focusManager', dom$2()),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ]);\n\n const focus = constant$1('alloy.menu-focus');\n\n const deselectOtherRadioItems = (menu, item) => {\n const checkedRadioItems = descendants(menu.element, '[role=\"menuitemradio\"][aria-checked=\"true\"]');\n each$1(checkedRadioItems, ele => {\n if (!eq(ele, item.element)) {\n menu.getSystem().getByDom(ele).each(c => {\n Toggling.off(c);\n });\n }\n });\n };\n const make$7 = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight,\n onDehighlight: detail.onDehighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Optional.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive$2([\n run$1(focus$1(), (menu, simulatedEvent) => {\n const event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(item => {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus(), {\n menu,\n item\n });\n });\n }),\n run$1(hover(), (menu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n }),\n run$1(toggled(), (menu, simulatedEvent) => {\n const {item, state} = simulatedEvent.event;\n if (state && get$f(item.element, 'role') === 'menuitemradio') {\n deselectOtherRadioItems(menu, item);\n }\n })\n ]),\n components,\n eventOrder: detail.eventOrder,\n domModification: { attributes: { role: 'menu' } }\n });\n\n const Menu = composite({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n const transpose$1 = obj => tupleMap(obj, (v, k) => ({\n k: v,\n v: k\n }));\n const trace = (items, byItem, byMenu, finish) => get$g(byMenu, finish).bind(triggerItem => get$g(items, triggerItem).bind(triggerMenu => {\n const rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n })).getOr([]);\n const generate$2 = (menus, expansions) => {\n const items = {};\n each(menus, (menuItems, menu) => {\n each$1(menuItems, item => {\n items[item] = menu;\n });\n });\n const byItem = expansions;\n const byMenu = transpose$1(expansions);\n const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n return map$1(items, menu => get$g(menuPaths, menu).getOr([menu]));\n };\n\n const init$c = () => {\n const expansions = Cell({});\n const menus = Cell({});\n const paths = Cell({});\n const primary = value$2();\n const directory = Cell({});\n const clear = () => {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\n };\n const isClear = () => primary.get().isNone();\n const setMenuBuilt = (menuName, built) => {\n menus.set({\n ...menus.get(),\n [menuName]: {\n type: 'prepared',\n menu: built\n }\n });\n };\n const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n primary.set(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n const sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n const getTriggeringItem = menuValue => find$4(expansions.get(), (v, _k) => v === menuValue);\n const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind(menu => getTriggeringItem(menuValue).bind(triggeringItemValue => getItemByValue(triggeringItemValue).map(triggeredItem => ({\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n }))));\n const getTriggeringPath = (itemValue, getItemByValue) => {\n const extraPath = filter$2(lookupItem(itemValue).toArray(), menuValue => getPreparedMenu(menuValue).isSome());\n return get$g(paths.get(), itemValue).bind(path => {\n const revPath = reverse(extraPath.concat(path));\n const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], data => [Optional.some(data)]));\n return sequence(triggers);\n });\n };\n const expand = itemValue => get$g(expansions.get(), itemValue).map(menu => {\n const current = get$g(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n const collapse = itemValue => get$g(paths.get(), itemValue).bind(path => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none());\n const refresh = itemValue => get$g(paths.get(), itemValue);\n const getPreparedMenu = menuValue => lookupMenu(menuValue).bind(extractPreparedMenu);\n const lookupMenu = menuValue => get$g(menus.get(), menuValue);\n const lookupItem = itemValue => get$g(expansions.get(), itemValue);\n const otherMenus = path => {\n const menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n const getPrimary = () => primary.get().bind(getPreparedMenu);\n const getMenus = () => menus.get();\n return {\n setMenuBuilt,\n setContents,\n expand,\n refresh,\n collapse,\n lookupMenu,\n lookupItem,\n otherMenus,\n getPrimary,\n getMenus,\n clear,\n isClear,\n getTriggeringPath\n };\n };\n const extractPreparedMenu = prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n const LayeredState = {\n init: init$c,\n extractPreparedMenu\n };\n\n const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight');\n const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight');\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightMenuAndItem'] = 0] = 'HighlightMenuAndItem';\n HighlightOnOpen[HighlightOnOpen['HighlightJustMenu'] = 1] = 'HighlightJustMenu';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 2] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n\n const make$6 = (detail, _rawUiSpec) => {\n const submenuParentItems = value$2();\n const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => {\n const makeSketch = () => Menu.sketch({\n ...spec,\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: (menuComp, itemComp) => {\n const highlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemHighlightedEvent, highlightData);\n },\n onDehighlight: (menuComp, itemComp) => {\n const dehighlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData);\n },\n focusManager: detail.fakeFocus ? highlights() : dom$2()\n });\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n const layeredState = LayeredState.init();\n const setup = container => {\n const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n const directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n const getItemValue = item => Representing.getValue(item).value;\n const getItemByValue = (_container, menus, itemValue) => findMap(menus, menu => {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n const candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, c => getItemValue(c) === itemValue);\n });\n const toDirectory = _container => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, item => item.type === 'separator' ? [] : [item.data.value]));\n const setActiveMenu = Highlighting.highlight;\n const setActiveMenuAndItem = (container, menu) => {\n setActiveMenu(container, menu);\n Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each(item => {\n if (detail.fakeFocus) {\n Highlighting.highlight(menu, item);\n } else {\n dispatch(container, item.element, focusItem());\n }\n });\n };\n const getMenus = (state, menuValues) => cat(map$2(menuValues, mv => state.lookupMenu(mv).bind(prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none())));\n const closeOthers = (container, state, path) => {\n const others = getMenus(state, state.otherMenus(path));\n each$1(others, o => {\n remove$1(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n const getSubmenuParents = container => submenuParentItems.get().getOrThunk(() => {\n const r = {};\n const items = descendants(container.element, `.${ detail.markers.item }`);\n const parentItems = filter$2(items, i => get$f(i, 'aria-haspopup') === 'true');\n each$1(parentItems, i => {\n container.getSystem().getByDom(i).each(itemComp => {\n const key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(r);\n return r;\n });\n const updateAriaExpansions = (container, path) => {\n const parentItems = getSubmenuParents(container);\n each(parentItems, (v, k) => {\n const expanded = contains$2(path, k);\n set$9(v.element, 'aria-expanded', expanded);\n });\n };\n const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind(latestMenuName => state.lookupMenu(latestMenuName).bind(menuPrep => {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n const activeMenu = menuPrep.menu;\n const rest = getMenus(state, path.slice(1));\n each$1(rest, r => {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$1(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenuAndItem(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n }));\n let ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n const buildIfRequired = (container, menuName, menuPrep) => {\n if (menuPrep.type === 'notbuilt') {\n const menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n const value = getItemValue(item);\n return layeredState.expand(value).bind(path => {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(menuName => layeredState.lookupMenu(menuName).bind(activeMenuPrep => {\n const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Optional.some(item);\n }\n }));\n });\n }\n };\n const collapseLeft = (container, item) => {\n const value = getItemValue(item);\n return layeredState.collapse(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(activeMenu => {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n const updateView = (container, item) => {\n const value = getItemValue(item);\n return layeredState.refresh(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n const onLeft = (container, item) => inside(item.element) ? Optional.none() : collapseLeft(container, item);\n const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container));\n const keyOnItem = f => (container, simulatedEvent) => {\n return closest$1(simulatedEvent.getSource(), `.${ detail.markers.item }`).bind(target => container.getSystem().getByDom(target).toOptional().bind(item => f(container, item).map(always)));\n };\n const events = derive$2([\n run$1(focus(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(() => {\n const menu = simulatedEvent.event.menu;\n Highlighting.highlight(tmenu, menu);\n const value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(path => closeOthers(tmenu, layeredState, path));\n });\n }),\n runOnExecute$1((component, simulatedEvent) => {\n const target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(item => {\n const itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached((container, _simulatedEvent) => {\n setup(container).each(primary => {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) {\n setActiveMenuAndItem(container, primary);\n } else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) {\n setActiveMenu(container, primary);\n }\n });\n }),\n run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => {\n detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => {\n detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n ...detail.navigateOnHover ? [run$1(hover(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n updateView(tmenu, item);\n expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(tmenu, item);\n })] : []\n ]);\n const getActiveItem = container => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n const collapseMenuApi = container => {\n getActiveItem(container).each(currentItem => {\n collapseLeft(container, currentItem);\n });\n };\n const highlightPrimary = container => {\n layeredState.getPrimary().each(primary => {\n setActiveMenuAndItem(container, primary);\n });\n };\n const extractMenuFromContainer = container => Optional.from(container.components()[0]).filter(comp => get$f(comp.element, 'role') === 'menu');\n const repositionMenus = container => {\n const maybeActivePrimary = layeredState.getPrimary().bind(primary => getActiveItem(container).bind(currentItem => {\n const itemValue = getItemValue(currentItem);\n const allMenus = values(layeredState.getMenus());\n const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, v => getItemByValue(container, preparedMenus, v));\n }).map(triggeringPath => ({\n primary,\n triggeringPath\n })));\n maybeActivePrimary.fold(() => {\n extractMenuFromContainer(container).each(primaryMenu => {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, ({primary, triggeringPath}) => {\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n const apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary,\n repositionMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.tmenuBehaviours, [\n Keying.config({\n mode: 'special',\n onRight: keyOnItem(onRight),\n onLeft: keyOnItem(onLeft),\n onEscape: keyOnItem(onEscape),\n focusIn: (container, _keyInfo) => {\n layeredState.getPrimary().each(primary => {\n dispatch(container, primary.element, focusItem());\n });\n }\n }),\n Highlighting.config({\n highlightClass: detail.markers.selectedMenu,\n itemClass: detail.markers.menu\n }),\n Composing.config({\n find: container => {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis,\n events\n };\n };\n const collapseItem$1 = constant$1('collapse-item');\n\n const tieredData = (primary, menus, expansions) => ({\n primary,\n menus,\n expansions\n });\n const singleData = (name, menu) => ({\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n });\n const collapseItem = text => ({\n value: generate$6(collapseItem$1()),\n meta: { text }\n });\n const tieredMenu = single({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlightItem'),\n onHandler('onDehighlightItem'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n required$1('dom'),\n defaulted('navigateOnHover', true),\n defaulted('stayInDom', false),\n field('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted('eventOrder', {})\n ],\n apis: {\n collapseMenu: (apis, tmenu) => {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: (apis, tmenu) => {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: (apis, tmenu) => {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$6,\n extraApis: {\n tieredData,\n singleData,\n collapseItem\n }\n });\n\n const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => {\n const lazySink = () => detail.lazySink(menuSandbox);\n const layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: () => belowOrAbove(),\n onRtl: () => belowOrAboveRtl()\n }\n } : {};\n const isFirstTierSubmenu = triggeringPaths => triggeringPaths.length === 2;\n const getSubmenuLayouts = triggeringPaths => isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightOnOpen: menuSpec.menu.highlightOnOpen,\n fakeFocus: menuSpec.menu.fakeFocus,\n onEscape: () => {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(handler => handler(menuSandbox));\n return Optional.some(true);\n },\n onExecute: () => {\n return Optional.some(true);\n },\n onOpenMenu: (tmenu, menu) => {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => {\n const sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item,\n ...getSubmenuLayouts(triggeringPaths)\n }\n });\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, st => {\n const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem,\n ...submenuLayouts\n }\n });\n });\n }\n });\n };\n const factory$m = (detail, spec) => {\n const isPartOfRelated = (sandbox, queryElem) => {\n const related = detail.getRelated(sandbox);\n return related.exists(rel => isPartOf$1(rel, queryElem));\n };\n const setContent = (sandbox, thing) => {\n Sandboxing.setContent(sandbox, thing);\n };\n const showAt = (sandbox, thing, placementSpec) => {\n showWithin(sandbox, thing, placementSpec, Optional.none());\n };\n const showWithin = (sandbox, thing, placementSpec, boxElement) => {\n showWithinBounds(sandbox, thing, placementSpec, () => boxElement.map(elem => box$1(elem)));\n };\n const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => {\n const sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds()));\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds\n }));\n };\n const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => {\n const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu\n }));\n };\n const hide = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n const getContent = sandbox => Sandboxing.getState(sandbox);\n const reposition = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(state => {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n const sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n break;\n }\n });\n }\n };\n const apis = {\n setContent,\n showAt,\n showWithin,\n showWithinBounds,\n showMenuAt,\n showMenuWithinBounds,\n hide,\n getContent,\n reposition,\n isOpen: Sandboxing.isOpen\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.inlineBehaviours, [\n Sandboxing.config({\n isPartOf: (sandbox, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: sandbox => {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: sandbox => {\n detail.onShow(sandbox);\n },\n onClose: sandbox => {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Optional.none()\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: spec.isExtraPart,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n ...detail.fireRepositionEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n doReposition: reposition\n })\n }\n })\n ]),\n eventOrder: detail.eventOrder,\n apis\n };\n };\n const InlineView = single({\n name: 'InlineView',\n configFields: [\n required$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n defaulted('getRelated', Optional.none),\n defaulted('isExtraPart', never),\n defaulted('eventOrder', Optional.none)\n ],\n factory: factory$m,\n apis: {\n showAt: (apis, component, anchor, thing) => {\n apis.showAt(component, anchor, thing);\n },\n showWithin: (apis, component, anchor, thing, boxElement) => {\n apis.showWithin(component, anchor, thing, boxElement);\n },\n showWithinBounds: (apis, component, anchor, thing, bounds) => {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: (apis, component, anchor, menuSpec) => {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: (apis, component) => {\n apis.hide(component);\n },\n isOpen: (apis, component) => apis.isOpen(component),\n getContent: (apis, component) => apis.getContent(component),\n setContent: (apis, component, thing) => {\n apis.setContent(component, thing);\n },\n reposition: (apis, component) => {\n apis.reposition(component);\n }\n }\n });\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const factory$l = detail => {\n const events = events$a(detail.action);\n const tag = detail.dom.tag;\n const lookupAttr = attr => get$g(detail.dom, 'attributes').bind(attrs => get$g(attrs, attr));\n const getModAttributes = () => {\n if (tag === 'button') {\n const type = lookupAttr('type').getOr('button');\n const roleAttrs = lookupAttr('role').map(role => ({ role })).getOr({});\n return {\n type,\n ...roleAttrs\n };\n } else {\n const role = lookupAttr('role').getOr('button');\n return { role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events,\n behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n })\n ]),\n domModification: { attributes: getModAttributes() },\n eventOrder: detail.eventOrder\n };\n };\n const Button = single({\n name: 'Button',\n factory: factory$l,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option$3('action'),\n option$3('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n const record = spec => {\n const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n const get = anyInSystem => anyInSystem.getSystem().getByUid(uid).getOrDie();\n const getOpt = anyInSystem => anyInSystem.getSystem().getByUid(uid).toOptional();\n const asSpec = () => ({\n ...spec,\n uid\n });\n return {\n get,\n getOpt,\n asSpec\n };\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n const rtlTransform = {\n 'indent': true,\n 'outdent': true,\n 'table-insert-column-after': true,\n 'table-insert-column-before': true,\n 'paste-column-after': true,\n 'paste-column-before': true,\n 'unordered-list': true,\n 'list-bull-circle': true,\n 'list-bull-default': true,\n 'list-bull-square': true\n };\n const defaultIconName = 'temporary-placeholder';\n const defaultIcon = icons => () => get$g(icons, defaultIconName).getOr('!not found!');\n const getIconName = (name, icons) => {\n const lcName = name.toLowerCase();\n if (global$8.isRtl()) {\n const rtlName = ensureTrailing(lcName, '-rtl');\n return has$2(icons, rtlName) ? rtlName : lcName;\n } else {\n return lcName;\n }\n };\n const lookupIcon = (name, icons) => get$g(icons, getIconName(name, icons));\n const get$2 = (name, iconProvider) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n };\n const getOr = (name, iconProvider, fallbackIcon) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n };\n const needsRtlTransform = iconName => global$8.isRtl() ? has$2(rtlTransform, iconName) : false;\n const addFocusableBehaviour = () => config('add-focusable', [runOnAttached(comp => {\n child(comp.element, 'svg').each(svg => set$9(svg, 'focusable', 'false'));\n })]);\n const renderIcon$2 = (spec, iconName, icons, fallbackIcon) => {\n var _a, _b;\n const rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n const iconHtml = get$g(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n return {\n dom: {\n tag: spec.tag,\n attributes: (_a = spec.attributes) !== null && _a !== void 0 ? _a : {},\n classes: spec.classes.concat(rtlIconClasses),\n innerHtml: iconHtml\n },\n behaviours: derive$1([\n ...(_b = spec.behaviours) !== null && _b !== void 0 ? _b : [],\n addFocusableBehaviour()\n ])\n };\n };\n const render$3 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$2(spec, iconName, iconProvider(), fallbackIcon);\n const renderFirst = (iconNames, spec, iconProvider) => {\n const icons = iconProvider();\n const iconName = find$5(iconNames, name => has$2(icons, getIconName(name, icons)));\n return renderIcon$2(spec, iconName.getOr(defaultIconName), icons, Optional.none());\n };\n\n const notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n const factory$k = detail => {\n const memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n const renderPercentBar = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n styles: { width: `${ percent }%` }\n }\n });\n const renderPercentText = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: `${ percent }%`\n }\n });\n const memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n const updateProgress = (comp, percent) => {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(progress => {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n const updateText = (comp, text) => {\n if (comp.getSystem().isConnected()) {\n const banner = memBannerText.get(comp);\n Replacing.set(banner, [text$1(text)]);\n }\n };\n const apis = {\n updateProgress,\n updateText\n };\n const iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(level => Optional.from(notificationIconMap[level])).toArray()\n ]);\n const memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ]\n },\n components: [render$3('close', {\n tag: 'div',\n classes: ['tox-icon'],\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }, detail.iconProvider)],\n action: comp => {\n detail.onAction(comp);\n }\n }));\n const notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n const notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n const components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(level => [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ level }`\n ]).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n behaviours: derive$1([\n Focusing.config({}),\n config('notification-events', [run$1(focusin(), comp => {\n memButton.getOpt(comp).each(Focusing.focus);\n })])\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [memButton.asSpec()]),\n apis\n };\n };\n const Notification = single({\n name: 'Notification',\n factory: factory$k,\n configFields: [\n option$3('level'),\n required$1('progress'),\n option$3('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: (apis, comp, percent) => {\n apis.updateProgress(comp, percent);\n },\n updateText: (apis, comp, text) => {\n apis.updateText(comp, text);\n }\n }\n });\n\n var NotificationManagerImpl = (editor, extras, uiMothership) => {\n const sharedBackstage = extras.backstage.shared;\n const getBounds = () => {\n const contentArea = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const win$1 = win();\n const x = clamp(win$1.x, contentArea.x, contentArea.right);\n const y = clamp(win$1.y, contentArea.y, contentArea.bottom);\n const right = Math.max(contentArea.right, win$1.right);\n const bottom = Math.max(contentArea.bottom, win$1.bottom);\n return Optional.some(bounds(x, y, right - x, bottom - y));\n };\n const open = (settings, closeCallback) => {\n const close = () => {\n closeCallback();\n InlineView.hide(notificationWrapper);\n };\n const notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains$2([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: settings.icon,\n closeButton: settings.closeButton,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n translationProvider: sharedBackstage.providers.translate\n }));\n const notificationWrapper = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container']\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {},\n ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} }\n }));\n uiMothership.add(notificationWrapper);\n if (isNumber(settings.timeout) && settings.timeout > 0) {\n global$9.setEditorTimeout(editor, () => {\n close();\n }, settings.timeout);\n }\n const reposition = () => {\n const notificationSpec = premade(notification);\n const anchorOverrides = { maxHeightFunction: expandable$1() };\n const allNotifications = editor.notificationManager.getNotifications();\n if (allNotifications[0] === thisNotification) {\n const anchor = {\n ...sharedBackstage.anchors.banner(),\n overrides: anchorOverrides\n };\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds);\n } else {\n indexOf(allNotifications, thisNotification).each(idx => {\n const previousNotification = allNotifications[idx - 1].getEl();\n const nodeAnchor = {\n type: 'node',\n root: body(),\n node: Optional.some(SugarElement.fromDom(previousNotification)),\n overrides: anchorOverrides,\n layouts: {\n onRtl: () => [south$2],\n onLtr: () => [south$2]\n }\n };\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: nodeAnchor }, getBounds);\n });\n }\n };\n const thisNotification = {\n close,\n reposition,\n text: nuText => {\n Notification.updateText(notification, nuText);\n },\n settings,\n getEl: () => notification.element.dom,\n progressBar: {\n value: percent => {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n return thisNotification;\n };\n const close = notification => {\n notification.close();\n };\n const getArgs = notification => {\n return notification.settings;\n };\n return {\n open,\n close,\n getArgs\n };\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var ToolbarMode$1;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode$1 || (ToolbarMode$1 = {})));\n var ToolbarLocation$1;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation$1 || (ToolbarLocation$1 = {})));\n const option$2 = name => editor => editor.options.get(name);\n const wrapOptional = fn => editor => Optional.from(fn(editor));\n const register$e = editor => {\n const isPhone = global$5.deviceType.isPhone();\n const isMobile = global$5.deviceType.isTablet() || isPhone;\n const registerOption = editor.options.register;\n const stringOrFalseProcessor = value => isString(value) || value === false;\n const stringOrNumberProcessor = value => isString(value) || isNumber(value);\n registerOption('skin', {\n processor: value => isString(value) || value === false,\n default: 'oxide'\n });\n registerOption('skin_url', { processor: 'string' });\n registerOption('height', {\n processor: stringOrNumberProcessor,\n default: Math.max(editor.getElement().offsetHeight, 400)\n });\n registerOption('width', {\n processor: stringOrNumberProcessor,\n default: global$7.DOM.getStyle(editor.getElement(), 'width')\n });\n registerOption('min_height', {\n processor: 'number',\n default: 100\n });\n registerOption('min_width', { processor: 'number' });\n registerOption('max_height', { processor: 'number' });\n registerOption('max_width', { processor: 'number' });\n registerOption('style_formats', { processor: 'object[]' });\n registerOption('style_formats_merge', {\n processor: 'boolean',\n default: false\n });\n registerOption('style_formats_autohide', {\n processor: 'boolean',\n default: false\n });\n registerOption('line_height_formats', {\n processor: 'string',\n default: '1 1.1 1.2 1.3 1.4 1.5 2'\n });\n registerOption('font_family_formats', {\n processor: 'string',\n default: 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'\n });\n registerOption('font_size_formats', {\n processor: 'string',\n default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt'\n });\n registerOption('block_formats', {\n processor: 'string',\n default: 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'\n });\n registerOption('content_langs', { processor: 'object[]' });\n registerOption('removed_menuitems', {\n processor: 'string',\n default: ''\n });\n registerOption('menubar', {\n processor: value => isString(value) || isBoolean(value),\n default: !isPhone\n });\n registerOption('menu', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar', {\n processor: value => {\n if (isBoolean(value) || isString(value) || isArray(value)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a boolean, string or array.'\n };\n }\n },\n default: true\n });\n range$2(9, num => {\n registerOption('toolbar' + (num + 1), { processor: 'string' });\n });\n registerOption('toolbar_mode', {\n processor: 'string',\n default: isMobile ? 'scrolling' : 'floating'\n });\n registerOption('toolbar_groups', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar_location', {\n processor: 'string',\n default: ToolbarLocation$1.auto\n });\n registerOption('toolbar_persist', {\n processor: 'boolean',\n default: false\n });\n registerOption('toolbar_sticky', {\n processor: 'boolean',\n default: editor.inline\n });\n registerOption('toolbar_sticky_offset', {\n processor: 'number',\n default: 0\n });\n registerOption('fixed_toolbar_container', {\n processor: 'string',\n default: ''\n });\n registerOption('fixed_toolbar_container_target', { processor: 'object' });\n registerOption('file_picker_callback', { processor: 'function' });\n registerOption('file_picker_validator_handler', { processor: 'function' });\n registerOption('file_picker_types', { processor: 'string' });\n registerOption('typeahead_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('anchor_top', {\n processor: stringOrFalseProcessor,\n default: '#top'\n });\n registerOption('anchor_bottom', {\n processor: stringOrFalseProcessor,\n default: '#bottom'\n });\n registerOption('draggable_modal', {\n processor: 'boolean',\n default: false\n });\n registerOption('statusbar', {\n processor: 'boolean',\n default: true\n });\n registerOption('elementpath', {\n processor: 'boolean',\n default: true\n });\n registerOption('branding', {\n processor: 'boolean',\n default: true\n });\n registerOption('promotion', {\n processor: 'boolean',\n default: true\n });\n registerOption('resize', {\n processor: value => value === 'both' || isBoolean(value),\n default: !global$5.deviceType.isTouch()\n });\n registerOption('sidebar_show', { processor: 'string' });\n };\n const isReadOnly = option$2('readonly');\n const getHeightOption = option$2('height');\n const getWidthOption = option$2('width');\n const getMinWidthOption = wrapOptional(option$2('min_width'));\n const getMinHeightOption = wrapOptional(option$2('min_height'));\n const getMaxWidthOption = wrapOptional(option$2('max_width'));\n const getMaxHeightOption = wrapOptional(option$2('max_height'));\n const getUserStyleFormats = wrapOptional(option$2('style_formats'));\n const shouldMergeStyleFormats = option$2('style_formats_merge');\n const shouldAutoHideStyleFormats = option$2('style_formats_autohide');\n const getContentLanguages = option$2('content_langs');\n const getRemovedMenuItems = option$2('removed_menuitems');\n const getToolbarMode = option$2('toolbar_mode');\n const getToolbarGroups = option$2('toolbar_groups');\n const getToolbarLocation = option$2('toolbar_location');\n const fixedContainerSelector = option$2('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target');\n const isToolbarPersist = option$2('toolbar_persist');\n const getStickyToolbarOffset = option$2('toolbar_sticky_offset');\n const getMenubar = option$2('menubar');\n const getToolbar = option$2('toolbar');\n const getFilePickerCallback = option$2('file_picker_callback');\n const getFilePickerValidatorHandler = option$2('file_picker_validator_handler');\n const getFilePickerTypes = option$2('file_picker_types');\n const useTypeaheadUrls = option$2('typeahead_urls');\n const getAnchorTop = option$2('anchor_top');\n const getAnchorBottom = option$2('anchor_bottom');\n const isDraggableModal$1 = option$2('draggable_modal');\n const useStatusBar = option$2('statusbar');\n const useElementPath = option$2('elementpath');\n const useBranding = option$2('branding');\n const getResize = option$2('resize');\n const getPasteAsText = option$2('paste_as_text');\n const getSidebarShow = option$2('sidebar_show');\n const promotionEnabled = option$2('promotion');\n const isSkinDisabled = editor => editor.options.get('skin') === false;\n const isMenubarEnabled = editor => editor.options.get('menubar') !== false;\n const getSkinUrl = editor => {\n const skinUrl = editor.options.get('skin_url');\n if (isSkinDisabled(editor)) {\n return skinUrl;\n } else {\n if (skinUrl) {\n return editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n const skin = editor.options.get('skin');\n return global$6.baseURL + '/skins/ui/' + skin;\n }\n }\n };\n const getLineHeightFormats = editor => editor.options.get('line_height_formats').split(' ');\n const isToolbarEnabled = editor => {\n const toolbar = getToolbar(editor);\n const isToolbarString = isString(toolbar);\n const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n };\n const getMultipleToolbarsOption = editor => {\n const toolbars = range$2(9, num => editor.options.get('toolbar' + (num + 1)));\n const toolbarArray = filter$2(toolbars, isString);\n return someIf(toolbarArray.length > 0, toolbarArray);\n };\n const isMultipleToolbars = editor => getMultipleToolbarsOption(editor).fold(() => {\n const toolbar = getToolbar(editor);\n return isArrayOf(toolbar, isString) && toolbar.length > 0;\n }, always);\n const isToolbarLocationBottom = editor => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiContainer = editor => {\n const fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n };\n const isDistractionFree = editor => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n const isStickyToolbar = editor => {\n const isStickyToolbar = editor.options.get('toolbar_sticky');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n const getMenus = editor => {\n const menu = editor.options.get('menu');\n return map$1(menu, menu => ({\n ...menu,\n items: menu.items\n }));\n };\n\n var Options = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ToolbarMode () { return ToolbarMode$1; },\n get ToolbarLocation () { return ToolbarLocation$1; },\n register: register$e,\n getSkinUrl: getSkinUrl,\n isReadOnly: isReadOnly,\n isSkinDisabled: isSkinDisabled,\n getHeightOption: getHeightOption,\n getWidthOption: getWidthOption,\n getMinWidthOption: getMinWidthOption,\n getMinHeightOption: getMinHeightOption,\n getMaxWidthOption: getMaxWidthOption,\n getMaxHeightOption: getMaxHeightOption,\n getUserStyleFormats: getUserStyleFormats,\n shouldMergeStyleFormats: shouldMergeStyleFormats,\n shouldAutoHideStyleFormats: shouldAutoHideStyleFormats,\n getLineHeightFormats: getLineHeightFormats,\n getContentLanguages: getContentLanguages,\n getRemovedMenuItems: getRemovedMenuItems,\n isMenubarEnabled: isMenubarEnabled,\n isMultipleToolbars: isMultipleToolbars,\n isToolbarEnabled: isToolbarEnabled,\n isToolbarPersist: isToolbarPersist,\n getMultipleToolbarsOption: getMultipleToolbarsOption,\n getUiContainer: getUiContainer,\n useFixedContainer: useFixedContainer,\n getToolbarMode: getToolbarMode,\n isDraggableModal: isDraggableModal$1,\n isDistractionFree: isDistractionFree,\n isStickyToolbar: isStickyToolbar,\n getStickyToolbarOffset: getStickyToolbarOffset,\n getToolbarLocation: getToolbarLocation,\n isToolbarLocationBottom: isToolbarLocationBottom,\n getToolbarGroups: getToolbarGroups,\n getMenus: getMenus,\n getMenubar: getMenubar,\n getToolbar: getToolbar,\n getFilePickerCallback: getFilePickerCallback,\n getFilePickerTypes: getFilePickerTypes,\n useTypeaheadUrls: useTypeaheadUrls,\n getAnchorTop: getAnchorTop,\n getAnchorBottom: getAnchorBottom,\n getFilePickerValidatorHandler: getFilePickerValidatorHandler,\n useStatusBar: useStatusBar,\n useElementPath: useElementPath,\n promotionEnabled: promotionEnabled,\n useBranding: useBranding,\n getResize: getResize,\n getPasteAsText: getPasteAsText,\n getSidebarShow: getSidebarShow\n });\n\n const autocompleteSelector = '[data-mce-autocompleter]';\n const detect = elm => closest$1(elm, autocompleteSelector);\n const findIn = elm => descendant(elm, autocompleteSelector);\n\n const setup$e = (api, editor) => {\n const redirectKeyToItem = (item, e) => {\n emitWith(item, keydown(), { raw: e });\n };\n const getItem = () => api.getMenu().bind(Highlighting.getHighlighted);\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (!api.isActive()) {\n return;\n }\n if (api.isMenuOpen()) {\n if (keyCode === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (keyCode === 40) {\n getItem().fold(() => {\n api.getMenu().each(Highlighting.highlightFirst);\n }, item => {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n getItem().each(item => {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n api.cancelIfNecessary();\n }\n }\n });\n editor.on('NodeChange', e => {\n if (api.isActive() && !api.isProcessingAction() && detect(SugarElement.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n const AutocompleterEditorEvents = { setup: setup$e };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n const navClass = 'tox-menu-nav__js';\n const selectableClass = 'tox-collection__item';\n const colorClass = 'tox-swatch';\n const presetClasses = {\n normal: navClass,\n color: colorClass\n };\n const tickedClass = 'tox-collection__item--enabled';\n const groupHeadingClass = 'tox-collection__group-heading';\n const iconClass = 'tox-collection__item-icon';\n const textClass = 'tox-collection__item-label';\n const accessoryClass = 'tox-collection__item-accessory';\n const caretClass = 'tox-collection__item-caret';\n const checkmarkClass = 'tox-collection__item-checkmark';\n const activeClass = 'tox-collection__item--active';\n const containerClass = 'tox-collection__item-container';\n const containerColumnClass = 'tox-collection__item-container--column';\n const containerRowClass = 'tox-collection__item-container--row';\n const containerAlignRightClass = 'tox-collection__item-container--align-right';\n const containerAlignLeftClass = 'tox-collection__item-container--align-left';\n const containerValignTopClass = 'tox-collection__item-container--valign-top';\n const containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n const containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n const classForPreset = presets => get$g(presetClasses, presets).getOr(navClass);\n\n const forMenu = presets => {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n const classes = presets => ({\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n });\n\n const markers = presets => {\n const menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n const dom$1 = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n `tox-menu-${ columns }-column`\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n const components = [Menu.parts.items({})];\n const part = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n const d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers(presets)\n };\n };\n\n const schema$l = constant$1([\n option$3('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n const focusBehaviours = detail => derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : component => {\n const input = component.element;\n const value = get$6(input);\n input.dom.setSelectionRange(0, value.length);\n }\n })]);\n const behaviours = detail => ({\n ...focusBehaviours(detail),\n ...augment(detail.inputBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n ...detail.data.map(data => ({ initialValue: data })).getOr({}),\n getValue: input => {\n return get$6(input.element);\n },\n setValue: (input, data) => {\n const current = get$6(input.element);\n if (current !== data) {\n set$5(input.element, data);\n }\n }\n },\n onSetValue: detail.onSetValue\n })])\n });\n const dom = detail => ({\n tag: detail.tag,\n attributes: {\n type: 'text',\n ...detail.inputAttributes\n },\n styles: detail.inputStyles,\n classes: detail.inputClasses\n });\n\n const factory$j = (detail, _spec) => ({\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n });\n const Input = single({\n name: 'Input',\n configFields: schema$l(),\n factory: factory$j\n });\n\n const refetchTriggerEvent = generate$6('refetch-trigger-event');\n const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction');\n\n const menuSearcherClass = 'tox-menu__searcher';\n const findWithinSandbox = sandboxComp => {\n return descendant(sandboxComp.element, `.${ menuSearcherClass }`).bind(inputElem => sandboxComp.getSystem().getByDom(inputElem).toOptional());\n };\n const findWithinMenu = findWithinSandbox;\n const restoreState = (inputComp, searcherState) => {\n Representing.setValue(inputComp, searcherState.fetchPattern);\n inputComp.element.dom.selectionStart = searcherState.selectionStart;\n inputComp.element.dom.selectionEnd = searcherState.selectionEnd;\n };\n const saveState = inputComp => {\n const fetchPattern = Representing.getValue(inputComp);\n const selectionStart = inputComp.element.dom.selectionStart;\n const selectionEnd = inputComp.element.dom.selectionEnd;\n return {\n fetchPattern,\n selectionStart,\n selectionEnd\n };\n };\n const setActiveDescendant = (inputComp, active) => {\n getOpt(active.element, 'id').each(id => set$9(inputComp.element, 'aria-activedescendant', id));\n };\n const renderMenuSearcher = spec => {\n const handleByBrowser = (comp, se) => {\n se.cut();\n return Optional.none();\n };\n const handleByHighlightedItem = (comp, se) => {\n const eventData = {\n interactionEvent: se.event,\n eventType: se.event.raw.type\n };\n emitWith(comp, redirectMenuItemInteractionEvent, eventData);\n return Optional.some(true);\n };\n const customSearcherEventsName = 'searcher-events';\n return {\n dom: {\n tag: 'div',\n classes: [selectableClass]\n },\n components: [Input.sketch({\n inputClasses: [\n menuSearcherClass,\n 'tox-textfield'\n ],\n inputAttributes: {\n ...spec.placeholder.map(placeholder => ({ placeholder: spec.i18n(placeholder) })).getOr({}),\n 'type': 'search',\n 'aria-autocomplete': 'list'\n },\n inputBehaviours: derive$1([\n config(customSearcherEventsName, [\n run$1(input(), inputComp => {\n emit(inputComp, refetchTriggerEvent);\n }),\n run$1(keydown(), (inputComp, se) => {\n if (se.event.raw.key === 'Escape') {\n se.stop();\n }\n })\n ]),\n Keying.config({\n mode: 'special',\n onLeft: handleByBrowser,\n onRight: handleByBrowser,\n onSpace: handleByBrowser,\n onEnter: handleByHighlightedItem,\n onEscape: handleByHighlightedItem,\n onUp: handleByHighlightedItem,\n onDown: handleByHighlightedItem\n })\n ]),\n eventOrder: {\n keydown: [\n customSearcherEventsName,\n Keying.name()\n ]\n }\n })]\n };\n };\n\n const searchResultsClass = 'tox-collection--results__js';\n const augmentWithAria = item => {\n var _a;\n if (item.dom) {\n return {\n ...item,\n dom: {\n ...item.dom,\n attributes: {\n ...(_a = item.dom.attributes) !== null && _a !== void 0 ? _a : {},\n 'id': generate$6('aria-item-search-result-id'),\n 'aria-selected': 'false'\n }\n }\n };\n } else {\n return item;\n }\n };\n\n const chunk = (rowDom, numColumns) => items => {\n const chunks = chunk$1(items, numColumns);\n return map$2(chunks, c => ({\n dom: rowDom,\n components: c\n }));\n };\n const forSwatch = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts.items({\n preprocess: columns !== 'auto' ? chunk({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n });\n const forToolbar = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts.items({\n preprocess: chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n });\n const preprocessCollection = (items, isSeparator) => {\n const allSplits = [];\n let currentSplit = [];\n each$1(items, (item, i) => {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map$2(allSplits, s => ({\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n }));\n };\n const insertItemsPlaceholder = (columns, initItems, onItem) => {\n return Menu.parts.items({\n preprocess: rawItems => {\n const enrichedItems = map$2(rawItems, onItem);\n if (columns !== 'auto' && columns > 1) {\n return chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(enrichedItems);\n } else {\n return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator');\n }\n }\n });\n };\n const forCollection = (columns, initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [insertItemsPlaceholder(columns, initItems, identity)]\n });\n const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n searchResultsClass\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']),\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n };\n };\n const forCollectionWithSearchField = (columns, initItems, searchField) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [\n renderMenuSearcher({\n i18n: global$8.translate,\n placeholder: searchField.placeholder\n }),\n {\n dom: {\n tag: 'div',\n classes: [\n ...columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'],\n searchResultsClass\n ],\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n }\n ]\n };\n };\n const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({ preprocess: items => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') })]\n });\n\n const menuHasIcons = xs => exists(xs, item => 'icon' in item && item.icon !== undefined);\n const handleError = error => {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => {\n const structure = forHorizontalCollection(items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n };\n const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => {\n const getNormalStructure = () => {\n if (menuLayout.menuType !== 'searchable') {\n return forCollection(columns, items);\n } else {\n return menuLayout.searchMode.searchMode === 'search-with-field' ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) : forCollectionWithSearchResults(columns, items);\n }\n };\n if (menuLayout.menuType === 'color') {\n const structure = forSwatch(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' && columns === 'auto') {\n const structure = forCollection(columns, items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') {\n const structure = getNormalStructure();\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') {\n const structure = forToolbar(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else {\n return {\n value,\n dom: dom$1(hasIcons, columns, menuLayout.menuType),\n components: components,\n items\n };\n }\n };\n\n const type = requiredString('type');\n const name$1 = requiredString('name');\n const label = requiredString('label');\n const text = requiredString('text');\n const title = requiredString('title');\n const icon = requiredString('icon');\n const value$1 = requiredString('value');\n const fetch$1 = requiredFunction('fetch');\n const getSubmenuItems = requiredFunction('getSubmenuItems');\n const onAction = requiredFunction('onAction');\n const onItemAction = requiredFunction('onItemAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalName = optionString('name');\n const optionalText = optionString('text');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const optionalShortcut = optionString('shortcut');\n const optionalSelect = optionFunction('select');\n const active = defaultedBoolean('active', false);\n const borderless = defaultedBoolean('borderless', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedMeta = defaulted('meta', {});\n const defaultedOnAction = defaultedFunction('onAction', noop);\n const defaultedType = type => defaultedString('type', type);\n const generatedName = namePrefix => field$1('name', 'name', defaultedThunk(() => generate$6(`${ namePrefix }-name`)), string);\n const generatedValue = valuePrefix => field$1('value', 'value', defaultedThunk(() => generate$6(`${ valuePrefix }-value`)), anyValue());\n\n const separatorMenuItemSchema = objOf([\n type,\n optionalText\n ]);\n const createSeparatorMenuItem = spec => asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n\n const autocompleterItemSchema = objOf([\n defaultedType('autocompleteitem'),\n active,\n enabled,\n defaultedMeta,\n value$1,\n optionalText,\n optionalIcon\n ]);\n const createSeparatorItem = spec => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n const createAutocompleterItem = spec => asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup\n ];\n const toolbarButtonSchema = objOf([\n type,\n onAction\n ].concat(baseToolbarButtonFields));\n const createToolbarButton = spec => asRaw('toolbarbutton', toolbarButtonSchema, spec);\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n type,\n onAction\n ]));\n const createToggleButton = spec => asRaw('ToggleButton', toggleButtonSchema, spec);\n\n const contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n const contextFormSchema = objOf([\n defaultedType('contextform'),\n defaultedFunction('initValue', constant$1('')),\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n const createContextForm = spec => asRaw('ContextForm', contextFormSchema, spec);\n\n const contextToolbarSchema = objOf([\n defaultedType('contexttoolbar'),\n requiredString('items')\n ].concat(contextBarFields));\n const createContextToolbar = spec => asRaw('ContextToolbar', contextToolbarSchema, spec);\n\n const cardImageFields = [\n type,\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n const cardImageSchema = objOf(cardImageFields);\n\n const cardTextFields = [\n type,\n text,\n optionalName,\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n const cardTextSchema = objOf(cardTextFields);\n\n const itemSchema$1 = valueThunk(() => choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n }));\n const cardContainerSchema = objOf([\n type,\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n const commonMenuItemFields = [\n enabled,\n optionalText,\n optionalShortcut,\n generatedValue('menuitem'),\n defaultedMeta\n ];\n\n const cardMenuItemSchema = objOf([\n type,\n optionalLabel,\n requiredArrayOf('items', itemSchema$1),\n onSetup,\n defaultedOnAction\n ].concat(commonMenuItemFields));\n const createCardMenuItem = spec => asRaw('cardmenuitem', cardMenuItemSchema, spec);\n\n const choiceMenuItemSchema = objOf([\n type,\n active,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createChoiceMenuItem = spec => asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n\n const baseFields = [\n type,\n requiredString('fancytype'),\n defaultedOnAction\n ];\n const insertTableFields = [defaulted('initData', {})].concat(baseFields);\n const colorSwatchFields = [defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n optionArrayOf('colors', anyValue())\n ])].concat(baseFields);\n const fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n const createFancyMenuItem = spec => asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n\n const menuItemSchema = objOf([\n type,\n onSetup,\n defaultedOnAction,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createMenuItem = spec => asRaw('menuitem', menuItemSchema, spec);\n\n const nestedMenuItemSchema = objOf([\n type,\n getSubmenuItems,\n onSetup,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createNestedMenuItem = spec => asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n\n const toggleMenuItemSchema = objOf([\n type,\n optionalIcon,\n active,\n onSetup,\n onAction\n ].concat(commonMenuItemFields));\n const createToggleMenuItem = spec => asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n\n const detectSize = (comp, margin, selectorClass) => {\n const descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n const columnLength = findIndex$1(descendants$1, c => {\n const thisTop = c.dom.getBoundingClientRect().top;\n const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Optional.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Optional.none();\n }\n };\n\n const namedEvents = (name, handlers) => derive$1([config(name, handlers)]);\n const unnamedEvents = handlers => namedEvents(generate$6('unnamed-events'), handlers);\n const SimpleBehaviours = {\n namedEvents,\n unnamedEvents\n };\n\n const ExclusivityChannel = generate$6('tooltip.exclusive');\n const ShowTooltipEvent = generate$6('tooltip.show');\n const HideTooltipEvent = generate$6('tooltip.hide');\n\n const hideAllExclusive = (component, _tConfig, _tState) => {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n const setComponents = (component, tConfig, tState, specs) => {\n tState.getTooltip().each(tooltip => {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n setComponents: setComponents\n });\n\n const events$9 = (tooltipConfig, state) => {\n const hide = comp => {\n state.getTooltip().each(p => {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n });\n state.clearTimer();\n };\n const show = comp => {\n if (!state.isShowing()) {\n hideAllExclusive(comp);\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n const popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), _ => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), _ => {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n }\n };\n return derive$2(flatten([\n [\n run$1(ShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, tooltipConfig.delay);\n }),\n run$1(HideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, tooltipConfig.delay);\n }),\n run$1(receive(), (comp, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(comp => {\n hide(comp);\n })\n ],\n tooltipConfig.mode === 'normal' ? [\n run$1(focusin(), comp => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(postBlur(), comp => {\n emit(comp, HideTooltipEvent);\n }),\n run$1(mouseover(), comp => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ] : [\n run$1(highlight$1(), (comp, _se) => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ]\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$9\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaulted('delay', 300),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight'\n ]),\n defaulted('anchor', comp => ({\n type: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n }\n })),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n const init$b = () => {\n const timer = value$2();\n const popup = value$2();\n const clearTimer = () => {\n timer.on(clearTimeout);\n };\n const resetTimer = (f, delay) => {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n const readState = constant$1('not-implemented');\n return nu$8({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer,\n resetTimer,\n readState\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n const Tooltipping = create$3({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const ReadOnlyChannel = 'silver.readonly';\n const ReadOnlyDataSchema = objOf([requiredBoolean('readonly')]);\n const broadcastReadonly = (uiComponents, readonly) => {\n const outerContainer = uiComponents.outerContainer;\n const target = outerContainer.element;\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly });\n };\n const setupReadonlyModeSwitch = (editor, uiComponents) => {\n editor.on('init', () => {\n if (editor.mode.isReadOnly()) {\n broadcastReadonly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', () => broadcastReadonly(uiComponents, editor.mode.isReadOnly()));\n if (isReadOnly(editor)) {\n editor.mode.set('readonly');\n }\n };\n const receivingConfig = () => Receiving.config({\n channels: {\n [ReadOnlyChannel]: {\n schema: ReadOnlyDataSchema,\n onReceive: (comp, data) => {\n Disabling.set(comp, data.readonly);\n }\n }\n }\n });\n\n const item = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n const button = disabled => Disabling.config({ disabled });\n const splitButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n const toolbarButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n const DisablingConfigs = {\n item,\n button,\n splitButton,\n toolbarButton\n };\n\n const runWithApi = (info, comp) => {\n const api = info.getApi(comp);\n return f => {\n f(api);\n };\n };\n const onControlAttached = (info, editorOffCell) => runOnAttached(comp => {\n const run = runWithApi(info, comp);\n run(api => {\n const onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n const onControlDetached = (getApi, editorOffCell) => runOnDetached(comp => runWithApi(getApi, comp)(editorOffCell.get()));\n\n const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n if (comp.getSystem().isConnected()) {\n emit(comp, sandboxClose());\n }\n simulatedEvent.stop();\n }\n });\n const menuItemEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\n\n const componentRenderPipeline = cat;\n const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => {\n const editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.isDisabled()),\n receivingConfig(),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n const buildData = source => ({\n value: source.value,\n meta: {\n text: source.text.getOr(''),\n ...source.meta\n }\n });\n\n const convertText = source => {\n const isMac = global$5.os.isMacOS() || global$5.os.isiOS();\n const mac = {\n alt: '\\u2325',\n ctrl: '\\u2303',\n shift: '\\u21E7',\n meta: '\\u2318',\n access: '\\u2303\\u2325'\n };\n const other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n const replace = isMac ? mac : other;\n const shortcut = source.split('+');\n const updated = map$2(shortcut, segment => {\n const search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return isMac ? updated.join('') : updated.join('+');\n };\n\n const renderIcon$1 = (name, icons, classes = [iconClass]) => render$3(name, {\n tag: 'div',\n classes\n }, icons);\n const renderText = text => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text$1(global$8.translate(text))]\n });\n const renderHtml = (html, classes) => ({\n dom: {\n tag: 'div',\n classes,\n innerHtml: html\n }\n });\n const renderStyledText = (style, text) => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text$1(global$8.translate(text))]\n }]\n });\n const renderShortcut = shortcut => ({\n dom: {\n tag: 'div',\n classes: [accessoryClass]\n },\n components: [text$1(convertText(shortcut))]\n });\n const renderCheckmark = icons => renderIcon$1('checkmark', icons, [checkmarkClass]);\n const renderSubmenuCaret = icons => renderIcon$1('chevron-right', icons, [caretClass]);\n const renderDownwardsCaret = icons => renderIcon$1('chevron-down', icons, [caretClass]);\n const renderContainer = (container, components) => {\n const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n const getValignClass = () => {\n switch (container.valign) {\n case 'top':\n return containerValignTopClass;\n case 'middle':\n return containerValignMiddleClass;\n case 'bottom':\n return containerValignBottomClass;\n }\n };\n return {\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n directionClass,\n alignClass,\n getValignClass()\n ]\n },\n components\n };\n };\n const renderImage = (src, classes, alt) => ({\n dom: {\n tag: 'img',\n classes,\n attributes: {\n src,\n alt: alt.getOr('')\n }\n }\n });\n\n const renderColorStructure = (item, providerBackstage, fallbackIcon) => {\n const colorPickerCommand = 'custom';\n const removeColorCommand = 'remove';\n const itemText = item.ariaLabel;\n const itemValue = item.value;\n const iconSvg = item.iconContent.map(name => getOr(name, providerBackstage.icons, fallbackIcon));\n const getDom = () => {\n const common = colorClass;\n const icon = iconSvg.getOr('');\n const attributes = itemText.map(text => ({ title: providerBackstage.translate(text) })).getOr({});\n const baseDom = {\n tag: 'div',\n attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return {\n ...baseDom,\n tag: 'button',\n classes: [\n ...baseDom.classes,\n 'tox-swatches__picker-btn'\n ],\n innerHtml: icon\n };\n } else if (itemValue === removeColorCommand) {\n return {\n ...baseDom,\n classes: [\n ...baseDom.classes,\n 'tox-swatch--remove'\n ],\n innerHtml: icon\n };\n } else if (isNonNullable(itemValue)) {\n return {\n ...baseDom,\n attributes: {\n ...baseDom.attributes,\n 'data-mce-color': itemValue\n },\n styles: { 'background-color': itemValue }\n };\n } else {\n return baseDom;\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n const renderItemDomStructure = ariaLabel => {\n const domTitle = ariaLabel.map(label => ({ attributes: { title: global$8.translate(label) } })).getOr({});\n return {\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ],\n ...domTitle\n };\n };\n const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n const iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n const renderIcon = iconName => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n const checkmark = info.checkMark;\n const textRender = Optional.from(info.meta).fold(() => renderText, meta => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText);\n const content = info.htmlContent.fold(() => info.textContent.map(textRender), html => Optional.some(renderHtml(html, [textClass])));\n const menuItem = {\n dom: renderItemDomStructure(info.ariaLabel),\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n const tooltipBehaviour = (meta, sharedBackstage) => get$g(meta, 'tooltipWorker').map(tooltipWorker => [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: comp => ({\n type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n }),\n mode: 'follow-highlight',\n onShow: (component, _tooltip) => {\n tooltipWorker(elm => {\n Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })]).getOr([]);\n const encodeText = text => global$7.DOM.encode(text);\n const replaceText = (text, matchText) => {\n const translated = global$8.translate(text);\n const encoded = encodeText(translated);\n if (matchText.length > 0) {\n const escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, match => `${ match }`);\n } else {\n return encoded;\n }\n };\n const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n const structure = renderItemStructure({\n presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(text => replaceText(text, matchText)) : Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Optional.none(),\n checkMark: Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n return renderCommonItem({\n data: buildData(spec),\n enabled: spec.enabled,\n getApi: constant$1({}),\n onAction: _api => onItemValueHandler(spec.value, spec.meta),\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const render$2 = (items, extras) => map$2(items, item => {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render$2(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n const shouldHighlight = item.name.exists(name => contains$2(extras.cardText.highlightOn, name));\n const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => {\n Disabling.set(component, !state);\n each$1(descendants(component.element, '*'), elm => {\n component.getSystem().getByDom(elm).each(comp => {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, !state);\n }\n });\n });\n }\n });\n const structure = {\n dom: renderItemDomStructure(spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render$2(spec.items, extras)\n })]\n };\n return renderCommonItem({\n data: buildData({\n text: Optional.none(),\n ...spec\n }),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets,\n textContent: useText ? spec.text : Optional.none(),\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Optional.none(),\n checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: _api => onItemValueHandler(spec.value),\n onSetup: api => {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active,\n exclusive: true\n }\n });\n };\n\n const parts$f = generate$3(owner$2(), parts$h());\n\n const hexColour = value => ({ value });\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n const getLongForm = hex => {\n const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n return { value: hexString };\n };\n const extractValues = hex => {\n const longForm = getLongForm(hex);\n const splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const min = Math.min;\n const max = Math.max;\n const round$1 = Math.round;\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const isRgbaComponent = value => {\n const num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n const fromHsv = hsv => {\n let r;\n let g;\n let b;\n const hue = (hsv.hue || 0) % 360;\n let saturation = hsv.saturation / 100;\n let brightness = hsv.value / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$1(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n const side = hue / 60;\n const chroma = brightness * saturation;\n const x = chroma * (1 - Math.abs(side % 2 - 1));\n const match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$1(255 * (r + match));\n g = round$1(255 * (g + match));\n b = round$1(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n const fromHex = hexColour => {\n const result = extractValues(hexColour);\n const red = parseInt(result[1], 16);\n const green = parseInt(result[2], 16);\n const blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n const red = rgbaColour(255, 0, 0, 1);\n\n const fireSkinLoaded$1 = editor => {\n editor.dispatch('SkinLoaded');\n };\n const fireSkinLoadError$1 = (editor, error) => {\n editor.dispatch('SkinLoadError', error);\n };\n const fireResizeEditor = editor => {\n editor.dispatch('ResizeEditor');\n };\n const fireResizeContent = (editor, e) => {\n editor.dispatch('ResizeContent', e);\n };\n const fireScrollContent = (editor, e) => {\n editor.dispatch('ScrollContent', e);\n };\n const fireTextColorChange = (editor, data) => {\n editor.dispatch('TextColorChange', data);\n };\n const fireAfterProgressState = (editor, state) => {\n editor.dispatch('AfterProgressState', { state });\n };\n const fireResolveName = (editor, node) => editor.dispatch('ResolveName', {\n name: node.nodeName.toLowerCase(),\n target: node\n });\n\n const hsvColour = (hue, saturation, value) => ({\n hue,\n saturation,\n value\n });\n const fromRgb = rgbaColour => {\n let h = 0;\n let s = 0;\n let v = 0;\n const r = rgbaColour.red / 255;\n const g = rgbaColour.green / 255;\n const b = rgbaColour.blue / 255;\n const minRGB = Math.min(r, Math.min(g, b));\n const maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n const d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n const hexToHsv = hex => fromRgb(fromHex(hex));\n const hsvToHex = hsv => fromRgba(fromHsv(hsv));\n const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n const canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n const canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n const r = rgba[0];\n const g = rgba[1];\n const b = rgba[2];\n const a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n const storageName = 'tinymce-custom-colors';\n const ColorCache = (max = 10) => {\n const storageString = global$4.getItem(storageName);\n const localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n const prune = list => {\n const diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n const cache = prune(localstorage);\n const add = key => {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$4.setItem(storageName, JSON.stringify(cache));\n };\n const remove = idx => {\n cache.splice(idx, 1);\n };\n const state = () => cache.slice(0);\n return {\n add,\n state\n };\n };\n\n const colorCache = ColorCache(10);\n const calcCols = colors => Math.max(5, Math.ceil(Math.sqrt(colors)));\n const mapColors = colorMap => {\n const colors = [];\n for (let i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: '#' + anyToHex(colorMap[i]).value,\n type: 'choiceitem'\n });\n }\n return colors;\n };\n const option$1 = name => editor => editor.options.get(name);\n const register$d = editor => {\n const registerOption = editor.options.register;\n registerOption('color_map', {\n processor: value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColors(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n },\n default: [\n '#BFEDD2',\n 'Light Green',\n '#FBEEB8',\n 'Light Yellow',\n '#F8CAC6',\n 'Light Red',\n '#ECCAFA',\n 'Light Purple',\n '#C2E0F4',\n 'Light Blue',\n '#2DC26B',\n 'Green',\n '#F1C40F',\n 'Yellow',\n '#E03E2D',\n 'Red',\n '#B96AD9',\n 'Purple',\n '#3598DB',\n 'Blue',\n '#169179',\n 'Dark Turquoise',\n '#E67E23',\n 'Orange',\n '#BA372A',\n 'Dark Red',\n '#843FA1',\n 'Dark Purple',\n '#236FA1',\n 'Dark Blue',\n '#ECF0F1',\n 'Light Gray',\n '#CED4D9',\n 'Medium Gray',\n '#95A5A6',\n 'Gray',\n '#7E8C8D',\n 'Dark Gray',\n '#34495E',\n 'Navy Blue',\n '#000000',\n 'Black',\n '#ffffff',\n 'White'\n ]\n });\n registerOption('color_cols', {\n processor: 'number',\n default: calcCols(getColors$2(editor).length)\n });\n registerOption('custom_colors', {\n processor: 'boolean',\n default: true\n });\n };\n const getColorCols$1 = option$1('color_cols');\n const hasCustomColors$1 = option$1('custom_colors');\n const getColors$2 = option$1('color_map');\n const getCurrentColors = () => map$2(colorCache.state(), color => ({\n type: 'choiceitem',\n text: color,\n value: color\n }));\n const addColor = color => {\n colorCache.add(color);\n };\n\n const fallbackColor = '#000000';\n const hasStyleApi = node => isNonNullable(node.style);\n const getCurrentColor = (editor, format) => {\n let color;\n editor.dom.getParents(editor.selection.getStart(), elm => {\n const value = hasStyleApi(elm) ? elm.style[format === 'forecolor' ? 'color' : 'backgroundColor'] : null;\n if (value) {\n color = color ? color : value;\n }\n });\n return Optional.from(color);\n };\n const applyFormat = (editor, format, value) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.apply(format, { value });\n editor.nodeChanged();\n });\n };\n const removeFormat = (editor, format) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.remove(format, { value: null }, undefined, true);\n editor.nodeChanged();\n });\n };\n const registerCommands = editor => {\n editor.addCommand('mceApplyTextcolor', (format, value) => {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', format => {\n removeFormat(editor, format);\n });\n };\n const getAdditionalColors = hasCustom => {\n const type = 'choiceitem';\n const remove = {\n type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n const custom = {\n type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n const applyColor = (editor, format, value, onChoice) => {\n if (value === 'custom') {\n const dialog = colorPickerDialog(editor);\n dialog(colorOpt => {\n colorOpt.each(color => {\n addColor(color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, fallbackColor);\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n const getColors$1 = (colors, hasCustom) => colors.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n const getFetch$1 = (colors, hasCustom) => callback => {\n callback(getColors$1(colors, hasCustom));\n };\n const setIconColor = (splitButtonApi, name, newColor) => {\n const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n const registerTextColorButton = (editor, name, format, tooltip, lastColor) => {\n editor.ui.registry.addSplitButton(name, {\n tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: value => {\n const optCurrentRgb = getCurrentColor(editor, format);\n return optCurrentRgb.bind(currentRgb => fromString(currentRgb).map(rgba => {\n const currentHex = fromRgba(rgba).value;\n return contains$1(value.toLowerCase(), currentHex);\n })).getOr(false);\n },\n columns: getColorCols$1(editor),\n fetch: getFetch$1(getColors$2(editor), hasCustomColors$1(editor)),\n onAction: _splitButtonApi => {\n applyColor(editor, format, lastColor.get(), noop);\n },\n onItemAction: (_splitButtonApi, value) => {\n applyColor(editor, format, value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n },\n onSetup: splitButtonApi => {\n setIconColor(splitButtonApi, name, lastColor.get());\n const handler = e => {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return () => {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n const registerTextColorMenuItem = (editor, name, format, text) => {\n editor.ui.registry.addNestedMenuItem(name, {\n text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: () => [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: data => {\n applyColor(editor, format, data.value, noop);\n }\n }]\n });\n };\n const colorPickerDialog = editor => (callback, value) => {\n let isValid = false;\n const onSubmit = api => {\n const data = api.getData();\n const hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n const onAction = (_api, details) => {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n const initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onAction,\n onSubmit,\n onClose: noop,\n onCancel: () => {\n callback(Optional.none());\n }\n });\n };\n const register$c = editor => {\n registerCommands(editor);\n const lastForeColor = Cell(fallbackColor);\n const lastBackColor = Cell(fallbackColor);\n registerTextColorButton(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color');\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color');\n };\n\n const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => {\n const hasIcons = menuHasIcons(items);\n const presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n const menuLayout = { menuType: presets };\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout);\n };\n const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, item => {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, d => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items))));\n } else {\n return Optional.none();\n }\n }));\n\n const deriveMenuMovement = (columns, presets) => {\n const menuMarkers = markers(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n const rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass\n };\n }\n };\n const deriveCollectionMovement = (columns, presets) => {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? `.${ colorClass }` : `.${ selectableClass }`\n }\n };\n }\n };\n\n const renderColorSwatchItem = (spec, backstage) => {\n const items = getColorItems(spec, backstage);\n const columns = backstage.colorinput.getColorCols();\n const presets = 'color';\n const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onAction({ value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n const widgetSpec = {\n ...menuSpec,\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets)\n };\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget(Menu.sketch(widgetSpec))]\n };\n };\n const getColorItems = (spec, backstage) => {\n const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(), useCustomColors), colors => colors.concat(getAdditionalColors(useCustomColors)));\n };\n\n const cellOverEvent = generate$6('cell-over');\n const cellExecuteEvent = generate$6('cell-execute');\n const makeCell = (row, col, labelId) => {\n const emitCellOver = c => emitWith(c, cellOverEvent, {\n row,\n col\n });\n const emitExecute = c => emitWith(c, cellExecuteEvent, {\n row,\n col\n });\n const onClick = (c, se) => {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: {\n role: 'button',\n ['aria-labelledby']: labelId\n }\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run$1(mouseover(), Focusing.focus),\n run$1(execute$5(), emitExecute),\n run$1(click(), onClick),\n run$1(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n const makeCells = (labelId, numRows, numCols) => {\n const cells = [];\n for (let i = 0; i < numRows; i++) {\n const row = [];\n for (let j = 0; j < numCols; j++) {\n row.push(makeCell(i, j, labelId));\n }\n cells.push(row);\n }\n return cells;\n };\n const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade));\n const makeLabelText = (row, col) => text$1(`${ col }x${ row }`);\n const renderInsertTableMenuItem = spec => {\n const numRows = 10;\n const numColumns = 10;\n const sizeLabelId = generate$6('size-label');\n const cells = makeCells(sizeLabelId, numRows, numColumns);\n const emptyLabelText = makeLabelText(0, 0);\n const memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label'],\n attributes: { id: sizeLabelId }\n },\n components: [emptyLabelText],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runOnAttached(c => {\n Replacing.set(memLabel.get(c), [emptyLabelText]);\n }),\n runWithTarget(cellOverEvent, (c, t, e) => {\n const {row, col} = e.event;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n }),\n runWithTarget(cellExecuteEvent, (c, _, e) => {\n const {row, col} = e.event;\n spec.onAction({\n numRows: row + 1,\n numColumns: col + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows,\n numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n const fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n const renderFancyMenuItem = (spec, backstage) => get$g(fancyMenuItems, spec.fancytype).map(render => render(spec, backstage));\n\n const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.some(caret),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.none(),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderSeparatorItem = spec => ({\n type: 'separator',\n dom: {\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n },\n components: spec.text.map(text$1).toArray()\n });\n\n const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n caret: Optional.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n const autocomplete = renderAutocompleteItem;\n const separator$3 = renderSeparatorItem;\n const normal = renderNormalItem;\n const nested = renderNestedItem;\n const toggle$1 = renderToggleMenuItem;\n const fancy = renderFancyMenuItem;\n const card = renderCardMenuItem;\n\n const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name);\n const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name);\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled,\n getExistingCoupled: getExistingCoupled\n });\n\n var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n const init$a = () => {\n const coupled = {};\n const lookupCoupled = (coupleConfig, coupledName) => {\n const available = keys(coupleConfig.others);\n if (available.length === 0) {\n throw new Error('Cannot find any known coupled components');\n } else {\n return get$g(coupled, coupledName);\n }\n };\n const getOrCreate = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).getOrThunk(() => {\n const builder = get$g(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n const spec = builder(component);\n const built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n };\n const getExisting = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).orThunk(() => {\n get$g(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n return Optional.none();\n });\n };\n const readState = constant$1({});\n return nu$8({\n readState,\n getExisting,\n getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n const Coupling = create$3({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n const nu$3 = baseFn => {\n let data = Optional.none();\n let callbacks = [];\n const map = f => nu$3(nCallback => {\n get(data => {\n nCallback(f(data));\n });\n });\n const get = nCallback => {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n const set = x => {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n const isReady = () => data.isSome();\n const run = cbs => {\n each$1(cbs, call);\n };\n const call = cb => {\n data.each(x => {\n setTimeout(() => {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get,\n map,\n isReady\n };\n };\n const pure$1 = a => nu$3(callback => {\n callback(a);\n });\n const LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n const errorReporter = err => {\n setTimeout(() => {\n throw err;\n }, 0);\n };\n const make$5 = run => {\n const get = callback => {\n run().then(callback, errorReporter);\n };\n const map = fab => {\n return make$5(() => run().then(fab));\n };\n const bind = aFutureB => {\n return make$5(() => run().then(v => aFutureB(v).toPromise()));\n };\n const anonBind = futureB => {\n return make$5(() => run().then(() => futureB.toPromise()));\n };\n const toLazy = () => {\n return LazyValue.nu(get);\n };\n const toCached = () => {\n let cache = null;\n return make$5(() => {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n const toPromise = run;\n return {\n map,\n bind,\n anonBind,\n toLazy,\n toCached,\n toPromise,\n get\n };\n };\n const nu$2 = baseFn => {\n return make$5(() => new Promise(baseFn));\n };\n const pure = a => {\n return make$5(() => Promise.resolve(a));\n };\n const Future = {\n nu: nu$2,\n pure\n };\n\n const suffix = constant$1('sink');\n const partType$1 = constant$1(optional({\n name: suffix(),\n overrides: constant$1({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive$2([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n const getAnchor = (detail, component) => {\n const hotspot = detail.getHotspot(component).getOr(component);\n const type = 'hotspot';\n const overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(() => ({\n type,\n hotspot,\n overrides\n }), layouts => ({\n type,\n hotspot,\n overrides,\n layouts\n }));\n };\n const fetch = (detail, mapFetch, component) => {\n const fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => {\n const futureData = fetch(detail, mapFetch, component);\n const getLazySink = getSink(component, detail);\n return futureData.map(tdata => tdata.bind(data => Optional.from(tieredMenu.sketch({\n ...externals.menu(),\n uid: generate$5(''),\n data,\n highlightOnOpen,\n onOpenMenu: (tmenu, menu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: (tmenu, item, submenu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor });\n each$1(submenuTriggers, st => {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: () => {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n }))));\n };\n const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n const anchor = getAnchor(detail, hotspot);\n const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(tdata => {\n tdata.fold(() => {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, data => {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n const sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n const showing = Sandboxing.isOpen(sandbox);\n const action = showing ? close : open;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n const matchWidth = (hotspot, container, useMinWidth) => {\n const menu = Composing.getCurrent(container).getOr(container);\n const buttonWidth = get$c(hotspot.element);\n if (useMinWidth) {\n set$8(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$7(menu.element, buttonWidth);\n }\n };\n const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(internalSink => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), lazySinkFn => () => lazySinkFn(anyInSystem)));\n const doRepositionMenus = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n const makeSandbox$1 = (detail, hotspot, extras) => {\n const ariaControls = manager();\n const onOpen = (component, menu) => {\n const anchor = getAnchor(detail, hotspot);\n ariaControls.link(hotspot.element);\n if (detail.matchWidth) {\n matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n }\n detail.onOpen(anchor, component, menu);\n if (extras !== undefined && extras.onOpen !== undefined) {\n extras.onOpen(component, menu);\n }\n };\n const onClose = (component, menu) => {\n ariaControls.unlink(hotspot.element);\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n const lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: {\n id: ariaControls.id,\n role: 'listbox'\n }\n },\n behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: hotspot\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n },\n getAttachPoint: () => {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: sandbox => {\n return Sandboxing.getState(sandbox).bind(menu => Composing.getCurrent(menu));\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({ isExtraPart: never }),\n ...receivingChannel({ doReposition: doRepositionMenus })\n }\n })\n ])\n };\n };\n const repositionMenus = comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n const sandboxFields = () => [\n defaulted('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n\n const schema$k = constant$1([\n required$1('dom'),\n required$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n field('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n required$1('toggleClass'),\n defaulted('eventOrder', {}),\n option$3('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option$3('role')\n ].concat(sandboxFields()));\n const parts$e = constant$1([\n external({\n schema: [\n tieredMenuMarkers(),\n defaulted('fakeFocus', false)\n ],\n name: 'menu',\n defaults: detail => {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n const factory$i = (detail, components, _spec, externals) => {\n const lookupAttr = attr => get$g(detail.dom, 'attributes').bind(attrs => get$g(attrs, attr));\n const switchToMenu = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => {\n return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen);\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const apis = {\n expand: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n refetch: comp => {\n const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox');\n return optSandbox.fold(() => {\n return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n }, sandboxComp => {\n return open(detail, identity, comp, sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n });\n },\n isOpen: Toggling.isOn,\n close: comp => {\n if (Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n const triggerExecute = (comp, _se) => {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => Toggling.off(hotspot)\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$a(Optional.some(action)),\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n apis,\n domModification: {\n attributes: {\n 'aria-haspopup': 'true',\n ...detail.role.fold(() => ({}), role => ({ role })),\n ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {}\n }\n }\n };\n };\n const Dropdown = composite({\n name: 'Dropdown',\n configFields: schema$k(),\n partFields: parts$e(),\n factory: factory$i,\n apis: {\n open: (apis, comp) => apis.open(comp),\n refetch: (apis, comp) => apis.refetch(comp),\n expand: (apis, comp) => apis.expand(comp),\n close: (apis, comp) => apis.close(comp),\n isOpen: (apis, comp) => apis.isOpen(comp),\n repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n }\n });\n\n const identifyMenuLayout = searchMode => {\n switch (searchMode.searchMode) {\n case 'no-search': {\n return { menuType: 'normal' };\n }\n default: {\n return {\n menuType: 'searchable',\n searchMode\n };\n }\n }\n };\n const handleRefetchTrigger = originalSandboxComp => {\n const dropdown = Representing.getValue(originalSandboxComp);\n const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState);\n Dropdown.refetch(dropdown).get(() => {\n const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox');\n optSearcherState.each(searcherState => findWithinSandbox(newSandboxComp).each(inputComp => restoreState(inputComp, searcherState)));\n });\n };\n const handleRedirectToMenuItem = (sandboxComp, se) => {\n getActiveMenuItemFrom(sandboxComp).each(activeItem => {\n retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent);\n });\n };\n const getActiveMenuItemFrom = sandboxComp => {\n return Sandboxing.getState(sandboxComp).bind(Highlighting.getHighlighted).bind(Highlighting.getHighlighted);\n };\n const getSearchResults = activeMenuComp => {\n return has(activeMenuComp.element, searchResultsClass) ? Optional.some(activeMenuComp.element) : descendant(activeMenuComp.element, '.' + searchResultsClass);\n };\n const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => {\n findWithinMenu(tmenuComp).each(inputComp => {\n setActiveDescendant(inputComp, itemComp);\n const optActiveResults = getSearchResults(menuComp);\n optActiveResults.each(resultsElem => {\n getOpt(resultsElem, 'id').each(controlledId => set$9(inputComp.element, 'aria-controls', controlledId));\n });\n });\n set$9(itemComp.element, 'aria-selected', 'true');\n };\n const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => {\n set$9(itemComp.element, 'aria-selected', 'false');\n };\n const focusSearchField = tmenuComp => {\n findWithinMenu(tmenuComp).each(searcherComp => Focusing.focus(searcherComp));\n };\n const getSearchPattern = dropdownComp => {\n const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox');\n return optSandboxComp.bind(findWithinSandbox).map(saveState).map(state => state.fetchPattern).getOr('');\n };\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => {\n const providersBackstage = backstage.shared.providers;\n const parseForHorizontalMenu = menuitem => !isHorizontalMenu ? menuitem : {\n ...menuitem,\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, d => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, d => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu)));\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, d => Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, d => fancy(d, backstage));\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n const renderText = columns === 1;\n const renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, item => {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, d => Optional.some(card({\n ...d,\n onAction: api => {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }, itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage),\n cardText: {\n matchText,\n highlightOn\n }\n })));\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, d => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n }\n }));\n };\n const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => {\n const hasIcons = menuHasIcons(items);\n const alloyItems = cat(map$2(items, item => {\n const itemHasIcon = i => isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n const createItem = i => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem({\n ...item,\n enabled: false\n });\n } else {\n return createItem(item);\n }\n }));\n const menuLayout = identifyMenuLayout(searchMode);\n const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, menuLayout);\n };\n const createTieredDataFrom = partialMenu => tieredMenu.singleData(partialMenu.value, partialMenu);\n const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => {\n const movement = deriveMenuMovement(columns, presets);\n const menuMarkers = markers(presets);\n return {\n data: createTieredDataFrom({\n ...partialMenu,\n movement,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, menuMarkers.item).each(({numColumns, numRows}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }),\n menu: {\n markers: markers(presets),\n fakeFocus: focusMode === FocusMode.ContentFocus\n }\n };\n };\n\n const getAutocompleterRange = (dom, initRange) => {\n return detect(SugarElement.fromDom(initRange.startContainer)).map(elm => {\n const range = dom.createRng();\n range.selectNode(elm.dom);\n return range;\n });\n };\n const register$b = (editor, sharedBackstage) => {\n const processingAction = Cell(false);\n const activeState = Cell(false);\n const autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter']\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [run$1(dismissRequested(), () => cancelIfNecessary())])]),\n lazySink: sharedBackstage.getSink\n }));\n const isMenuOpen = () => InlineView.isOpen(autocompleter);\n const isActive = activeState.get;\n const hideIfNecessary = () => {\n if (isMenuOpen()) {\n InlineView.hide(autocompleter);\n }\n };\n const getMenu = () => InlineView.getContent(autocompleter).bind(tmenu => {\n return get$h(tmenu.components(), 0);\n });\n const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose');\n const getCombinedItems = matches => {\n const columns = findMap(matches, m => Optional.from(m.columns)).getOr(1);\n return bind$3(matches, match => {\n const choices = match.items;\n return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => {\n const nr = editor.selection.getRng();\n getAutocompleterRange(editor.dom, nr).each(range => {\n const autocompleterApi = {\n hide: () => cancelIfNecessary(),\n reload: fetchOptions => {\n hideIfNecessary();\n editor.execCommand('mceAutocompleterReload', false, { fetchOptions });\n }\n };\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n });\n };\n const display = (lookupData, items) => {\n findIn(SugarElement.fromDom(editor.getBody())).each(element => {\n const columns = findMap(lookupData, ld => Optional.from(ld.columns)).getOr(1);\n InlineView.showMenuAt(autocompleter, {\n anchor: {\n type: 'node',\n root: SugarElement.fromDom(editor.getBody()),\n node: Optional.from(element)\n }\n }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, 'normal'));\n });\n getMenu().each(Highlighting.highlightFirst);\n };\n const updateDisplay = lookupData => {\n const combinedItems = getCombinedItems(lookupData);\n if (combinedItems.length > 0) {\n display(lookupData, combinedItems);\n } else {\n hideIfNecessary();\n }\n };\n editor.on('AutocompleterStart', ({lookupData}) => {\n activeState.set(true);\n processingAction.set(false);\n updateDisplay(lookupData);\n });\n editor.on('AutocompleterUpdate', ({lookupData}) => updateDisplay(lookupData));\n editor.on('AutocompleterEnd', () => {\n hideIfNecessary();\n activeState.set(false);\n processingAction.set(false);\n });\n const autocompleterUiApi = {\n cancelIfNecessary,\n isMenuOpen,\n isActive,\n isProcessingAction: processingAction.get,\n getMenu\n };\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n const Autocompleter = { register: register$b };\n\n const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n\n const DelayedFunction = (fun, delay) => {\n let ref = null;\n const schedule = (...args) => {\n ref = setTimeout(() => {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n const cancel = () => {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel,\n schedule\n };\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n const raw = event.raw;\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(raw.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const monitor = settings => {\n const startData = value$2();\n const longpressFired = Cell(false);\n const longpress$1 = DelayedFunction(event => {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n const handleTouchstart = event => {\n getTouch(event).each(touch => {\n longpress$1.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(data);\n });\n return Optional.none();\n };\n const handleTouchmove = event => {\n longpress$1.cancel();\n getTouch(event).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n const handleTouchend = event => {\n longpress$1.cancel();\n const isSame = data => eq(data.target, event.target);\n return startData.get().filter(isSame).map(_data => {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n const handlers = wrapAll([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n const fireIfReady = (event, type) => get$g(handlers, type).bind(handler => handler(event));\n return { fireIfReady };\n };\n\n const isDangerous = event => {\n const keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains$2([\n 'input',\n 'textarea'\n ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n const setup$d = (container, rawSettings) => {\n const settings = {\n stopBackspace: true,\n ...rawSettings\n };\n const pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n const tapEvent = monitor(settings);\n const simpleEvents = map$2(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'transitioncancel',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), type => bind(container, type, event => {\n tapEvent.fireIfReady(event, type).each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n }));\n const pasteTimeout = value$2();\n const onPaste = bind(container, 'paste', event => {\n tapEvent.fireIfReady(event, 'paste').each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(setTimeout(() => {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n const onKeydown = bind(container, 'keydown', event => {\n const stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace && isDangerous(event)) {\n event.prevent();\n }\n });\n const onFocusIn = bind(container, 'focusin', event => {\n const stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n const focusoutTimeout = value$2();\n const onFocusOut = bind(container, 'focusout', event => {\n const stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(() => {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n const unbind = () => {\n each$1(simpleEvents, e => {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.on(clearTimeout);\n focusoutTimeout.on(clearTimeout);\n };\n return { unbind };\n };\n\n const derive = (rawEvent, rawTarget) => {\n const source = get$g(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n const fromSource = (event, source) => {\n const stopper = Cell(false);\n const cutter = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n const cut = () => {\n cutter.set(true);\n };\n return {\n stop,\n cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event,\n setSource: source.set,\n getSource: source.get\n };\n };\n const fromExternal = event => {\n const stopper = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n return {\n stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event,\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n const adt$1 = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => {\n const handler = lookup(eventType, target);\n const simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(() => {\n logger.logEventNoHandlers(eventType, target);\n return adt$1.complete();\n }, handlerInfo => {\n const descHandler = handlerInfo.descHandler;\n const eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n } else {\n return parent(handlerInfo.element).fold(() => {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, parent => {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, parent => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), never);\n const triggerHandler = (lookup, eventType, rawEvent, target, logger) => {\n const source = derive(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n const broadcast = (listeners, rawEvent, _logger) => {\n const simulatedEvent = fromExternal(rawEvent);\n each$1(listeners, listener => {\n const descHandler = listener.descHandler;\n const handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => {\n const source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n const eventHandler = (element, descHandler) => ({\n element,\n descHandler\n });\n const broadcastHandler = (id, handler) => ({\n id,\n descHandler: handler\n });\n const EventRegistry = () => {\n const registry = {};\n const registerId = (extraArgs, id, events) => {\n each(events, (v, k) => {\n const handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n const findHandler = (handlers, elem) => read$1(elem).bind(id => get$g(handlers, id)).map(descHandler => eventHandler(elem, descHandler));\n const filterByType = type => get$g(registry, type).map(handlers => mapToArray(handlers, (f, id) => broadcastHandler(id, f))).getOr([]);\n const find = (isAboveRoot, type, target) => get$g(registry, type).bind(handlers => closest$4(target, elem => findHandler(handlers, elem), isAboveRoot));\n const unregisterId = id => {\n each(registry, (handlersById, _eventName) => {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId,\n unregisterId,\n filterByType,\n find\n };\n };\n\n const Registry = () => {\n const events = EventRegistry();\n const components = {};\n const readOrTag = component => {\n const elem = component.element;\n return read$1(elem).getOrThunk(() => write('uid-', component.element));\n };\n const failOnDuplicate = (component, tagId) => {\n const conflict = components[tagId];\n if (conflict === component) {\n unregister(component);\n } else {\n throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + '\\nCannot use it for: ' + element(component.element) + '\\n' + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM');\n }\n };\n const register = component => {\n const tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n const extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n const unregister = component => {\n read$1(component.element).each(tagId => {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n const filter = type => events.filterByType(type);\n const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target);\n const getById = id => get$g(components, id);\n return {\n find,\n filter,\n register,\n unregister,\n getById\n };\n };\n\n const factory$h = detail => {\n const {attributes, ...domWithoutAttributes} = detail.dom;\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n role: 'presentation',\n ...attributes\n },\n ...domWithoutAttributes\n },\n components: detail.components,\n behaviours: get$3(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n const Container = single({\n name: 'Container',\n factory: factory$h,\n configFields: [\n defaulted('components', []),\n field('containerBehaviours', []),\n defaulted('events', {}),\n defaulted('domModification', {}),\n defaulted('eventOrder', {})\n ]\n });\n\n const takeover = root => {\n const isAboveRoot = el => parent(root.element).fold(always, parent => eq(el, parent));\n const registry = Registry();\n const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n const domEvents = setup$d(root.element, {\n triggerEvent: (eventName, event) => {\n return monitorEvent(eventName, event.target, logger => triggerUntilStopped(lookup, eventName, event, logger));\n }\n });\n const systemApi = {\n debugInfo: constant$1('real'),\n triggerEvent: (eventName, target, data) => {\n monitorEvent(eventName, target, logger => triggerOnUntilStopped(lookup, eventName, data, target, logger));\n },\n triggerFocus: (target, originator) => {\n read$1(target).fold(() => {\n focus$3(target);\n }, _alloyId => {\n monitorEvent(focus$4(), target, logger => {\n triggerHandler(lookup, focus$4(), {\n originator,\n kill: noop,\n prevent: noop,\n target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: (comp, simulatedEvent) => {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: uid => {\n return getByUid(uid);\n },\n getByDom: elem => {\n return getByDom(elem);\n },\n build: build$1,\n buildOrPatch: buildOrPatch,\n addToGui: c => {\n add(c);\n },\n removeFromGui: c => {\n remove(c);\n },\n addToWorld: c => {\n addToWorld(c);\n },\n removeFromWorld: c => {\n removeFromWorld(c);\n },\n broadcast: message => {\n broadcast$1(message);\n },\n broadcastOn: (channels, message) => {\n broadcastOn(channels, message);\n },\n broadcastEvent: (eventName, event) => {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n const addToWorld = component => {\n component.connect(systemApi);\n if (!isText(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n const removeFromWorld = component => {\n if (!isText(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n const add = component => {\n attach(root, component);\n };\n const remove = component => {\n detach(component);\n };\n const destroy = () => {\n domEvents.unbind();\n remove$5(root.element);\n };\n const broadcastData = data => {\n const receivers = registry.filter(receive());\n each$1(receivers, receiver => {\n const descHandler = receiver.descHandler;\n const handler = getCurried(descHandler);\n handler(data);\n });\n };\n const broadcast$1 = message => {\n broadcastData({\n universal: true,\n data: message\n });\n };\n const broadcastOn = (channels, message) => {\n broadcastData({\n universal: false,\n channels,\n data: message\n });\n };\n const broadcastEvent = (eventName, event) => {\n const listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n const getByUid = uid => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n const getByDom = elem => {\n const uid = read$1(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root,\n element: root.element,\n destroy,\n add,\n remove,\n getByUid,\n getByDom,\n addToWorld,\n removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn,\n broadcastEvent\n };\n };\n\n const renderBar = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const schema$j = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const parts$d = constant$1([\n optional({\n schema: [required$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: spec => {\n const excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n const factory$g = (detail, components, _spec, _externals) => {\n const behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: container => {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: field => {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: (field, value) => {\n Composing.getCurrent(field).each(current => {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n const events = derive$2([runOnAttached((component, _simulatedEvent) => {\n const ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(field => {\n const id = generate$6(detail.prefix);\n ps.label().each(label => {\n set$9(label.element, 'for', id);\n set$9(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(descriptor => {\n const descriptorId = generate$6(detail.prefix);\n set$9(descriptor.element, 'id', descriptorId);\n set$9(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n const apis = {\n getField: container => getPart(container, detail, 'field'),\n getLabel: container => getPart(container, detail, 'label')\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours,\n events,\n apis\n };\n };\n const FormField = composite({\n name: 'FormField',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$g,\n apis: {\n getField: (apis, comp) => apis.getField(comp),\n getLabel: (apis, comp) => apis.getLabel(comp)\n }\n });\n\n const exhibit$2 = (base, tabConfig) => nu$7({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2\n });\n\n var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n const Tabstopping = create$3({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n });\n const renderFormFieldDom = () => renderFormFieldDomWith([]);\n const renderFormFieldDomWith = extraClasses => ({\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n });\n const renderLabel$2 = (label, providersBackstage) => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$1(providersBackstage.translate(label))]\n });\n\n const formChangeEvent = generate$6('form-component-change');\n const formCloseEvent = generate$6('form-close');\n const formCancelEvent = generate$6('form-cancel');\n const formActionEvent = generate$6('form-action');\n const formSubmitEvent = generate$6('form-submit');\n const formBlockEvent = generate$6('form-block');\n const formUnblockEvent = generate$6('form-unblock');\n const formTabChangeEvent = generate$6('form-tabchange');\n const formResizeEvent = generate$6('form-resize');\n\n const renderCollection = (spec, providersBackstage, initialData) => {\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const runOnItem = f => (comp, se) => {\n closest$1(se.event.target, '[data-collection-item-value]').each(target => {\n f(comp, se, target, get$f(target, 'data-collection-item-value'));\n });\n };\n const setContents = (comp, items) => {\n const htmlLines = map$2(items, item => {\n const itemText = global$8.translate(item.text);\n const textContent = spec.columns === 1 ? `
${ itemText }
` : '';\n const iconContent = `
${ item.icon }
`;\n const mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, match => mapItemName[match]);\n const disabledClass = providersBackstage.isDisabled() ? ' tox-collection__item--state-disabled' : '';\n return `
${ iconContent }${ textContent }
`;\n });\n const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n const html = map$2(chunks, ch => `
${ ch.join('') }
`);\n set$6(comp.element, html.join(''));\n };\n const onClick = runOnItem((comp, se, tgt, itemValue) => {\n se.stop();\n if (!providersBackstage.isDisabled()) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n const collectionEvents = [\n run$1(mouseover(), runOnItem((comp, se, tgt) => {\n focus$3(tgt);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem((comp, se, tgt) => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$2(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(comp => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$2(currentActive, activeClass);\n });\n })),\n runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n const pField = FormField.parts.field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Disabling.config({\n disabled: providersBackstage.isDisabled,\n onDisabled: comp => {\n iterCollectionItems(comp, childElm => {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$9(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: comp => {\n iterCollectionItems(comp, childElm => {\n remove$2(childElm, 'tox-collection__item--state-disabled');\n remove$7(childElm, 'aria-disabled');\n });\n }\n }),\n receivingConfig(),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialData.getOr([])\n },\n onSetValue: (comp, items) => {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ]\n }\n });\n const extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n const ariaElements = [\n 'input',\n 'textarea'\n ];\n const isAriaElement = elem => {\n const name = name$3(elem);\n return contains$2(ariaElements, name);\n };\n const markValid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n const markInvalid = (component, invalidConfig, invalidState, text) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), validatorInfo => validatorInfo.validate(component));\n const run = (component, invalidConfig, invalidState) => {\n invalidConfig.notify.each(notifyInfo => {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(valid => {\n if (component.getSystem().isConnected()) {\n return valid.fold(err => {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, v => {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n const isInvalid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n return has(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run,\n isInvalid: isInvalid\n });\n\n const events$8 = (invalidConfig, invalidState) => invalidConfig.validator.map(validatorInfo => derive$2([run$1(validatorInfo.onEvent, component => {\n run(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(component => {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []))).getOr({});\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var InvalidateSchema = [\n required$1('invalidClass'),\n defaulted('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted('aria', 'alert'),\n defaulted('getContainer', Optional.none),\n defaulted('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n required$1('validate'),\n defaulted('onEvent', 'input'),\n defaulted('validateOnLoad', true)\n ])\n ];\n\n const Invalidating = create$3({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: validator => {\n return component => {\n const v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n const exhibit$1 = () => nu$7({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n const events$7 = () => derive$2([abort(selectstart(), always)]);\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7,\n exhibit: exhibit$1\n });\n\n const Unselecting = create$3({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n parts: { menu: part(false, 1, spec.presets) }\n });\n\n const colorInputChangeEvent = generate$6('color-input-change');\n const colorSwatchChangeEvent = generate$6('color-swatch-change');\n const colorPickerCancelEvent = generate$6('color-picker-cancel');\n const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n data: initialData,\n onSetValue: c => Invalidating.run(c).get(noop),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: sharedBackstage.providers.isDisabled }),\n receivingConfig(),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: comp => parentElement(comp.element),\n notify: {\n onValid: comp => {\n const val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: input => {\n const inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n const span = SugarElement.fromTag('span');\n set$8(span, 'background-color', inputValue);\n const res = getRaw(span, 'background-color').fold(() => Result.error('blah'), _ => Result.value(inputValue));\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n const pLabel = spec.label.map(label => renderLabel$2(label, sharedBackstage.providers));\n const emitSwatchChange = (colorBit, value) => {\n emitWith(colorBit, colorSwatchChangeEvent, { value });\n };\n const onItemAction = (comp, value) => {\n memColorButton.getOpt(comp).each(colorBit => {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(valueOpt => {\n valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), value => {\n emitSwatchChange(colorBit, value);\n addColor(value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n const memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: () => [\n southwest$2,\n southeast$2,\n south$2\n ],\n onLtr: () => [\n southeast$2,\n southwest$2,\n south$2\n ]\n },\n components: [],\n fetch: getFetch$1(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run$1(colorInputChangeEvent, (comp, se) => {\n memColorButton.getOpt(comp).each(colorButton => {\n set$8(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(colorSwatchChangeEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run$1(colorPickerCancelEvent, (comp, _se) => {\n FormField.getField(comp).each(_field => {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n const labelPart = optional({\n schema: [required$1('dom')],\n name: 'label'\n });\n const edgePart = name => optional({\n name: '' + name + '-edge',\n overrides: detail => {\n const action = detail.model.manager.edgeActions[name];\n return action.fold(() => ({}), a => ({\n events: derive$2([\n runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousemove(), (comp, se, det) => {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n }));\n }\n });\n const tlEdgePart = edgePart('top-left');\n const tedgePart = edgePart('top');\n const trEdgePart = edgePart('top-right');\n const redgePart = edgePart('right');\n const brEdgePart = edgePart('bottom-right');\n const bedgePart = edgePart('bottom');\n const blEdgePart = edgePart('bottom-left');\n const ledgePart = edgePart('left');\n const thumbPart = required({\n name: 'thumb',\n defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: detail => {\n return {\n events: derive$2([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n const spectrumPart = required({\n schema: [customField('mouseIsDown', () => Cell(false))],\n name: 'spectrum',\n overrides: detail => {\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map(value => model.setValueFrom(component, detail, value));\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: spectrum => model.onLeft(spectrum, detail),\n onRight: spectrum => model.onRight(spectrum, detail),\n onUp: spectrum => model.onUp(spectrum, detail),\n onDown: spectrum => model.onDown(spectrum, detail)\n }),\n Focusing.config({})\n ]),\n events: derive$2([\n run$1(touchstart(), setValueFrom),\n run$1(touchmove(), setValueFrom),\n run$1(mousedown(), setValueFrom),\n run$1(mousemove(), (spectrum, se) => {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n const _sliderChangeEvent = 'slider.change.value';\n const sliderChangeEvent = constant$1(_sliderChangeEvent);\n const isTouchEvent$2 = evt => evt.type.indexOf('touch') !== -1;\n const getEventSource = simulatedEvent => {\n const evt = simulatedEvent.event.raw;\n if (isTouchEvent$2(evt)) {\n const touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(t => SugarPosition(t.clientX, t.clientY)) : Optional.none();\n } else {\n const mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(me => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n }\n };\n\n const t = 'top', r = 'right', b = 'bottom', l = 'left';\n const minX = detail => detail.model.minX;\n const minY = detail => detail.model.minY;\n const min1X = detail => detail.model.minX - 1;\n const min1Y = detail => detail.model.minY - 1;\n const maxX = detail => detail.model.maxX;\n const maxY = detail => detail.model.maxY;\n const max1X = detail => detail.model.maxX + 1;\n const max1Y = detail => detail.model.maxY + 1;\n const range = (detail, max, min) => max(detail) - min(detail);\n const xRange = detail => range(detail, maxX, minX);\n const yRange = detail => range(detail, maxY, minY);\n const halfX = detail => xRange(detail) / 2;\n const halfY = detail => yRange(detail) / 2;\n const step = detail => detail.stepSize;\n const snap = detail => detail.snapToGrid;\n const snapStart = detail => detail.snapStart;\n const rounded = detail => detail.rounded;\n const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined;\n const hasLEdge = detail => hasEdge(detail, l);\n const hasREdge = detail => hasEdge(detail, r);\n const hasTEdge = detail => hasEdge(detail, t);\n const hasBEdge = detail => hasEdge(detail, b);\n const currentValue = detail => detail.model.value.get();\n\n const xyValue = (x, y) => ({\n x,\n y\n });\n const fireSliderChange$3 = (component, value) => {\n emitWith(component, sliderChangeEvent(), { value });\n };\n const setToTLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n const setToTEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1Y(detail));\n };\n const setToTEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n const setToTREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n const setToREdge = (edge, detail) => {\n fireSliderChange$3(edge, max1X(detail));\n };\n const setToREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n const setToBREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n const setToBEdge = (edge, detail) => {\n fireSliderChange$3(edge, max1Y(detail));\n };\n const setToBEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n const setToBLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n const setToLEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1X(detail));\n };\n const setToLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n const reduceBy = (value, min, max, step) => {\n if (value < min) {\n return value;\n } else if (value > max) {\n return max;\n } else if (value === min) {\n return min - 1;\n } else {\n return Math.max(min, value - step);\n }\n };\n const increaseBy = (value, min, max, step) => {\n if (value > max) {\n return value;\n } else if (value < min) {\n return min;\n } else if (value === max) {\n return max + 1;\n } else {\n return Math.min(max, value + step);\n }\n };\n const capValue = (value, min, max) => Math.max(min, Math.min(max, value));\n const snapValueOf = (value, min, max, step, snapStart) => snapStart.fold(() => {\n const initValue = value - min;\n const extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, start => {\n const remainder = (value - start) % step;\n const adjustment = Math.round(remainder / step);\n const rawSteps = Math.floor((value - start) / step);\n const maxSteps = Math.floor((max - start) / step);\n const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n const r = start + numSteps * step;\n return Math.max(start, r);\n });\n const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min;\n const findValueOf = args => {\n const {min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange} = args;\n const capMin = hasMinEdge ? min - 1 : min;\n const capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n const offset = findOffsetOf(value, minBound, maxBound);\n const newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n if (snap && newValue >= min && newValue <= max) {\n return snapValueOf(newValue, min, max, step, snapStart);\n } else if (rounded) {\n return Math.round(newValue);\n } else {\n return newValue;\n }\n }\n };\n const findOffsetOfValue$2 = args => {\n const {min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge} = args;\n if (value < min) {\n return hasMinEdge ? 0 : centerMinEdge;\n } else if (value > max) {\n return hasMaxEdge ? maxBound : centerMaxEdge;\n } else {\n return (value - min) / range * maxOffset;\n }\n };\n\n const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n const getBounds = component => component.element.dom.getBoundingClientRect();\n const getBoundsProperty = (bounds, property) => bounds[property];\n const getMinXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, left);\n };\n const getMaxXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n const getMinYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n const getMaxYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n const getXScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n const getYScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, height);\n };\n const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n const getXCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, left);\n const componentMaxEdge = getBoundsProperty(componentBounds, right);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n const getYCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, top);\n const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n const fireSliderChange$2 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset$1 = (spectrum, detail, left) => {\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: left,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n maxBound: getMaxXBounds(spectrum),\n screenRange: getXScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$2 = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value);\n const sliderVal = xValue;\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n const setToMin$2 = (spectrum, detail) => {\n const min = minX(detail);\n fireSliderChange$2(spectrum, min);\n };\n const setToMax$2 = (spectrum, detail) => {\n const max = maxX(detail);\n fireSliderChange$2(spectrum, max);\n };\n const moveBy$2 = (direction, spectrum, detail) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail));\n fireSliderChange$2(spectrum, xValue);\n return Optional.some(xValue);\n };\n const handleMovement$2 = direction => (spectrum, detail) => moveBy$2(direction, spectrum, detail).map(always);\n const getValueFromEvent$2 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => p.left);\n };\n const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getXScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const thumbRadius = get$c(thumb.element) / 2;\n set$8(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n const onLeft$2 = handleMovement$2(-1);\n const onRight$2 = handleMovement$2(1);\n const onUp$2 = Optional.none;\n const onDown$2 = Optional.none;\n const edgeActions$2 = {\n 'top-left': Optional.none(),\n 'top': Optional.none(),\n 'top-right': Optional.none(),\n 'right': Optional.some(setToREdge),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.none(),\n 'bottom-left': Optional.none(),\n 'left': Optional.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$2,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n const fireSliderChange$1 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset = (spectrum, detail, top) => {\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: top,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n maxBound: getMaxYBounds(spectrum),\n screenRange: getYScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$1 = (spectrum, detail, value) => {\n const yValue = findValueOfOffset(spectrum, detail, value);\n const sliderVal = yValue;\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n const setToMin$1 = (spectrum, detail) => {\n const min = minY(detail);\n fireSliderChange$1(spectrum, min);\n };\n const setToMax$1 = (spectrum, detail) => {\n const max = maxY(detail);\n fireSliderChange$1(spectrum, max);\n };\n const moveBy$1 = (direction, spectrum, detail) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail));\n fireSliderChange$1(spectrum, yValue);\n return Optional.some(yValue);\n };\n const handleMovement$1 = direction => (spectrum, detail) => moveBy$1(direction, spectrum, detail).map(always);\n const getValueFromEvent$1 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => {\n return p.top;\n });\n };\n const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getYScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbRadius = get$d(thumb.element) / 2;\n set$8(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n const onLeft$1 = Optional.none;\n const onRight$1 = Optional.none;\n const onUp$1 = handleMovement$1(-1);\n const onDown$1 = handleMovement$1(1);\n const edgeActions$1 = {\n 'top-left': Optional.none(),\n 'top': Optional.some(setToTEdge),\n 'top-right': Optional.none(),\n 'right': Optional.none(),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.some(setToBEdge),\n 'bottom-left': Optional.none(),\n 'left': Optional.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n const fireSliderChange = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const sliderValue = (x, y) => ({\n x,\n y\n });\n const setValueFrom = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value.left);\n const yValue = findValueOfOffset(spectrum, detail, value.top);\n const val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n const moveBy = (direction, isVerticalMovement, spectrum, detail) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n const yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n fireSliderChange(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n const handleMovement = (direction, isVerticalMovement) => (spectrum, detail) => moveBy(direction, isVerticalMovement, spectrum, detail).map(always);\n const setToMin = (spectrum, detail) => {\n const mX = minX(detail);\n const mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const setToMax = (spectrum, detail) => {\n const mX = maxX(detail);\n const mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const getValueFromEvent = simulatedEvent => getEventSource(simulatedEvent);\n const setPositionFromValue = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbXRadius = get$c(thumb.element) / 2;\n const thumbYRadius = get$d(thumb.element) / 2;\n set$8(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$8(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n const onLeft = handleMovement(-1, false);\n const onRight = handleMovement(1, false);\n const onUp = handleMovement(-1, true);\n const onDown = handleMovement(1, true);\n const edgeActions = {\n 'top-left': Optional.some(setToTLEdgeXY),\n 'top': Optional.some(setToTEdgeXY),\n 'top-right': Optional.some(setToTREdgeXY),\n 'right': Optional.some(setToREdgeXY),\n 'bottom-right': Optional.some(setToBREdgeXY),\n 'bottom': Optional.some(setToBEdgeXY),\n 'bottom-left': Optional.some(setToBLEdgeXY),\n 'left': Optional.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n getValueFromEvent: getValueFromEvent,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n const SliderSchema = [\n defaulted('stepSize', 1),\n defaulted('onChange', noop),\n defaulted('onChoose', noop),\n defaulted('onInit', noop),\n defaulted('onDragStart', noop),\n defaulted('onDragEnd', noop),\n defaulted('snapToGrid', false),\n defaulted('rounded', true),\n option$3('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', spec => Cell(spec.mode.minX)),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell(spec.mode.minY)),\n required$1('getInitialValue'),\n output$1('manager', VerticalModel)\n ],\n xy: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n })),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', () => Cell(false))\n ];\n\n const sketch$2 = (detail, components, _spec, _externals) => {\n const getThumb = component => getPartOrDie(component, detail, 'thumb');\n const getSpectrum = component => getPartOrDie(component, detail, 'spectrum');\n const getLeftEdge = component => getPart(component, detail, 'left-edge');\n const getRightEdge = component => getPart(component, detail, 'right-edge');\n const getTopEdge = component => getPart(component, detail, 'top-edge');\n const getBottomEdge = component => getPart(component, detail, 'bottom-edge');\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const refresh = (slider, thumb) => {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge,\n getRightEdge,\n getTopEdge,\n getBottomEdge,\n getSpectrum\n });\n };\n const setValue = (slider, newValue) => {\n modelDetail.value.set(newValue);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n const changeValue = (slider, newValue) => {\n setValue(slider, newValue);\n const thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n const resetToMin = slider => {\n model.setToMin(slider, detail);\n };\n const resetToMax = slider => {\n model.setToMax(slider, detail);\n };\n const choose = slider => {\n const fireOnChoose = () => {\n getPart(slider, detail, 'thumb').each(thumb => {\n const value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n const wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n const onDragStart = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n const onDragEnd = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: slider => {\n return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(always);\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: _ => {\n return modelDetail.value.get();\n },\n setValue\n }\n }),\n Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose } } })\n ]),\n events: derive$2([\n run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached((slider, _simulatedEvent) => {\n const getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n const spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run$1(touchstart(), onDragStart),\n run$1(touchend(), onDragEnd),\n run$1(mousedown(), onDragStart),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin,\n resetToMax,\n setValue,\n refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n const Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: (apis, slider, value) => {\n apis.setValue(slider, value);\n },\n resetToMin: (apis, slider) => {\n apis.resetToMin(slider);\n },\n resetToMax: (apis, slider) => {\n apis.resetToMax(slider);\n },\n refresh: (apis, slider) => {\n apis.refresh(slider);\n }\n }\n });\n\n const fieldsUpdate = generate$6('rgb-hex-update');\n const sliderUpdate = generate$6('slider-update');\n const paletteUpdate = generate$6('palette-update');\n\n const sliderFactory = (translate, getClass) => {\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: { role: 'presentation' }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1(0)\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: (slider, _thumb, value) => {\n emitWith(slider, sliderUpdate, { value });\n }\n });\n };\n\n const owner$1 = 'form';\n const schema$i = [field('formBehaviours', [Representing])];\n const getPartName$1 = name => '';\n const sketch$1 = fSpec => {\n const parts = (() => {\n const record = [];\n const field = (name, config) => {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field,\n record: constant$1(record)\n };\n })();\n const spec = fSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName$1(n)\n }));\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n const toResult = (o, e) => o.fold(() => Result.error(e), Result.value);\n const make$4 = (detail, components) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: form => {\n const resPs = getAllParts(form, detail);\n return map$1(resPs, (resPThunk, pName) => resPThunk().bind(v => {\n const opt = Composing.getCurrent(v);\n return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${ pName }': ` + element(v.element)));\n }).map(Representing.getValue));\n },\n setValue: (form, values) => {\n each(values, (newValue, key) => {\n getPart(form, detail, key).each(wrapper => {\n Composing.getCurrent(wrapper).each(field => {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: (form, key) => {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n });\n const Form = {\n getField: makeApi((apis, component, key) => apis.getField(component, key)),\n sketch: sketch$1\n };\n\n const validInput = generate$6('valid-input');\n const invalidInput = generate$6('invalid-input');\n const validatingInput = generate$6('validating-input');\n const translatePrefix = 'colorcustom.rgb.';\n const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx) => {\n const invalidation = (label, isValid) => Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: comp => {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: comp => {\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: comp => {\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: comp => {\n const value = Representing.getValue(comp);\n const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n const renderTextField = (isValid, name, label, description, data) => {\n const helptext = translate(translatePrefix + 'range');\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'label',\n attributes: { 'aria-label': description }\n },\n components: [text$1(label)]\n });\n const pField = FormField.parts.field({\n data,\n factory: Input,\n inputAttributes: {\n type: 'text',\n ...name === 'hex' ? { 'aria-live': 'polite' } : {}\n },\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid),\n Tabstopping.config({})\n ]),\n onSetValue: input => {\n if (Invalidating.isInvalid(input)) {\n const run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n const comps = [\n pLabel,\n pField\n ];\n const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n const components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components\n };\n };\n const copyRgbToHex = (form, rgba) => {\n const hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(hexField => {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n const copyRgbToForm = (form, rgb) => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n Representing.setValue(form, {\n red,\n green,\n blue\n });\n };\n const memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n const updatePreview = (anyInSystem, hex) => {\n memPreview.getOpt(anyInSystem).each(preview => {\n set$8(preview.element, 'background-color', '#' + hex.value);\n });\n };\n const factory = () => {\n const state = {\n red: Cell(Optional.some(255)),\n green: Cell(Optional.some(255)),\n blue: Cell(Optional.some(255)),\n hex: Cell(Optional.some('ffffff'))\n };\n const copyHexToRgb = (form, hex) => {\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n const get = prop => state[prop].get();\n const set = (prop, value) => {\n state[prop].set(value);\n };\n const getValueRgb = () => get('red').bind(red => get('green').bind(green => get('blue').map(blue => rgbaColour(red, green, blue, 1))));\n const setValueRgb = rgb => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n const onInvalidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n const onValidHex = (form, value) => {\n onValidHexx(form);\n const hex = hexColour(value);\n set('hex', Optional.some(value));\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n };\n const onValidRgb = (form, prop, value) => {\n const val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(rgb => {\n const hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n });\n };\n const isHexInputEvent = data => data.type === 'hex';\n const onValidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n const formPartStrings = key => ({\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n });\n const redStrings = formPartStrings('red');\n const greenStrings = formPartStrings('green');\n const blueStrings = formPartStrings('blue');\n const hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(parts => ({\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run$1(validInput, onValidInput),\n run$1(invalidInput, onInvalidInput),\n run$1(validatingInput, onInvalidInput)\n ])\n ])\n })), {\n apis: {\n updateHex: (form, hex) => {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n const rgbFormSketcher = single({\n factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: (apis, form, hex) => {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n const paletteFactory = (_translate, getClass) => {\n const spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n const thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: `
`\n }\n });\n const setColour = (canvas, rgba) => {\n const {width, height} = canvas;\n const ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n const grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n const grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n const setPaletteHue = (slider, hue) => {\n const canvas = slider.components()[0].element.dom;\n const hsv = hsvColour(hue, 100, 100);\n const rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n const setPaletteThumb = (slider, hex) => {\n const hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n };\n const factory = _detail => {\n const getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n const onChange = (slider, _thumb, value) => {\n emitWith(slider, paletteUpdate, { value });\n };\n const onInit = (_slider, _thumb, spectrum, _value) => {\n setColour(spectrum.element.dom, toString(red));\n };\n const sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange,\n onInit,\n sliderBehaviours\n });\n };\n const saturationBrightnessPaletteSketcher = single({\n factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: (_apis, slider, hue) => {\n setPaletteHue(slider, hue);\n },\n setThumb: (_apis, slider, hex) => {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n const makeFactory = (translate, getClass) => {\n const factory = detail => {\n const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n const sbPalette = paletteFactory(translate, getClass);\n const hueSliderToDegrees = hue => (100 - hue) / 100 * 360;\n const hueDegreesToSlider = hue => 100 - hue / 360 * 100;\n const state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n const memSlider = record(sliderFactory(translate, getClass));\n const memPalette = record(sbPalette.sketch({}));\n const memRgb = record(rgbForm.sketch({}));\n const updatePalette = (anyInSystem, _hex, hue) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setHue(palette, hue);\n });\n };\n const updateFields = (anyInSystem, hex) => {\n memRgb.getOpt(anyInSystem).each(form => {\n rgbForm.updateHex(form, hex);\n });\n };\n const updateSlider = (anyInSystem, _hex, hue) => {\n memSlider.getOpt(anyInSystem).each(slider => {\n Slider.setValue(slider, hueDegreesToSlider(hue));\n });\n };\n const updatePaletteThumb = (anyInSystem, hex) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setThumb(palette, hex);\n });\n };\n const updateState = (hex, hue) => {\n const rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n const runUpdates = (anyInSystem, hex, hue, updates) => {\n updateState(hex, hue);\n each$1(updates, update => {\n update(anyInSystem, hex, hue);\n });\n };\n const onPaletteUpdate = () => {\n const updates = [updateFields];\n return (form, simulatedEvent) => {\n const value = simulatedEvent.event.value;\n const oldHue = state.paletteHue.get();\n const newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n const onSliderUpdate = () => {\n const updates = [\n updatePalette,\n updateFields\n ];\n return (form, simulatedEvent) => {\n const hue = hueSliderToDegrees(simulatedEvent.event.value);\n const oldRgb = state.paletteRgba.get();\n const oldHsv = fromRgb(oldRgb);\n const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n const onFieldsUpdate = () => {\n const updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return (form, simulatedEvent) => {\n const hex = simulatedEvent.event.hex;\n const hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run$1(fieldsUpdate, onFieldsUpdate()),\n run$1(paletteUpdate, onPaletteUpdate()),\n run$1(sliderUpdate, onSliderUpdate())\n ]),\n Composing.config({ find: comp => memRgb.getOpt(comp) }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n const colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory\n });\n return colourPickerSketcher;\n };\n\n const self = () => Composing.config({ find: Optional.some });\n const memento$1 = mem => Composing.config({ find: mem.getOpt });\n const childAt = index => Composing.config({ find: comp => child$2(comp.element, index).bind(element => comp.getSystem().getByDom(element).toOptional()) });\n const ComposingConfigs = {\n self,\n memento: memento$1,\n childAt\n };\n\n const processors = objOf([\n defaulted('preprocess', identity),\n defaulted('postprocess', identity)\n ]);\n const memento = (mem, rawProcessors) => {\n const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const other = mem.get(comp);\n const rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: (comp, rawValue) => {\n const newValue = ps.preprocess(rawValue);\n const other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n const withComp = (optInitialValue, getter, setter) => Representing.config({\n store: {\n mode: 'manual',\n ...optInitialValue.map(initialValue => ({ initialValue })).getOr({}),\n getValue: getter,\n setValue: setter\n }\n });\n const withElement = (initialValue, getter, setter) => withComp(initialValue, c => getter(c.element), (c, v) => setter(c.element, v));\n const domValue = optInitialValue => withElement(optInitialValue, get$6, set$5);\n const domHtml = optInitialValue => withElement(optInitialValue, get$9, set$6);\n const memory = initialValue => Representing.config({\n store: {\n mode: 'memory',\n initialValue\n }\n });\n const RepresentingConfigs = {\n memento,\n withElement,\n withComp,\n domValue,\n domHtml,\n memory\n };\n\n const english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red component',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green component',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue component',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n const translate$1 = providerBackstage => key => {\n return providerBackstage.translate(english[key]);\n };\n const renderColorPicker = (_spec, providerBackstage, initialData) => {\n const getClass = key => 'tox-' + key;\n const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass);\n const onValidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n const onInvalidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n const memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex,\n onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n RepresentingConfigs.withComp(initialData, comp => {\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n const optHex = optRgbForm.bind(rgbForm => {\n const formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(hex => '#' + hex).getOr('');\n }, (comp, newValue) => {\n const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n const valOpt = Optional.from(pattern.exec(newValue)).bind(matches => get$h(matches, 1));\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(() => {\n console.log('Can not find form');\n }, rgbForm => {\n Representing.setValue(rgbForm, { hex: valOpt.getOr('') });\n Form.getField(rgbForm, 'hex').each(hexField => {\n emit(hexField, input());\n });\n });\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n const isOldCustomEditor = spec => has$2(spec, 'init');\n const renderCustomEditor = spec => {\n const editorApi = value$2();\n const memReplaced = record({ dom: { tag: spec.tag } });\n const initialValue = value$2();\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(component => {\n memReplaced.getOpt(component).each(ta => {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then(init => init(ta.element.dom, spec.settings))).then(ea => {\n initialValue.on(cvalue => {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(ea);\n });\n });\n })]),\n RepresentingConfigs.withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), ed => ed.getValue()), (component, value) => {\n editorApi.get().fold(() => initialValue.set(value), ed => ed.setValue(value));\n }),\n ComposingConfigs.self()\n ]),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const filterByExtension = (files, providersBackstage) => {\n const allowedImageFileTypes = global$1.explode(providersBackstage.getOption('images_file_types'));\n const isFileInAllowedTypes = file => exists(allowedImageFileTypes, type => endsWith(file.name.toLowerCase(), `.${ type.toLowerCase() }`));\n return filter$2(from(files), isFileInAllowedTypes);\n };\n const renderDropZone = (spec, providersBackstage, initialData) => {\n const stopper = (_, se) => {\n se.stop();\n };\n const sequence = actions => (comp, se) => {\n each$1(actions, a => {\n a(comp, se);\n });\n };\n const onDrop = (comp, se) => {\n var _a;\n if (!Disabling.isDisabled(comp)) {\n const transferEvent = se.event.raw;\n handleFiles(comp, (_a = transferEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.files);\n }\n };\n const onSelect = (component, simulatedEvent) => {\n const input = simulatedEvent.event.raw.target;\n handleFiles(component, input.files);\n };\n const handleFiles = (component, files) => {\n if (files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n }\n };\n const memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n const renderField = s => ({\n uid: s.uid,\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n RepresentingConfigs.memory(initialData.getOr([])),\n ComposingConfigs.self(),\n Disabling.config({}),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run$1('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragover', stopper),\n run$1('drop', sequence([\n stopper,\n onDrop\n ])),\n run$1(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: { tag: 'p' },\n components: [text$1(providersBackstage.translate('Drop an image here'))]\n },\n Button.sketch({\n dom: {\n tag: 'button',\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [\n text$1(providersBackstage.translate('Browse for an image')),\n memInput.asSpec()\n ],\n action: comp => {\n const inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n })\n ]\n }]\n });\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const pField = FormField.parts.field({ factory: { sketch: renderField } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n const renderGrid = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n `tox-form__grid--${ spec.columns }col`\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const beforeObject = generate$6('alloy-fake-before-tabstop');\n const afterObject = generate$6('alloy-fake-after-tabstop');\n const craftWithClasses = classes => {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n const craft = spec => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-navobj']\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n const triggerTab = (placeholder, shiftKey) => {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey\n }\n });\n };\n const onFocus = (container, targetComp) => {\n const target = targetComp.element;\n if (has(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n const isPseudoStop = element => {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n const getDynamicSource = initialData => {\n const cachedValue = Cell(initialData.getOr(''));\n return {\n getValue: _frameComponent => cachedValue.get(),\n setValue: (frameComponent, html) => {\n if (cachedValue.get() !== html) {\n set$9(frameComponent.element, 'srcdoc', html);\n }\n cachedValue.set(html);\n }\n };\n };\n const renderIFrame = (spec, providersBackstage, initialData) => {\n const isSandbox = spec.sandboxed;\n const isTransparent = spec.transparent;\n const baseClass = 'tox-dialog__iframe';\n const attributes = {\n ...spec.label.map(title => ({ title })).getOr({}),\n ...initialData.map(html => ({ srcdoc: html })).getOr({}),\n ...isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {}\n };\n const sourcing = getDynamicSource(initialData);\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const factory = newSpec => craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes,\n classes: isTransparent ? [baseClass] : [\n baseClass,\n `${ baseClass }--opaque`\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(initialData, sourcing.getValue, sourcing.setValue)\n ])\n });\n const pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n const image = image => new Promise((resolve, reject) => {\n const loaded = () => {\n destroy();\n resolve(image);\n };\n const listeners = [\n bind(image, 'load', loaded),\n bind(image, 'error', () => {\n destroy();\n reject('Unable to load data from image: ' + image.dom.src);\n })\n ];\n const destroy = () => each$1(listeners, l => l.unbind());\n if (image.dom.complete) {\n loaded();\n }\n });\n\n const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n const width = imageWidth * zoom;\n const height = imageHeight * zoom;\n const left = Math.max(0, panelWidth / 2 - width / 2);\n const top = Math.max(0, panelHeight / 2 - height / 2);\n return {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px'\n };\n };\n const zoomToFit = (panel, width, height) => {\n const panelW = get$c(panel);\n const panelH = get$d(panel);\n return Math.min(panelW / width, panelH / height, 1);\n };\n const renderImagePreview = (spec, initialData) => {\n const cachedData = Cell(initialData.getOr({ url: '' }));\n const memImage = record({\n dom: {\n tag: 'img',\n classes: ['tox-imagepreview__image'],\n attributes: initialData.map(data => ({ src: data.url })).getOr({})\n }\n });\n const memContainer = record({\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview__container'],\n attributes: { role: 'presentation' }\n },\n components: [memImage.asSpec()]\n });\n const setValue = (frameComponent, data) => {\n const translatedData = { url: data.url };\n data.zoom.each(z => translatedData.zoom = z);\n data.cachedWidth.each(z => translatedData.cachedWidth = z);\n data.cachedHeight.each(z => translatedData.cachedHeight = z);\n cachedData.set(translatedData);\n const applyFramePositioning = () => {\n const {cachedWidth, cachedHeight, zoom} = translatedData;\n if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) {\n if (isUndefined(zoom)) {\n const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight);\n translatedData.zoom = z;\n }\n const position = calculateImagePosition(get$c(frameComponent.element), get$d(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom);\n memContainer.getOpt(frameComponent).each(container => {\n setAll(container.element, position);\n });\n }\n };\n memImage.getOpt(frameComponent).each(imageComponent => {\n const img = imageComponent.element;\n if (data.url !== get$f(img, 'src')) {\n set$9(img, 'src', data.url);\n remove$2(frameComponent.element, 'tox-imagepreview__loaded');\n }\n applyFramePositioning();\n image(img).then(img => {\n if (frameComponent.getSystem().isConnected()) {\n add$2(frameComponent.element, 'tox-imagepreview__loaded');\n translatedData.cachedWidth = img.dom.naturalWidth;\n translatedData.cachedHeight = img.dom.naturalHeight;\n applyFramePositioning();\n }\n });\n });\n };\n const styles = {};\n spec.height.each(h => styles.height = h);\n const fakeValidatedData = initialData.map(d => ({\n url: d.url,\n zoom: Optional.from(d.zoom),\n cachedWidth: Optional.from(d.cachedWidth),\n cachedHeight: Optional.from(d.cachedHeight)\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview'],\n styles,\n attributes: { role: 'presentation' }\n },\n components: [memContainer.asSpec()],\n behaviours: derive$1([\n ComposingConfigs.self(),\n RepresentingConfigs.withComp(fakeValidatedData, () => cachedData.get(), setValue)\n ])\n };\n };\n\n const renderLabel$1 = (spec, backstageShared) => {\n const label = {\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$1(backstageShared.providers.translate(spec.label))]\n };\n const comps = map$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [\n label,\n ...comps\n ],\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n RepresentingConfigs.domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n\n const internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n const onToolbarButtonExecute = info => runOnExecute$1((comp, _simulatedEvent) => {\n runWithApi(info, comp)(itemApi => {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n const toolbarButtonEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ]\n };\n\n const renderIcon = (iconName, iconsProvider, behaviours) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours\n }, iconsProvider);\n const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, [Replacing.config({})]);\n const renderLabel = (text, prefix, providersBackstage) => ({\n dom: {\n tag: 'span',\n classes: [`${ prefix }__select-label`]\n },\n components: [text$1(providersBackstage.translate(text))],\n behaviours: derive$1([Replacing.config({})])\n });\n\n const updateMenuText = generate$6('update-menu-text');\n const updateMenuIcon = generate$6('update-menu-icon');\n const renderCommonDropdown = (spec, prefix, sharedBackstage) => {\n const editorOffCell = Cell(noop);\n const optMemDisplayText = spec.text.map(text => record(renderLabel(text, prefix, sharedBackstage.providers)));\n const optMemDisplayIcon = spec.icon.map(iconName => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons)));\n const onLeftOrRightInMenu = (comp, se) => {\n const dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event.raw });\n Dropdown.close(dropdown);\n return Optional.some(true);\n };\n const role = spec.role.fold(() => ({}), role => ({ role }));\n const tooltipAttributes = spec.tooltip.fold(() => ({}), tooltip => {\n const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n return {\n 'title': translatedTooltip,\n 'aria-label': translatedTooltip\n };\n });\n const iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [`${ prefix }__select-chevron`]\n }, sharedBackstage.providers.icons);\n const memDropdown = record(Dropdown.sketch({\n ...spec.uid ? { uid: spec.uid } : {},\n ...role,\n dom: {\n tag: 'button',\n classes: [\n prefix,\n `${ prefix }--select`\n ].concat(map$2(spec.classes, c => `${ prefix }--${ c }`)),\n attributes: { ...tooltipAttributes }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec()),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n onOpen: (anchor, dropdownComp, tmenuComp) => {\n if (spec.searchable) {\n focusSearchField(tmenuComp);\n }\n },\n dropdownBehaviours: derive$1([\n ...spec.dropdownBehaviours,\n DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.isDisabled()),\n receivingConfig(),\n Unselecting.config({}),\n Replacing.config({}),\n config('dropdown-events', [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config('menubutton-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$1(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ]),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n mousedown: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ]\n }),\n sandboxBehaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n }),\n config('dropdown-sandbox-events', [\n run$1(refetchTriggerEvent, (originalSandboxComp, se) => {\n handleRefetchTrigger(originalSandboxComp);\n se.stop();\n }),\n run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => {\n handleRedirectToMenuItem(sandboxComp, se);\n se.stop();\n })\n ])\n ]),\n lazySink: sharedBackstage.getSink,\n toggleClass: `${ prefix }--active`,\n parts: {\n menu: {\n ...part(false, spec.columns, spec.presets),\n fakeFocus: spec.searchable,\n onHighlightItem: updateAriaOnHighlight,\n onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => {\n Highlighting.getHighlighted(nowActiveMenuComp).each(itemComp => {\n updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp);\n });\n },\n onDehighlightItem: updateAriaOnDehighlight\n }\n },\n fetch: comp => Future.nu(curry(spec.fetch, comp))\n }));\n return memDropdown.asSpec();\n };\n\n const isMenuItemReference = item => isString(item);\n const isSeparator$2 = item => item.type === 'separator';\n const isExpandingMenuItem = item => has$2(item, 'getSubmenuItems');\n const separator$2 = { type: 'separator' };\n const unwrapReferences = (items, menuItems) => {\n const realItems = foldl(items, (acc, item) => {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n } else if (has$2(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n const getFromExpandingItem = (item, menuItems) => {\n const submenuItems = item.getSubmenuItems();\n const rest = expand(submenuItems, menuItems);\n const newMenus = deepMerge(rest.menus, { [item.value]: rest.items });\n const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value });\n return {\n item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n const generateValueIfRequired = item => {\n const itemValue = get$g(item, 'value').getOrThunk(() => generate$6('generated-menu-item'));\n return deepMerge({ value: itemValue }, item);\n };\n const expand = (items, menuItems) => {\n const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, (acc, item) => {\n if (isExpandingMenuItem(item)) {\n const itemWithValue = generateValueIfRequired(item);\n const newData = getFromExpandingItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [\n newData.item,\n ...acc.items\n ],\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n } else {\n return {\n ...acc,\n items: [\n item,\n ...acc.items\n ]\n };\n }\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n const getSearchModeForField = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), searchSettings => ({\n searchMode: 'search-with-field',\n placeholder: searchSettings.placeholder\n }));\n };\n const getSearchModeForResults = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), _ => ({ searchMode: 'search-with-results' }));\n };\n const build = (items, itemResponse, backstage, settings) => {\n const primary = generate$6('primary-menu');\n const data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n const mainMenuSearchMode = getSearchModeForField(settings);\n const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode);\n const submenuSearchMode = getSearchModeForResults(settings);\n const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false, submenuSearchMode));\n const menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n const isSingleListItem = item => !has$2(item, 'items');\n const dataAttribute = 'data-value';\n const fetchItems = (dropdownComp, name, items, selectedValue) => map$2(items, item => {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue)\n };\n } else {\n return {\n type: 'togglemenuitem',\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: () => {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n const findItemByValue = (items, value) => findMap(items, item => {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const renderListBox = (spec, backstage, initialData) => {\n const providersBackstage = backstage.shared.providers;\n const initialItem = initialData.bind(value => findItemByValue(spec.items, value)).orThunk(() => head(spec.items).filter(isSingleListItem));\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: sketchSpec => renderCommonDropdown({\n uid: sketchSpec.uid,\n text: initialItem.map(item => item.text),\n icon: Optional.none(),\n tooltip: spec.label,\n role: Optional.none(),\n fetch: (comp, callback) => {\n const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n RepresentingConfigs.withComp(initialItem.map(item => item.value), comp => get$f(comp.element, dataAttribute), (comp, data) => {\n findItemByValue(spec.items, data).each(item => {\n set$9(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n })\n ]\n }, 'tox-listbox', backstage.shared)\n }\n });\n const listBoxWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-listboxfield']\n },\n components: [pField]\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [listBoxWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: constant$1(!spec.enabled),\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n const renderPanel = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n });\n\n const factory$f = (detail, _spec) => {\n const options = map$2(detail.options, option => ({\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n }));\n const initialValues = detail.data.map(v => wrap$1('initialValue', v)).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: select => {\n return get$6(select.element);\n },\n setValue: (select, newValue) => {\n const found = find$5(detail.options, opt => opt.value === newValue);\n if (found.isSome()) {\n set$5(select.element, newValue);\n }\n },\n ...initialValues\n }\n })\n ])\n };\n };\n const HtmlSelect = single({\n name: 'HtmlSelect',\n configFields: [\n required$1('options'),\n field('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted('selectClasses', []),\n defaulted('selectAttributes', {}),\n option$3('data')\n ],\n factory: factory$f\n });\n\n const renderSelectBox = (spec, providersBackstage, initialData) => {\n const translatedOptions = map$2(spec.items, item => ({\n text: providersBackstage.translate(item.text),\n value: item.value\n }));\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n ...initialData.map(data => ({ data })).getOr({}),\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n tag: 'div',\n classes: ['tox-selectfield__icon-js']\n }, providersBackstage.icons));\n const selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n const schema$h = constant$1([\n defaulted('field1Name', 'field1'),\n defaulted('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers$1(['lockClass']),\n defaulted('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n const coupledPart = (selfName, otherName) => required({\n factory: FormField,\n name: selfName,\n overrides: detail => {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), me => {\n getField(me, detail, otherName).each(other => {\n getPart(me, detail, 'lock').each(lock => {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n });\n });\n })])])\n };\n }\n });\n const parts$c = constant$1([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'lock',\n overrides: detail => {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n selected: detail.locked,\n toggleClass: detail.markers.lockClass,\n aria: { mode: 'pressed' }\n })])\n };\n }\n })\n ]);\n\n const factory$e = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return {\n [detail.field1Name]: Representing.getValue(parts.field1()),\n [detail.field2Name]: Representing.getValue(parts.field2())\n };\n },\n setValue: (comp, value) => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: component => getPart(component, detail, 'field1'),\n getField2: component => getPart(component, detail, 'field2'),\n getLock: component => getPart(component, detail, 'lock')\n }\n });\n const FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$e,\n apis: {\n getField1: (apis, component) => apis.getField1(component),\n getField2: (apis, component) => apis.getField2(component),\n getLock: (apis, component) => apis.getLock(component)\n }\n });\n\n const formatSize = size => {\n const unitDec = {\n '': 0,\n 'px': 0,\n 'pt': 1,\n 'mm': 1,\n 'pc': 2,\n 'ex': 2,\n 'em': 2,\n 'ch': 2,\n 'rem': 2,\n 'cm': 3,\n 'in': 4,\n '%': 4\n };\n const maxDecimal = unit => unit in unitDec ? unitDec[unit] : 1;\n let numText = size.value.toFixed(maxDecimal(size.unit));\n if (numText.indexOf('.') !== -1) {\n numText = numText.replace(/\\.?0*$/, '');\n }\n return numText + size.unit;\n };\n const parseSize = sizeText => {\n const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n const match = numPattern.exec(sizeText);\n if (match !== null) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n return Result.value({\n value,\n unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n const convertUnit = (size, unit) => {\n const inInch = {\n '': 96,\n 'px': 96,\n 'pt': 72,\n 'cm': 2.54,\n 'pc': 12,\n 'mm': 25.4,\n 'in': 1\n };\n const supported = u => has$2(inInch, u);\n if (size.unit === unit) {\n return Optional.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Optional.some(size.value);\n } else {\n return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Optional.none();\n }\n };\n const noSizeConversion = _input => Optional.none();\n const ratioSizeConversion = (scale, unit) => size => convertUnit(size, unit).map(value => ({\n value: value * scale,\n unit\n }));\n const makeRatioConverter = (currentFieldText, otherFieldText) => {\n const cValue = parseSize(currentFieldText).toOptional();\n const oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map(val => oSize.value / val).map(r => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n };\n\n const renderSizeInput = (spec, providersBackstage) => {\n let converter = noSizeConversion;\n const ratioEvent = generate$6('ratio-event');\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: { title: providersBackstage.translate(spec.label.getOr('Constrain proportions')) }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n receivingConfig(),\n Tabstopping.config({})\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components\n });\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n receivingConfig(),\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n }),\n run$1(change(), (component, _simulatedEvent) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$1(providersBackstage.translate(label))]\n });\n const widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n const heightField = FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('size-input-events2', [run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n const renderSlider = (spec, providerBackstage, initialData) => {\n const labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$1(providerBackstage.translate(spec.label))]\n });\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: spec.min,\n maxX: spec.max,\n getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([\n ComposingConfigs.self(),\n Focusing.config({})\n ]),\n onChoose: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n }\n });\n };\n\n const renderTable = (spec, providersBackstage) => {\n const renderTh = text => ({\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderHeader = header => ({\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(header, renderTh)\n }]\n });\n const renderTd = text => ({\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderTr = row => ({\n dom: { tag: 'tr' },\n components: map$2(row, renderTd)\n });\n const renderRows = rows => ({\n dom: { tag: 'tbody' },\n components: map$2(rows, renderTr)\n });\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n const renderTextField = (spec, providersBackstage) => {\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const baseInputBehaviours = [\n Disabling.config({ disabled: () => spec.disabled || providersBackstage.isDisabled() }),\n receivingConfig(),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: comp => {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(postPaste(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n const validatingBehaviours = spec.validation.map(vl => Invalidating.config({\n getRoot: input => {\n return parentElement(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: input => {\n const v = Representing.getValue(input);\n const result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n })).toArray();\n const placeholder = spec.placeholder.fold(constant$1({}), p => ({ placeholder: providersBackstage.translate(p) }));\n const inputMode = spec.inputMode.fold(constant$1({}), mode => ({ inputmode: mode }));\n const inputAttributes = {\n ...placeholder,\n ...inputMode\n };\n const pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n ...spec.data.map(data => ({ data })).getOr({}),\n inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n const extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n const extraBehaviours = [\n Disabling.config({\n disabled: () => spec.disabled || providersBackstage.isDisabled(),\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: !spec.enabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData\n }, providersBackstage);\n const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Optional.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: !spec.enabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData\n }, providersBackstage);\n\n const events$6 = (streamConfig, streamState) => {\n const streams = streamConfig.stream.streams;\n const processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(() => streamState.cancel())\n ].concat(streamConfig.cancelEvent.map(e => [run$1(e, () => streamState.cancel())]).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6\n });\n\n const first = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const throttle = _config => {\n const state = Cell(null);\n const readState = () => ({ timer: state.get() !== null ? 'set' : 'unset' });\n const setTimer = t => {\n state.set(t);\n };\n const cancel = () => {\n const t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$8({\n readState,\n setTimer,\n cancel\n });\n };\n const init$9 = spec => spec.stream.streams.state(spec);\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$9\n });\n\n const setup$c = (streamInfo, streamState) => {\n const sInfo = streamInfo.stream;\n const throttler = last(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return (component, simulatedEvent) => {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n requiredOf('stream', choose$1('mode', {\n throttle: [\n required$1('delay'),\n defaulted('stopEvent', true),\n output$1('streams', {\n setup: setup$c,\n state: throttle\n })\n ]\n })),\n defaulted('event', 'input'),\n option$3('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n const Streaming = create$3({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n const setValueFromItem = (model, input, item) => {\n const itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n const setSelectionOn = (input, f) => {\n const el = input.element;\n const value = get$6(el);\n const node = el.dom;\n if (get$f(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n const setCursorAtEnd = input => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length));\n };\n const setSelectionToEnd = (input, startOffset) => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length));\n };\n const attemptSelectOver = (model, input, item) => {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n const currentValue = Representing.getValue(input);\n const inputDisplay = model.getDisplayText(currentValue);\n const itemValue = Representing.getValue(item);\n const itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay.length);\n }) : Optional.none();\n }\n };\n\n const itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n const make$3 = (detail, components, spec, externals) => {\n const navigateList = (comp, simulatedEvent, highlighter) => {\n detail.previewing.set(false);\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(menu => {\n Highlighting.getHighlighted(menu).fold(() => {\n highlighter(menu);\n }, () => {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n const onOpenSync = sandbox => {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n };\n const focusBehaviours$1 = focusBehaviours(detail);\n const mapFetch = comp => tdata => tdata.map(data => {\n const menus = values(data.menus);\n const items = bind$3(menus, menu => filter$2(menu.items, item => item.type === 'item'));\n const repState = Representing.getState(comp);\n repState.update(map$2(items, item => item.data));\n return data;\n });\n const getActiveMenu = sandboxComp => Composing.getCurrent(sandboxComp);\n const typeaheadCustomEvents = 'typeaheadevents';\n const behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: {\n mode: 'dataset',\n getDataKey: comp => get$6(comp.element),\n getFallbackEntry: itemString => ({\n value: itemString,\n meta: {}\n }),\n setValue: (comp, data) => {\n set$5(comp.element, detail.model.getDisplayText(data));\n },\n ...detail.initialData.map(d => wrap$1('initialValue', d)).getOr({})\n }\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: (component, _simulatedEvent) => {\n const sandbox = Coupling.getCoupled(component, 'sandbox');\n const focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$6(component.element).length >= detail.minChars) {\n const previousValue = getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu).map(Representing.getValue));\n detail.previewing.set(true);\n const onOpenSync = _sandbox => {\n getActiveMenu(sandbox).each(activeMenu => {\n previousValue.fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(activeMenu);\n }\n }, pv => {\n Highlighting.highlightBy(activeMenu, item => {\n const itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(activeMenu).orThunk(() => {\n Highlighting.highlightFirst(activeMenu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightJustMenu).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n return Optional.none();\n },\n onUp: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu)).map(item => {\n emitWith(comp, itemExecute(), { item });\n return true;\n });\n } else {\n const currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Optional.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => Toggling.off(hotspot)\n });\n }\n }\n }),\n config(typeaheadCustomEvents, [\n runOnAttached(typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp));\n }),\n runOnDetached(_typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.none());\n }),\n runOnExecute$1(comp => {\n const onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }),\n run$1(itemExecute(), (comp, se) => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n setValueFromItem(detail.model, comp, se.event.item);\n emit(comp, typeaheadCancel());\n detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n Sandboxing.close(sandbox);\n setCursorAtEnd(comp);\n })\n ].concat(detail.dismissOnBlur ? [run$1(postBlur(), typeahead => {\n const sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n const eventOrder = {\n [detachedFromDom()]: [\n Representing.name(),\n Streaming.name(),\n typeaheadCustomEvents\n ],\n ...detail.eventOrder\n };\n return {\n uid: detail.uid,\n dom: dom(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: {\n ...focusBehaviours$1,\n ...augment(detail.typeaheadBehaviours, behaviours)\n },\n eventOrder\n };\n };\n\n const schema$g = constant$1([\n option$3('lazySink'),\n required$1('fetch'),\n defaulted('minChars', 5),\n defaulted('responseTime', 1000),\n onHandler('onOpen'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n defaulted('layouts', Optional.none()),\n defaulted('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted('getDisplayText', itemData => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value),\n defaulted('selectsOver', true),\n defaulted('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted('inputClasses', []),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('matchWidth', true),\n defaulted('useMinWidth', false),\n defaulted('dismissOnBlur', true),\n markers$1(['openClass']),\n option$3('initialData'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('lazyTypeaheadComp', () => Cell(Optional.none)),\n customField('previewing', () => Cell(true))\n ].concat(schema$l()).concat(sandboxFields()));\n const parts$b = constant$1([external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: detail => {\n return {\n fakeFocus: true,\n onHighlightItem: (_tmenu, menu, item) => {\n if (!detail.previewing.get()) {\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n } else {\n detail.lazyTypeaheadComp.get().each(input => {\n attemptSelectOver(detail.model, input, item).fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.dehighlight(menu, item);\n detail.previewing.set(true);\n } else {\n detail.previewing.set(false);\n }\n }, selectOverTextInInput => {\n selectOverTextInInput();\n detail.previewing.set(false);\n });\n });\n }\n },\n onExecute: (_menu, item) => {\n return detail.lazyTypeaheadComp.get().map(typeahead => {\n emitWith(typeahead, itemExecute(), { item });\n return true;\n });\n },\n onHover: (menu, item) => {\n detail.previewing.set(false);\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n const Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n const wrap = delegate => {\n const toCached = () => {\n return wrap(delegate.toCached());\n };\n const bindFuture = f => {\n return wrap(delegate.bind(resA => resA.fold(err => Future.pure(Result.error(err)), a => f(a))));\n };\n const bindResult = f => {\n return wrap(delegate.map(resA => resA.bind(f)));\n };\n const mapResult = f => {\n return wrap(delegate.map(resA => resA.map(f)));\n };\n const mapError = f => {\n return wrap(delegate.map(resA => resA.mapError(f)));\n };\n const foldResult = (whenError, whenValue) => {\n return delegate.map(res => res.fold(whenError, whenValue));\n };\n const withTimeout = (timeout, errorThunk) => {\n return wrap(Future.nu(callback => {\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(result => {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return {\n ...delegate,\n toCached,\n bindFuture,\n bindResult,\n mapResult,\n mapError,\n foldResult,\n withTimeout\n };\n };\n const nu$1 = worker => {\n return wrap(Future.nu(worker));\n };\n const value = value => {\n return wrap(Future.pure(Result.value(value)));\n };\n const error = error => {\n return wrap(Future.pure(Result.error(error)));\n };\n const fromResult = result => {\n return wrap(Future.pure(result));\n };\n const fromFuture = future => {\n return wrap(future.map(Result.value));\n };\n const fromPromise = promise => {\n return nu$1(completer => {\n promise.then(value => {\n completer(Result.value(value));\n }, error => {\n completer(Result.error(error));\n });\n });\n };\n const FutureResult = {\n nu: nu$1,\n wrap,\n pure: value,\n value,\n error,\n fromResult,\n fromFuture,\n fromPromise\n };\n\n const getMenuButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setActive: state => {\n const elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$2(elm, 'tox-tbtn--enabled');\n remove$7(elm, 'aria-pressed');\n }\n },\n isActive: () => has(component.element, 'tox-tbtn--enabled')\n });\n const renderMenuButton = (spec, prefix, backstage, role) => {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n searchable: spec.search.isSome(),\n role,\n fetch: (dropdownComp, callback) => {\n const fetchContext = { pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' };\n spec.fetch(items => {\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: spec.search\n }));\n }, fetchContext);\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [Tabstopping.config({})]\n }, prefix, backstage.shared);\n };\n const getFetch = (items, getButton, backstage) => {\n const getMenuItemAction = item => api => {\n const newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(sink => {\n getButton().getOpt(sink).each(orig => {\n focus$3(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n const getMenuItemSetup = item => api => {\n api.setActive(item.storage.get());\n };\n return success => {\n success(map$2(items, item => {\n const text = item.text.fold(() => ({}), text => ({ text }));\n return {\n type: item.type,\n active: false,\n ...text,\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n };\n }));\n };\n };\n\n const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, providersBackstage) => {\n const action = actionOpt.fold(() => ({}), action => ({ action }));\n const common = {\n buttonBehaviours: derive$1([\n DisablingConfigs.button(() => !spec.enabled || providersBackstage.isDisabled()),\n receivingConfig(),\n Tabstopping.config({}),\n config('button press', [\n preventDefault('click'),\n preventDefault('mousedown')\n ])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n },\n ...action\n };\n const domFinal = deepMerge(common, { dom });\n return deepMerge(domFinal, { components });\n };\n const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = []) => {\n const tooltipAttributes = spec.tooltip.map(tooltip => ({\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n })).getOr({});\n const dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n const icon = spec.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons));\n const components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n const calculateClassesFromButtonType = buttonType => {\n switch (buttonType) {\n case 'primary':\n return ['tox-button'];\n case 'toolbar':\n return ['tox-tbtn'];\n case 'secondary':\n default:\n return [\n 'tox-button',\n 'tox-button--secondary'\n ];\n }\n };\n const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const translatedText = providersBackstage.translate(spec.text);\n const icon = spec.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons));\n const components = [icon.getOrThunk(() => text$1(translatedText))];\n const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary');\n const baseClasses = calculateClassesFromButtonType(buttonType);\n const classes = [\n ...baseClasses,\n ...icon.isSome() ? ['tox-button--icon'] : [],\n ...spec.borderless ? ['tox-button--naked'] : [],\n ...extraClasses\n ];\n const dom = {\n tag: 'button',\n classes,\n attributes: { title: translatedText }\n };\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n const renderButton = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n const getAction = (name, buttonType) => comp => {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n console.error('Unknown button type: ', buttonType);\n }\n };\n const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu';\n const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n const renderFooterButton = (spec, buttonType, backstage) => {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n const getButton = () => memButton;\n const menuButtonSpec = spec;\n const fixedSpec = {\n ...spec,\n type: 'menubutton',\n search: Optional.none(),\n onSetup: api => {\n api.setEnabled(spec.enabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n };\n const memButton = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none()));\n return memButton.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n const action = getAction(spec.name, buttonType);\n const buttonSpec = {\n ...spec,\n borderless: false\n };\n return renderButton(buttonSpec, action, backstage.shared.providers, []);\n } else {\n console.error('Unknown footer button type: ', buttonType);\n throw new Error('Unknown footer button type');\n }\n };\n const renderDialogButton = (spec, providersBackstage) => {\n const action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field({\n factory: Button,\n ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n RepresentingConfigs.memory(''),\n ComposingConfigs.self()\n ])\n }));\n };\n\n const separator$1 = { type: 'separator' };\n const toMenuItem = target => ({\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n });\n const staticMenuItem = (title, url) => ({\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n });\n const toMenuItems = targets => map$2(targets, toMenuItem);\n const filterLinkTargets = (type, targets) => filter$2(targets, target => target.type === type);\n const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets));\n const headerTargets = linkInfo => filteredTargets('header', linkInfo.targets);\n const anchorTargets = linkInfo => filteredTargets('anchor', linkInfo.targets);\n const anchorTargetTop = linkInfo => Optional.from(linkInfo.anchorTop).map(url => staticMenuItem('', url)).toArray();\n const anchorTargetBottom = linkInfo => Optional.from(linkInfo.anchorBottom).map(url => staticMenuItem('', url)).toArray();\n const historyTargets = history => map$2(history, url => staticMenuItem(url, url));\n const joinMenuLists = items => {\n return foldl(items, (a, b) => {\n const bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n }, []);\n };\n const filterByQuery = (term, menuItems) => {\n const lowerCaseTerm = term.toLowerCase();\n return filter$2(menuItems, item => {\n var _a;\n const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n const value = (_a = item.value) !== null && _a !== void 0 ? _a : '';\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n const getItems = (fileType, input, urlBackstage) => {\n const urlInputValue = Representing.getValue(input);\n const term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n const info = urlBackstage.getLinkInformation();\n return info.fold(() => [], linkInfo => {\n const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n const errorId = generate$6('aria-invalid');\n const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n const providersBackstage = backstage.shared.providers;\n const updateHistory = component => {\n const urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n const typeaheadSpec = {\n ...initialData.map(initialData => ({ initialData })).getOr({}),\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: input => {\n const items = getItems(spec.filetype, input, urlBackstage);\n const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n return Future.pure(tdata);\n },\n getHotspot: comp => memUrlBox.getOpt(comp),\n onSetValue: (comp, _newValue) => {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1([\n ...urlBackstage.getValidationHandler().map(handler => Invalidating.config({\n getRoot: comp => parentElement(comp.element),\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: (comp, err) => {\n memInvalidIcon.getOpt(comp).each(invalidComp => {\n set$9(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: input => {\n const urlEntry = Representing.getValue(input);\n return FutureResult.nu(completer => {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, validation => {\n if (validation.status === 'invalid') {\n const err = Result.error(validation.message);\n completer(err);\n } else {\n const val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n })).toArray(),\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n Tabstopping.config({}),\n config('urlinput-events', [\n run$1(input(), comp => {\n const currentValue = get$6(comp.element);\n const trimmedValue = currentValue.trim();\n if (trimmedValue !== currentValue) {\n set$5(comp.element, trimmedValue);\n }\n if (spec.filetype === 'file') {\n emitWith(comp, formChangeEvent, { name: spec.name });\n }\n }),\n run$1(change(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(postPaste(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ])\n ]),\n eventOrder: {\n [input()]: [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ]\n },\n model: {\n getDisplayText: itemData => itemData.value,\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: (_menu, component, _entry) => {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: (typeahead, _sandbox, _item, _value) => {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n };\n const pField = FormField.parts.field({\n ...typeaheadSpec,\n factory: Typeahead\n });\n const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n const makeIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providersBackstage.icons);\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n const browseUrlEvent = generate$6('browser.url.event');\n const memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() })])\n });\n const memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.label.getOr(''),\n enabled: spec.enabled,\n primary: false,\n buttonType: Optional.none(),\n borderless: true\n }, component => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url']));\n const controlHWrapper = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n ])\n });\n const openUrlPicker = comp => {\n Composing.getCurrent(comp).each(field => {\n const componentData = Representing.getValue(field);\n const urlData = {\n fieldname: spec.name,\n ...componentData\n };\n optUrlPicker.each(picker => {\n picker(urlData).get(chosenData => {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n const renderAlertBanner = (spec, providersBackstage) => Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ spec.level }`\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon']\n },\n components: [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: get$2(spec.icon, providersBackstage.icons),\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: comp => {\n emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n });\n },\n buttonBehaviours: derive$1([addFocusableBehaviour()])\n })]\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n\n const set$1 = (element, status) => {\n element.dom.checked = status;\n };\n const get$1 = element => element.dom.checked;\n\n const renderCheckbox = (spec, providerBackstage, initialData) => {\n const toggleCheckboxHandler = comp => {\n comp.element.dom.click();\n return Optional.some(true);\n };\n const pField = FormField.parts.field({\n factory: { sketch: identity },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({ disabled: () => !spec.enabled || providerBackstage.isDisabled() }),\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withElement(initialData, get$1, set$1),\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label']\n },\n components: [text$1(providerBackstage.translate(spec.label))],\n behaviours: derive$1([Unselecting.config({})])\n });\n const makeIcon = className => {\n const iconName = className === 'checked' ? 'selected' : 'unselected';\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ]\n }, providerBackstage.icons);\n };\n const memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providerBackstage.isDisabled(),\n disableClass: 'tox-checkbox--disabled',\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n const renderHtmlPanel = spec => {\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html\n }\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n });\n }\n };\n\n const make$2 = render => {\n return (parts, spec, dialogData, backstage) => get$g(spec, 'name').fold(() => render(spec, backstage, Optional.none()), fieldName => parts.field(fieldName, render(spec, backstage, get$g(dialogData, fieldName))));\n };\n const makeIframe = render => (parts, spec, dialogData, backstage) => {\n const iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$2(render)(parts, iframeSpec, dialogData, backstage);\n };\n const factories = {\n bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n label: make$2((spec, backstage) => renderLabel$1(spec, backstage.shared)),\n iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2(renderHtmlPanel),\n imagepreview: make$2((spec, _, data) => renderImagePreview(spec, data)),\n table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n };\n const noFormParts = {\n field: (_name, spec) => spec,\n record: constant$1([])\n };\n const interpretInForm = (parts, spec, dialogData, oldBackstage) => {\n const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: childSpec => interpretParts(parts, childSpec, dialogData, newBackstage) } });\n return interpretParts(parts, spec, dialogData, newBackstage);\n };\n const interpretParts = (parts, spec, dialogData, backstage) => get$g(factories, spec.type).fold(() => {\n console.error(`Unknown factory type \"${ spec.type }\", defaulting to container: `, spec);\n return spec;\n }, factory => factory(parts, spec, dialogData, backstage));\n const interpretWithoutForm = (spec, dialogData, backstage) => interpretParts(noFormParts, spec, dialogData, backstage);\n\n const labelPrefix = 'layout-inset';\n const westEdgeX = anchor => anchor.x;\n const middleX = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY = anchor => anchor.y;\n const southY = (anchor, element) => anchor.y + anchor.height - element.height;\n const centreY = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const southwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n const southeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n const northwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n const northeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n const north = (anchor, element, bubbles) => nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n const south = (anchor, element, bubbles) => nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n const east = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n const west = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n const lookupPreserveLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return north;\n case 'northeast':\n return northeast;\n case 'northwest':\n return northwest;\n case 'south':\n return south;\n case 'southeast':\n return southeast;\n case 'southwest':\n return southwest;\n case 'east':\n return east;\n case 'west':\n return west;\n }\n };\n const preserve = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n const lookupFlippedLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return south;\n case 'northeast':\n return southeast;\n case 'northwest':\n return southwest;\n case 'south':\n return north;\n case 'southeast':\n return northeast;\n case 'southwest':\n return northwest;\n case 'east':\n return west;\n case 'west':\n return east;\n }\n };\n const flip = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n const bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [northeast],\n onLtr: () => [northwest]\n },\n overrides\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [southeast$2],\n onLtr: () => [southwest$2]\n },\n overrides\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n }\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: () => [south$2],\n onLtr: () => [south$2]\n }\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getCursorAnchor = (editor, bodyElement) => () => ({\n type: 'selection',\n root: bodyElement(),\n getSelection: () => {\n const rng = editor.selection.getRng();\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n });\n const getNodeAnchor$1 = bodyElement => element => ({\n type: 'node',\n root: bodyElement(),\n node: element\n });\n const getAnchors = (editor, lazyAnchorbar, isToolbarTop) => {\n const useFixedToolbarContainer = useFixedContainer(editor);\n const bodyElement = () => SugarElement.fromDom(editor.getBody());\n const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(bodyElement)\n };\n };\n\n const colorPicker = editor => (callback, value) => {\n const dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n const hasCustomColors = editor => () => hasCustomColors$1(editor);\n const getColors = editor => () => getColors$2(editor);\n const getColorCols = editor => () => getColorCols$1(editor);\n const ColorInputBackstage = editor => ({\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n });\n\n const isDraggableModal = editor => () => isDraggableModal$1(editor);\n const DialogBackstage = editor => ({ isDraggableModal: isDraggableModal(editor) });\n\n const HeaderBackstage = editor => {\n const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: () => mode.get() === 'top',\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n const isNestedFormat = format => hasNonNullableKey(format, 'items');\n const isFormatReference = format => hasNonNullableKey(format, 'format');\n const defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Align',\n items: [\n {\n title: 'Left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n const isNestedFormats = format => has$2(format, 'items');\n const isBlockFormat = format => has$2(format, 'block');\n const isInlineFormat = format => has$2(format, 'inline');\n const isSelectorFormat = format => has$2(format, 'selector');\n const mapFormats = userFormats => foldl(userFormats, (acc, fmt) => {\n if (isNestedFormats(fmt)) {\n const result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n const formatNameWithPrefix = `custom-${ formatName }`;\n return {\n customFormats: acc.customFormats.concat([{\n name: formatNameWithPrefix,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatNameWithPrefix,\n icon: fmt.icon\n }])\n };\n } else {\n return {\n ...acc,\n formats: acc.formats.concat(fmt)\n };\n }\n }, {\n customFormats: [],\n formats: []\n });\n const registerCustomFormats = (editor, userFormats) => {\n const result = mapFormats(userFormats);\n const registerFormats = customFormats => {\n each$1(customFormats, fmt => {\n if (!editor.formatter.has(fmt.name)) {\n editor.formatter.register(fmt.name, fmt.format);\n }\n });\n };\n if (editor.formatter) {\n registerFormats(result.customFormats);\n } else {\n editor.on('init', () => {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n const getStyleFormats = editor => getUserStyleFormats(editor).map(userFormats => {\n const registeredUserFormats = registerCustomFormats(editor, userFormats);\n return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n\n const isSeparator$1 = format => {\n const keys$1 = keys(format);\n return keys$1.length === 1 && contains$2(keys$1, 'title');\n };\n const processBasic = (item, isSelectedFor, getPreviewFor) => ({\n ...item,\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n });\n const register$a = (editor, formats, isSelectedFor, getPreviewFor) => {\n const enrichSupported = item => processBasic(item, isSelectedFor, getPreviewFor);\n const enrichMenu = item => {\n const newItems = doEnrich(item.items);\n return {\n ...item,\n type: 'submenu',\n getStyleItems: constant$1(newItems)\n };\n };\n const enrichCustom = item => {\n const formatName = isString(item.name) ? item.name : generate$6(item.title);\n const formatNameWithPrefix = `custom-${ formatName }`;\n const newItem = {\n ...item,\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n const doEnrich = items => map$2(items, item => {\n if (isNestedFormat(item)) {\n return enrichMenu(item);\n } else if (isFormatReference(item)) {\n return enrichSupported(item);\n } else if (isSeparator$1(item)) {\n return {\n ...item,\n type: 'separator'\n };\n } else {\n return enrichCustom(item);\n }\n });\n return doEnrich(formats);\n };\n\n const init$8 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const settingsFormats = Cell([]);\n const eventsFormats = Cell([]);\n const replaceSettings = Cell(false);\n editor.on('PreInit', _e => {\n const formats = getStyleFormats(editor);\n const enriched = register$a(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n });\n editor.on('addStyleModifications', e => {\n const modifications = register$a(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n });\n const getData = () => {\n const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n const fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return { getData };\n };\n\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const trim = global$1.trim;\n const hasContentEditableState = value => {\n return node => {\n if (isElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isContentEditableTrue = hasContentEditableState('true');\n const isContentEditableFalse = hasContentEditableState('false');\n const create = (type, title, url, level, attach) => ({\n type,\n title,\n url,\n level,\n attach\n });\n const isChildOfContentEditableTrue = node => {\n let tempNode = node;\n while (tempNode = tempNode.parentNode) {\n const value = tempNode.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(tempNode);\n }\n }\n return false;\n };\n const select = (selector, root) => {\n return map$2(descendants(SugarElement.fromDom(root), selector), element => {\n return element.dom;\n });\n };\n const getElementText = elm => {\n return elm.innerText || elm.textContent;\n };\n const getOrGenerateId = elm => {\n return elm.id ? elm.id : generate$6('h');\n };\n const isAnchor = elm => {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n const isValidAnchor = elm => {\n return isAnchor(elm) && isEditable(elm);\n };\n const isHeader = elm => {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n const isEditable = elm => {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n const isValidHeader = elm => {\n return isHeader(elm) && isEditable(elm);\n };\n const getLevel = elm => {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n const headerTarget = elm => {\n var _a;\n const headerId = getOrGenerateId(elm);\n const attach = () => {\n elm.id = headerId;\n };\n return create('header', (_a = getElementText(elm)) !== null && _a !== void 0 ? _a : '', '#' + headerId, getLevel(elm), attach);\n };\n const anchorTarget = elm => {\n const anchorId = elm.id || elm.name;\n const anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n const getHeaderTargets = elms => {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n const getAnchorTargets = elms => {\n return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n };\n const getTargetElements = elm => {\n const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n const hasTitle = target => {\n return trim(target.title).length > 0;\n };\n const find = elm => {\n const elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n const LinkTargets = { find };\n\n const STORAGE_KEY = 'tinymce-url-history';\n const HISTORY_LENGTH = 5;\n const isHttpUrl = url => isString(url) && /^https?/.test(url);\n const isArrayOfUrl = a => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n const isRecordOfUrlArray = r => isObject(r) && find$4(r, value => !isArrayOfUrl(value)).isNone();\n const getAllHistory = () => {\n const unparsedHistory = global$4.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n let history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n const setAllHistory = history => {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n const getHistory = fileType => {\n const history = getAllHistory();\n return get$g(history, fileType).getOr([]);\n };\n const addToHistory = (url, fileType) => {\n if (!isHttpUrl(url)) {\n return;\n }\n const history = getAllHistory();\n const items = get$g(history, fileType).getOr([]);\n const itemsWithoutUrl = filter$2(items, item => item !== url);\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n const isTruthy = value => !!value;\n const makeMap = value => map$1(global$1.makeMap(value, /[, ]/), isTruthy);\n const getPicker = editor => Optional.from(getFilePickerCallback(editor));\n const getPickerTypes = editor => {\n const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n return getPicker(editor).fold(never, _picker => optFileTypes.fold(always, types => keys(types).length > 0 ? types : false));\n };\n const getPickerSetting = (editor, filetype) => {\n const pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Optional.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n }\n };\n const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map(picker => entry => Future.nu(completer => {\n const handler = (value, meta) => {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n const r = {\n value,\n meta\n };\n completer(r);\n };\n const meta = {\n filetype,\n fieldname: entry.fieldname,\n ...Optional.from(entry.meta).getOr({})\n };\n picker.call(editor, handler, entry.value, meta);\n }));\n const getTextSetting = value => Optional.from(value).filter(isString).getOrUndefined();\n const getLinkInformation = editor => {\n if (!useTypeaheadUrls(editor)) {\n return Optional.none();\n }\n return Optional.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n const getValidationHandler = editor => Optional.from(getFilePickerValidatorHandler(editor));\n const UrlInputBackstage = editor => ({\n getHistory,\n addToHistory,\n getLinkInformation: () => getLinkInformation(editor),\n getValidationHandler: () => getValidationHandler(editor),\n getUrlPicker: filetype => getUrlPicker(editor, filetype)\n });\n\n const init$7 = (lazySink, editor, lazyAnchorbar) => {\n const contextMenuState = Cell(false);\n const toolbar = HeaderBackstage(editor);\n const backstage = {\n shared: {\n providers: {\n icons: () => editor.ui.registry.getAll().icons,\n menuItems: () => editor.ui.registry.getAll().menuItems,\n translate: global$8.translate,\n isDisabled: () => editor.mode.isReadOnly() || !editor.ui.isEnabled(),\n getOption: editor.options.get\n },\n interpreter: s => interpretWithoutForm(s, {}, backstage),\n anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n header: toolbar,\n getSink: lazySink\n },\n urlinput: UrlInputBackstage(editor),\n styles: init$8(editor),\n colorinput: ColorInputBackstage(editor),\n dialog: DialogBackstage(editor),\n isContextMenuOpen: () => contextMenuState.get(),\n setContextMenuState: state => contextMenuState.set(state)\n };\n return backstage;\n };\n\n const setup$b = (editor, mothership, uiMothership) => {\n const broadcastEvent = (name, evt) => {\n each$1([\n mothership,\n uiMothership\n ], ship => {\n ship.broadcastEvent(name, evt);\n });\n };\n const broadcastOn = (channel, message) => {\n each$1([\n mothership,\n uiMothership\n ], ship => {\n ship.broadcastOn([channel], message);\n });\n };\n const fireDismissPopups = evt => broadcastOn(dismissPopups(), { target: evt.target });\n const doc = getDocument();\n const onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n const onTouchmove = bind(doc, 'touchmove', evt => broadcastEvent(documentTouchmove(), evt));\n const onTouchend = bind(doc, 'touchend', evt => broadcastEvent(documentTouchend(), evt));\n const onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n const onMouseup = bind(doc, 'mouseup', evt => {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n const onContentClick = raw => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n const onContentMouseup = raw => {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n const onContentMousedown = () => {\n each$1(editor.editorManager.get(), loopEditor => {\n if (editor !== loopEditor) {\n loopEditor.dispatch('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n const onWindowScroll = evt => broadcastEvent(windowScroll(), fromRawEvent(evt));\n const onWindowResize = evt => {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n const onEditorResize = () => broadcastOn(repositionPopups(), {});\n const onEditorProgress = evt => {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n const onDismissPopups = event => {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n editor.on('PostRender', () => {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('mousedown', onContentMousedown);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n editor.on('DismissPopups', onDismissPopups);\n });\n editor.on('remove', () => {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('mousedown', onContentMousedown);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n editor.off('DismissPopups', onDismissPopups);\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n });\n editor.on('detach', () => {\n detachSystem(mothership);\n detachSystem(uiMothership);\n mothership.destroy();\n uiMothership.destroy();\n });\n };\n\n const parts$a = AlloyParts;\n const partType = PartType;\n\n const schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n const parts$9 = constant$1([itemsPart]);\n const name = constant$1('CustomList');\n\n const factory$d = (detail, components, _spec, _external) => {\n const setItems = (list, items) => {\n getListContainer(list).fold(() => {\n console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, container => {\n const itemComps = Replacing.contents(container);\n const numListsRequired = items.length;\n const numListsToAdd = numListsRequired - itemComps.length;\n const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n const itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, item => Replacing.remove(container, item));\n each$1(itemsToAdd, item => Replacing.append(container, item));\n const builtLists = Replacing.contents(container);\n each$1(builtLists, (item, i) => {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n const getListContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems }\n };\n };\n const CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$d,\n apis: {\n setItems: (apis, list, items) => {\n apis.setItems(list, items);\n }\n }\n });\n\n const schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n const factory$c = (detail, components, _spec, _externals) => {\n const setGroups = (toolbar, groups) => {\n getGroupContainer(toolbar).fold(() => {\n console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, container => {\n Replacing.set(container, groups);\n });\n };\n const getGroupContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: { setGroups },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$c,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n const setup$a = noop;\n const isDocked$2 = never;\n const getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$2,\n getBehaviours: getBehaviours$1\n });\n\n const getOffsetParent = element => {\n const isFixed = is$1(getRaw(element, 'position'), 'fixed');\n const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(() => {\n const marker = SugarElement.fromTag('span');\n return parent(element).bind(parent => {\n append$2(parent, marker);\n const offsetParent$1 = offsetParent(marker);\n remove$5(marker);\n return offsetParent$1;\n });\n });\n };\n const getOrigin = element => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n\n const morphAdt = Adt.generate([\n { static: [] },\n { absolute: ['positionCss'] },\n { fixed: ['positionCss'] }\n ]);\n const appear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$2(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n const disappear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$2(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n const isPartiallyVisible = (box, viewport) => box.y < viewport.bottom && box.bottom > viewport.y;\n const isTopCompletelyVisible = (box, viewport) => box.y >= viewport.y;\n const isBottomCompletelyVisible = (box, viewport) => box.bottom <= viewport.bottom;\n const isVisibleForModes = (modes, box, viewport) => forall(modes, mode => {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport);\n case 'top':\n return isTopCompletelyVisible(box, viewport);\n }\n });\n const getPrior = (elem, state) => state.getInitialPos().map(pos => bounds(pos.bounds.x, pos.bounds.y, get$c(elem), get$d(elem)));\n const storePrior = (elem, box, state) => {\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$e(elem, 'position') || 'static',\n bounds: box\n });\n };\n const revertToOriginal = (elem, box, state) => state.getInitialPos().bind(position => {\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some(morphAdt.static());\n case 'absolute':\n const offsetBox = getOffsetParent(elem).map(box$1).getOrThunk(() => box$1(body()));\n return Optional.some(morphAdt.absolute(NuPositionCss('absolute', get$g(position.style, 'left').map(_left => box.x - offsetBox.x), get$g(position.style, 'top').map(_top => box.y - offsetBox.y), get$g(position.style, 'right').map(_right => offsetBox.right - box.right), get$g(position.style, 'bottom').map(_bottom => offsetBox.bottom - box.bottom))));\n default:\n return Optional.none();\n }\n });\n const morphToOriginal = (elem, viewport, state) => getPrior(elem, state).filter(box => isVisibleForModes(state.getModes(), box, viewport)).bind(box => revertToOriginal(elem, box, state));\n const morphToFixed = (elem, viewport, state) => {\n const box = box$1(elem);\n if (!isVisibleForModes(state.getModes(), box, viewport)) {\n storePrior(elem, box, state);\n const winBox = win();\n const left = box.x - winBox.x;\n const top = viewport.y - winBox.y;\n const bottom = winBox.bottom - viewport.bottom;\n const isTop = box.y <= viewport.y;\n return Optional.some(morphAdt.fixed(NuPositionCss('fixed', Optional.some(left), isTop ? Optional.some(top) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom) : Optional.none())));\n } else {\n return Optional.none();\n }\n };\n const getMorph = (component, viewport, state) => {\n const elem = component.element;\n const isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n return isDocked ? morphToOriginal(elem, viewport, state) : morphToFixed(elem, viewport, state);\n };\n const getMorphToOriginal = (component, state) => {\n const elem = component.element;\n return getPrior(elem, state).bind(box => revertToOriginal(elem, box, state));\n };\n\n const morphToStatic = (component, config, state) => {\n state.setDocked(false);\n each$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], prop => remove$6(component.element, prop));\n config.onUndocked(component);\n };\n const morphToCoord = (component, config, state, position) => {\n const isDocked = position.position === 'fixed';\n state.setDocked(isDocked);\n applyPositionCss(component.element, position);\n const method = isDocked ? config.onDocked : config.onUndocked;\n method(component);\n };\n const updateVisibility = (component, config, state, viewport, morphToDocked = false) => {\n config.contextual.each(contextInfo => {\n contextInfo.lazyContext(component).each(box => {\n const isVisible = isPartiallyVisible(box, viewport);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$1(component.element, [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n const method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n const refreshInternal = (component, config, state) => {\n const viewport = config.lazyViewport(component);\n const isDocked = state.isDocked();\n if (isDocked) {\n updateVisibility(component, config, state, viewport);\n }\n getMorph(component, viewport, state).each(morph => {\n morph.fold(() => morphToStatic(component, config, state), position => morphToCoord(component, config, state, position), position => {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, state, position);\n });\n });\n };\n const resetInternal = (component, config, state) => {\n const elem = component.element;\n state.setDocked(false);\n getMorphToOriginal(component, state).each(morph => {\n morph.fold(() => morphToStatic(component, config, state), position => morphToCoord(component, config, state, position), noop);\n });\n state.setVisible(true);\n config.contextual.each(contextInfo => {\n remove$1(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n const refresh$4 = (component, config, state) => {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n const reset = (component, config, state) => {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n const isDocked$1 = (component, config, state) => state.isDocked();\n const setModes = (component, config, state, modes) => state.setModes(modes);\n const getModes = (component, config, state) => state.getModes();\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked$1,\n getModes: getModes,\n setModes: setModes\n });\n\n const events$5 = (dockInfo, dockState) => derive$2([\n runOnSource(transitionend(), (component, simulatedEvent) => {\n dockInfo.contextual.each(contextInfo => {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$1(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run$1(windowScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), (component, _) => {\n reset(component, dockInfo, dockState);\n })\n ]);\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$5\n });\n\n var DockingSchema = [\n optionObjOf('contextual', [\n requiredString('fadeInClass'),\n requiredString('fadeOutClass'),\n requiredString('transitionClass'),\n requiredFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', win),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n const init$6 = spec => {\n const docked = Cell(false);\n const visible = Cell(true);\n const initialBounds = value$2();\n const modes = Cell(spec.modes);\n const readState = () => `docked: ${ docked.get() }, visible: ${ visible.get() }, modes: ${ modes.get().join(',') }`;\n return nu$8({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPos: initialBounds.get,\n setInitialPos: initialBounds.set,\n clearInitialPos: initialBounds.clear,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$6\n });\n\n const Docking = create$3({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n const toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n const visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n const scrollFromBehindHeader = (e, containerHeader) => {\n const doc = owner$4(containerHeader);\n const win = defaultView(containerHeader);\n const viewHeight = win.dom.innerHeight;\n const scrollPos = get$b(doc);\n const markerElement = SugarElement.fromDom(e.elm);\n const markerPos = absolute$2(markerElement);\n const markerHeight = get$d(markerElement);\n const markerTop = markerPos.y;\n const markerBottom = markerTop + markerHeight;\n const editorHeaderPos = absolute$3(containerHeader);\n const editorHeaderHeight = get$d(containerHeader);\n const editorHeaderTop = editorHeaderPos.top;\n const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n const y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n const updateIframeContentFlow = header => {\n const getOccupiedHeight = elm => getOuter$2(elm) + (parseInt(get$e(elm, 'margin-top'), 10) || 0) + (parseInt(get$e(elm, 'margin-bottom'), 10) || 0);\n const elm = header.element;\n parentElement(elm).each(parentElem => {\n const padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n const parentWidth = get$c(parentElem);\n set$8(elm, 'width', parentWidth + 'px');\n set$8(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$6(elm, 'width');\n remove$6(parentElem, padding);\n }\n });\n };\n const updateSinkVisibility = (sinkElem, visible) => {\n if (visible) {\n remove$2(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$2(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n const updateEditorClasses = (editor, docked) => {\n const editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$2(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$2(editorContainer, editorStickyOnClass);\n }\n };\n const restoreFocus = (headerElem, focusedElem) => {\n const ownerDoc = owner$4(focusedElem);\n active$1(ownerDoc).filter(activeElm => !eq(focusedElem, activeElm)).filter(activeElm => eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$3(focusedElem));\n };\n const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind(sink => search(sink.element)));\n const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', () => {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', () => {\n lazyHeader().each(comp => {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', e => {\n lazyHeader().each(header => {\n Docking.refresh(header);\n const headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', () => {\n updateEditorClasses(editor, false);\n });\n };\n const isDocked = lazyHeader => lazyHeader().map(Docking.isDocked).getOr(false);\n const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n const getBehaviours = (editor, sharedBackstage) => {\n const focusedElm = value$2();\n const lazySink = sharedBackstage.getSink;\n const runOnSinkElement = f => {\n lazySink().each(sink => f(sink.element));\n };\n const onDockingSwitch = comp => {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(sink => sink.getSystem().broadcastOn([repositionPopups()], {}));\n };\n const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return [\n Focusing.config({}),\n Docking.config({\n contextual: {\n lazyContext: comp => {\n const headerHeight = getOuter$2(comp.element);\n const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n const box = box$1(SugarElement.fromDom(container));\n const boxHeight = box.height - headerHeight;\n const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return Optional.some(bounds(box.x, topBound, box.width, boxHeight));\n },\n onShow: () => {\n runOnSinkElement(elem => updateSinkVisibility(elem, true));\n },\n onShown: comp => {\n runOnSinkElement(elem => remove$1(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]));\n focusedElm.get().each(elem => {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: comp => {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(elem => updateSinkVisibility(elem, false));\n },\n onHidden: () => {\n runOnSinkElement(elem => remove$1(elem, [visibility.transitionClass]));\n },\n ...visibility\n },\n lazyViewport: comp => {\n const win$1 = win();\n const offset = getStickyToolbarOffset(editor);\n const top = win$1.y + (isDockedMode(comp, 'top') ? offset : 0);\n const height = win$1.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return bounds(win$1.x, top, win$1.width, height);\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n }),\n ...additionalBehaviours\n ];\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n const renderHeader = spec => {\n const editor = spec.editor;\n const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n };\n };\n\n const groupToolbarButtonSchema = objOf([\n type,\n requiredOf('items', oneOf([\n arrOfObj([\n name$1,\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n const createGroupToolbarButton = spec => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n\n const baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n defaultedOf('search', false, oneOf([\n boolean,\n objOf([optionString('placeholder')])\n ], x => {\n if (isBoolean(x)) {\n return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none();\n } else {\n return Optional.some(x);\n }\n })),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', () => noop)\n ];\n\n const MenuButtonSchema = objOf([\n type,\n ...baseMenuButtonFields\n ]);\n const createMenuButton = spec => asRaw('menubutton', MenuButtonSchema, spec);\n\n const splitButtonSchema = objOf([\n type,\n optionalTooltip,\n optionalIcon,\n optionalText,\n optionalSelect,\n fetch$1,\n onSetup,\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaultedColumns(1),\n onAction,\n onItemAction\n ]);\n const createSplitButton = spec => asRaw('SplitButton', splitButtonSchema, spec);\n\n const factory$b = (detail, spec) => {\n const setMenus = (comp, menus) => {\n const newMenus = map$2(menus, m => {\n const buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: callback => {\n callback(m.getItems());\n }\n };\n const internal = createMenuButton(buttonSpec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n const apis = {\n focus: Keying.focusIn,\n setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(component => {\n detail.onSetup(component);\n }),\n run$1(mouseover(), (comp, se) => {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(activeButton => {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(hoveredButton => {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(activeComp => {\n comp.getSystem().getByDom(hoveredButton).each(hoveredComp => {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), (comp, se) => {\n se.event.prevFocus.bind(prev => comp.getSystem().getByDom(prev).toOptional()).each(prev => {\n se.event.newFocus.bind(nu => comp.getSystem().getByDom(nu).toOptional()).each(nu => {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: comp => {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$b,\n name: 'silver.Menubar',\n configFields: [\n required$1('dom'),\n required$1('uid'),\n required$1('onEscape'),\n required$1('backstage'),\n defaulted('onSetup', noop)\n ],\n apis: {\n focus: (apis, comp) => {\n apis.focus(comp);\n },\n setMenus: (apis, comp, menus) => {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n const promotionMessage = '\\u26A1\\ufe0fUpgrade';\n const promotionLink = 'https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_source=TinyMCE&utm_medium=SPAP&utm_campaign=SPAP&utm_id=editorreferral';\n const renderPromotion = spec => {\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': promotionLink,\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-hidden': 'true'\n },\n classes: ['tox-promotion-link'],\n innerHtml: promotionMessage\n }\n }]\n };\n };\n\n const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, get => get(component));\n\n const getDimensionProperty = slideConfig => slideConfig.dimension.property;\n const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n const disableTransitions = (component, slideConfig) => {\n const root = getAnimationRoot(component, slideConfig);\n remove$1(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n const setShrunk = (component, slideConfig) => {\n remove$2(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$8(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n const setGrown = (component, slideConfig) => {\n remove$2(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$6(component.element, getDimensionProperty(slideConfig));\n };\n const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n const root = getAnimationRoot(component, slideConfig);\n remove$2(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n const doStartSmartShrink = (component, slideConfig, slideState) => {\n const size = getDimension(slideConfig, component.element);\n const shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n const doStartGrow = (component, slideConfig, slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n const wasShrinking = has(root, slideConfig.shrinkingClass);\n const beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n const fullSize = getDimension(slideConfig, component.element);\n const startPartialGrow = () => {\n set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n const startCompleteGrow = () => {\n setShrunk(component, slideConfig);\n };\n const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$2(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n const refresh$3 = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n remove$6(component.element, getDimensionProperty(slideConfig));\n const fullSize = getDimension(slideConfig, component.element);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n const grow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n const shrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n const immediateShrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState);\n }\n };\n const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n const isGrowing = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.growingClass) === true;\n };\n const isShrinking = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n const toggleGrow = (component, slideConfig, slideState) => {\n const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n const immediateGrow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n slideConfig.onGrown(component);\n }\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$3,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions,\n immediateGrow: immediateGrow\n });\n\n const exhibit = (base, slideConfig, _slideState) => {\n const expanded = slideConfig.expanded;\n return expanded ? nu$7({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$7({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n const events$4 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$6(component.element, slideConfig.dimension.property);\n }\n const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit,\n events: events$4\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option$3('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted('expanded', false),\n requiredOf('dimension', choose$1('property', {\n width: [\n output$1('property', 'width'),\n output$1('getDimension', elem => get$c(elem) + 'px')\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', elem => get$d(elem) + 'px')\n ]\n }))\n ];\n\n const init$5 = spec => {\n const state = Cell(spec.expanded);\n const readState = () => 'expanded: ' + state.get();\n return nu$8({\n isExpanded: () => state.get() === true,\n isCollapsed: () => state.get() === false,\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$5\n });\n\n const Sliding = create$3({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n const owner = 'container';\n const schema$d = [field('slotBehaviours', [])];\n const getPartName = name => '';\n const sketch = sSpec => {\n const parts = (() => {\n const record = [];\n const slot = (name, config) => {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot,\n record: constant$1(record)\n };\n })();\n const spec = sSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName(n)\n }));\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n const make$1 = (detail, components) => {\n const getSlotNames = _ => getAllPartNames(detail);\n const getSlot = (container, key) => getPart(container, detail, key);\n const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map(slot => f(slot, key)).getOr(def);\n const onSlots = f => (container, keys) => {\n each$1(keys, key => f(container, key));\n };\n const doShowing = (comp, _key) => get$f(comp.element, 'aria-hidden') !== 'true';\n const doShow = (comp, key) => {\n if (!doShowing(comp)) {\n const element = comp.element;\n remove$6(element, 'display');\n remove$7(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n const doHide = (comp, key) => {\n if (doShowing(comp)) {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n const isShowing = onSlot(doShowing, false);\n const hideSlot = onSlot(doHide);\n const hideSlots = onSlots(hideSlot);\n const hideAllSlots = container => hideSlots(container, getSlotNames());\n const showSlot = onSlot(doShow);\n const apis = {\n getSlotNames,\n getSlot,\n isShowing,\n hideSlot,\n hideAllSlots,\n showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$3(detail.slotBehaviours),\n apis\n };\n };\n const slotApis = map$1({\n getSlotNames: (apis, c) => apis.getSlotNames(c),\n getSlot: (apis, c, key) => apis.getSlot(c, key),\n isShowing: (apis, c, key) => apis.isShowing(c, key),\n hideSlot: (apis, c, key) => apis.hideSlot(c, key),\n hideAllSlots: (apis, c) => apis.hideAllSlots(c),\n showSlot: (apis, c, key) => apis.showSlot(c, key)\n }, value => makeApi(value));\n const SlotContainer = {\n ...slotApis,\n ...{ sketch }\n };\n\n const sidebarSchema = objOf([\n optionalIcon,\n optionalTooltip,\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n onSetup\n ]);\n const createSidebar = spec => asRaw('sidebar', sidebarSchema, spec);\n\n const setup$8 = editor => {\n const {sidebars} = editor.ui.registry.getAll();\n each$1(keys(sidebars), name => {\n const spec = sidebars[name];\n const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: buttonApi => {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: buttonApi => {\n buttonApi.setActive(isActive());\n const handleToggle = () => buttonApi.setActive(isActive());\n editor.on('ToggleSidebar', handleToggle);\n return () => {\n editor.off('ToggleSidebar', handleToggle);\n };\n }\n });\n });\n };\n const getApi = comp => ({ element: () => comp.element.dom });\n const makePanels = (parts, panelConfigs) => {\n const specs = map$2(keys(panelConfigs), name => {\n const spec = panelConfigs[name];\n const bridged = getOrDie(createSidebar(spec));\n return {\n name,\n getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map$2(specs, spec => {\n const editorOffCell = Cell(noop);\n return parts.slot(spec.name, {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane']\n },\n behaviours: SimpleBehaviours.unnamedEvents([\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell),\n run$1(slotVisibility(), (sidepanel, se) => {\n const data = se.event;\n const optSidePanelSpec = find$5(specs, config => config.name === data.name);\n optSidePanelSpec.each(sidePanelSpec => {\n const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n const makeSidebar = panelConfigs => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const setSidebar = (sidebar, panelConfigs, showSidebar) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n Replacing.set(slider, [makeSidebar(panelConfigs)]);\n const configKey = showSidebar === null || showSidebar === void 0 ? void 0 : showSidebar.toLowerCase();\n if (isString(configKey) && has$2(panelConfigs, configKey)) {\n Composing.getCurrent(slider).each(slotContainer => {\n SlotContainer.showSlot(slotContainer, configKey);\n Sliding.immediateGrow(slider);\n remove$6(slider.element, 'width');\n });\n }\n });\n };\n const toggleSidebar = (sidebar, name) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(slotContainer => {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n }\n });\n });\n };\n const whichSidebar = sidebar => {\n const optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(slider => {\n const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n const optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(slotContainer => find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name)));\n } else {\n return Optional.none();\n }\n });\n };\n const fixSize = generate$6('FixSizeEvent');\n const autoSize = generate$6('AutoSizeEvent');\n const renderSidebar = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'complementary' }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__slider']\n },\n components: [],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Sliding.config({\n dimension: { property: 'width' },\n closedClass: 'tox-sidebar--sliding-closed',\n openClass: 'tox-sidebar--sliding-open',\n shrinkingClass: 'tox-sidebar--sliding-shrinking',\n growingClass: 'tox-sidebar--sliding-growing',\n onShrunk: slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: slider => {\n emit(slider, autoSize);\n },\n onStartGrow: slider => {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: slider => {\n emitWith(slider, fixSize, { width: get$c(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ])\n }],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n config('sidebar-sliding-events', [\n run$1(fixSize, (comp, se) => {\n set$8(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, (comp, _se) => {\n remove$6(comp.element, 'width');\n })\n ])\n ])\n });\n\n const block = (component, config, state, getBusySpec) => {\n set$9(component.element, 'aria-busy', true);\n const root = config.getRoot(component).getOr(component);\n const blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: () => Optional.some(true),\n onShiftTab: () => Optional.some(true)\n }),\n Focusing.config({})\n ]);\n const blockSpec = getBusySpec(root, blockerBehaviours);\n const blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade(blocker));\n if (blocker.hasConfigured(Keying) && config.focus) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(() => Replacing.remove(root, blocker));\n };\n const unblock = (component, config, state) => {\n remove$7(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n const init$4 = () => {\n const blocker = destroyable();\n const blockWith = destroy => {\n blocker.set({ destroy });\n };\n return nu$8({\n readState: blocker.isSet,\n blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n const Blocking = create$3({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n const getAttrs = elem => {\n const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, (b, attr) => {\n if (attr.name === 'class') {\n return b;\n } else {\n return {\n ...b,\n [attr.name]: attr.value\n };\n }\n }, {});\n };\n const getClasses = elem => Array.prototype.slice.call(elem.dom.classList, 0);\n const fromHtml = html => {\n const elem = SugarElement.fromHtml(html);\n const children$1 = children(elem);\n const attrs = getAttrs(elem);\n const classes = getClasses(elem);\n const contents = children$1.length === 0 ? {} : { innerHtml: get$9(elem) };\n return {\n tag: name$3(elem),\n classes,\n attributes: attrs,\n ...contents\n };\n };\n\n const getBusySpec$1 = providerBackstage => (_root, _behaviours) => ({\n dom: {\n tag: 'div',\n attributes: {\n 'aria-label': providerBackstage.translate('Loading...'),\n 'tabindex': '0'\n },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml('
') }]\n });\n const focusBusyComponent = throbber => Composing.getCurrent(throbber).each(comp => focus$3(comp.element));\n const toggleEditorTabIndex = (editor, state) => {\n const tabIndexAttr = 'tabindex';\n const dataTabIndexAttr = `data-mce-${ tabIndexAttr }`;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(iframe => {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(tabIndex => set$9(iframe, dataTabIndexAttr, tabIndex));\n set$9(iframe, tabIndexAttr, -1);\n } else {\n remove$7(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(tabIndex => {\n set$9(iframe, tabIndexAttr, tabIndex);\n remove$7(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n const toggleThrobber = (editor, comp, state, providerBackstage) => {\n const element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$6(element, 'display');\n remove$7(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n const throbberFocus = Composing.getCurrent(comp).exists(busyComp => hasFocus(busyComp.element));\n Blocking.unblock(comp);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\n }\n };\n const renderThrobber = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n attributes: { 'aria-hidden': 'true' },\n classes: ['tox-throbber'],\n styles: { display: 'none' }\n },\n behaviours: derive$1([\n Replacing.config({}),\n Blocking.config({ focus: false }),\n Composing.config({ find: comp => head(comp.components()) })\n ]),\n components: []\n });\n const isFocusEvent = event => event.type === 'focusin';\n const isPasteBinTarget = event => {\n if (isFocusEvent(event)) {\n const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$1).exists(targetElm => has(targetElm, 'mce-pastebin'));\n } else {\n return false;\n }\n };\n const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n const throbberState = Cell(false);\n const timer = value$2();\n const stealFocus = e => {\n if (throbberState.get() && !isPasteBinTarget(e)) {\n e.preventDefault();\n focusBusyComponent(lazyThrobber());\n editor.editorManager.setActive(editor);\n }\n };\n if (!editor.inline) {\n editor.on('PreInit', () => {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', e => {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n const toggle = state => {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n fireAfterProgressState(editor, state);\n }\n };\n editor.on('ProgressState', e => {\n timer.on(clearTimeout);\n if (isNumber(e.time)) {\n const timerId = global$9.setEditorTimeout(editor, () => toggle(e.state), e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n const generate$1 = (xs, f) => {\n const init = {\n len: 0,\n list: []\n };\n const r = foldl(xs, (b, a) => {\n const value = f(a, b.len);\n return value.fold(constant$1(b), v => ({\n len: v.finish,\n list: b.list.concat([v])\n }));\n }, init);\n return r.list;\n };\n\n const output = (within, extra, withinWidth) => ({\n within,\n extra,\n withinWidth\n });\n const apportion = (units, total, len) => {\n const parray = generate$1(units, (unit, current) => {\n const width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width\n });\n });\n const within = filter$2(parray, unit => unit.finish <= total);\n const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n const extra = parray.slice(within.length);\n return {\n within,\n extra,\n withinWidth\n };\n };\n const toUnit = parray => map$2(parray, unit => unit.element);\n const fitLast = (within, extra, withinWidth) => {\n const fits = toUnit(within.concat(extra));\n return output(fits, [], withinWidth);\n };\n const overflow = (within, extra, overflower, withinWidth) => {\n const fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n const tryFit = (total, units, len) => {\n const divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n const partition = (total, units, len, overflower) => {\n const divide = tryFit(total, units, len).getOrThunk(() => apportion(units, total - len(overflower), len));\n const within = divide.within;\n const extra = divide.extra;\n const withinWidth = divide.withinWidth;\n if (extra.length === 1 && extra[0].width <= len(overflower)) {\n return fitLast(within, extra, withinWidth);\n } else if (extra.length >= 1) {\n return overflow(within, extra, overflower, withinWidth);\n } else {\n return fitAll(within, extra, withinWidth);\n }\n };\n\n const setGroups$1 = (toolbar, storedGroups) => {\n const bGroups = map$2(storedGroups, g => premade(g));\n Toolbar.setGroups(toolbar, bGroups);\n };\n const findFocusedComp = comps => findMap(comps, comp => search(comp.element).bind(focusedElm => comp.getSystem().getByDom(focusedElm).toOptional()));\n const refresh$2 = (toolbar, detail, setOverflow) => {\n const builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n const primary = getPartOrDie(toolbar, detail, 'primary');\n const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$8(primary.element, 'visibility', 'hidden');\n const groups = builtGroups.concat([overflowGroup]);\n const focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n const availableWidth = get$c(primary.element);\n const overflows = partition(availableWidth, detail.builtGroups.get(), comp => get$c(comp.element), overflowGroup);\n if (overflows.extra.length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups$1(primary, overflows.within);\n setOverflow(overflows.extra);\n }\n remove$6(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n const schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', () => Cell([]))\n ]);\n\n const schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', () => Cell([]))\n ].concat(schema$c()));\n const parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external({\n schema: schema$e(),\n name: 'overflow'\n }),\n external({ name: 'overflow-button' }),\n external({ name: 'overflow-group' })\n ]);\n\n const expandable = constant$1((element, available) => {\n setMax(element, Math.floor(available));\n });\n\n const schema$a = constant$1([\n markers$1(['toggledClass']),\n required$1('lazySink'),\n requiredFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n schema$y()\n ]);\n const parts$6 = constant$1([\n external({\n name: 'button',\n overrides: detail => ({\n dom: { attributes: { 'aria-haspopup': 'true' } },\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.toggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false\n })])\n })\n }),\n external({\n factory: Toolbar,\n schema: schema$e(),\n name: 'toolbar',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: comp => {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n const toggle = (button, externals) => {\n const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n if (Sandboxing.isOpen(toolbarSandbox)) {\n Sandboxing.close(toolbarSandbox);\n } else {\n Sandboxing.open(toolbarSandbox, externals.toolbar());\n }\n };\n const position = (button, toolbar, detail, layouts) => {\n const bounds = detail.getBounds.map(bounder => bounder());\n const sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n const setGroups = (button, toolbar, detail, layouts, groups) => {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n const makeSandbox = (button, spec, detail) => {\n const ariaControls = manager();\n const onOpen = (sandbox, toolbar) => {\n detail.fetch().get(groups => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaControls.link(button.element);\n Keying.focusIn(toolbar);\n });\n };\n const onClose = () => {\n Toggling.off(button);\n Focusing.focus(button);\n ariaControls.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaControls.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: () => {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: never,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n doReposition: () => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n })\n }\n })\n ])\n };\n };\n const factory$a = (detail, components, spec, externals) => ({\n ...Button.sketch({\n ...externals.button(),\n action: button => {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: button => {\n return makeSandbox(button, spec, detail);\n }\n }\n })])\n }),\n apis: {\n setGroups: (button, groups) => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: button => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: button => {\n toggle(button, externals);\n },\n getToolbar: button => {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: button => {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n const FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$a,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: (apis, button, groups) => {\n apis.setGroups(button, groups);\n },\n reposition: (apis, button) => {\n apis.reposition(button);\n },\n toggle: (apis, button) => {\n apis.toggle(button);\n },\n getToolbar: (apis, button) => apis.getToolbar(button),\n isOpen: (apis, button) => apis.isOpen(button)\n }\n });\n\n const schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n const parts$5 = constant$1([group({\n name: 'items',\n unit: 'item'\n })]);\n\n const factory$9 = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n });\n const ToolbarGroup = composite({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$9\n });\n\n const buildGroups = comps => map$2(comps, g => premade(g));\n const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n refresh$2(toolbar, detail, overflowGroups => {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n const factory$8 = (detail, components, spec, externals) => {\n const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: () => Future.nu(resolve => {\n resolve(buildGroups(detail.overflowGroups.get()));\n }),\n layouts: {\n onLtr: () => [\n southwest$2,\n southeast$2\n ],\n onRtl: () => [\n southeast$2,\n southwest$2\n ],\n onBottomLtr: () => [\n northwest$2,\n northeast$2\n ],\n onBottomRtl: () => [\n northeast$2,\n northwest$2\n ]\n },\n getBounds: spec.getOverflowBounds,\n lazySink: detail.lazySink,\n fireDismissalEventInstead: {},\n markers: { toggledClass: detail.markers.overflowToggledClass },\n parts: {\n button: externals['overflow-button'](),\n toolbar: externals.overflow()\n }\n }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: () => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [memFloatingToolbarButton.asSpec()]\n });\n }\n }\n })]),\n apis: {\n setGroups: (toolbar, groups) => {\n detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: toolbar => refresh$1(toolbar, memFloatingToolbarButton, detail),\n toggle: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n isOpen: toolbar => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n reposition: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: toolbar => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$8,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n reposition: (apis, toolbar) => {\n apis.reposition(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n }\n });\n\n const schema$8 = constant$1([\n markers$1([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$4 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'overflow',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: comp => {\n getPart(comp, detail, 'overflow-button').each(button => {\n Toggling.off(button);\n Focusing.focus(button);\n });\n detail.onClosed(comp);\n },\n onGrown: comp => {\n Keying.focusIn(comp);\n detail.onOpened(comp);\n },\n onStartGrow: comp => {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: comp => {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external({\n name: 'overflow-button',\n overrides: detail => ({\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })])\n })\n }),\n external({ name: 'overflow-group' })\n ]);\n\n const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n const toggleToolbar = (toolbar, detail) => {\n getPart(toolbar, detail, 'overflow-button').bind(() => getPart(toolbar, detail, 'overflow')).each(overf => {\n refresh(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n };\n const refresh = (toolbar, detail) => {\n getPart(toolbar, detail, 'overflow').each(overflow => {\n refresh$2(toolbar, detail, groups => {\n const builtGroups = map$2(groups, g => premade(g));\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(button => {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n const factory$7 = (detail, components, spec, externals) => {\n const toolbarToggleEvent = 'alloy.toolbar.toggle';\n const doSetGroups = (toolbar, groups) => {\n const built = map$2(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: toolbar => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [Button.sketch({\n ...externals['overflow-button'](),\n action: _button => {\n emit(toolbar, toolbarToggleEvent);\n }\n })]\n });\n }\n }\n }),\n config('toolbar-toggle-events', [run$1(toolbarToggleEvent, toolbar => {\n toggleToolbar(toolbar, detail);\n })])\n ]),\n apis: {\n setGroups: (toolbar, groups) => {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: toolbar => refresh(toolbar, detail),\n toggle: toolbar => toggleToolbar(toolbar, detail),\n isOpen: toolbar => isOpen(toolbar, detail)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$7,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n }\n });\n\n const renderToolbarGroupCommon = toolbarGroup => {\n const attributes = toolbarGroup.title.fold(() => ({}), title => ({ attributes: { title } }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__group'],\n ...attributes\n },\n components: [ToolbarGroup.parts.items({})],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-js:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n const renderToolbarGroup = toolbarGroup => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n const getToolbarBehaviours = (toolbarSpec, modeName) => {\n const onAttached = runOnAttached(component => {\n const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(toolbarSpec.providers.isDisabled),\n receivingConfig(),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n const renderMoreToolbarCommon = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Optional.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n name: 'more',\n icon: Optional.some('more-drawer'),\n enabled: true,\n tooltip: Optional.some('More...'),\n primary: false,\n buttonType: Optional.none(),\n borderless: false\n }, Optional.none(), toolbarSpec.providers)\n },\n splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n };\n };\n const renderFloatingMoreToolbar = toolbarSpec => {\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n const overflowXOffset = 4;\n const primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch({\n ...baseSpec,\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: () => {\n const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n const headerBounds = absolute$2(headerElem);\n const docElem = documentElement(headerElem);\n const docBounds = absolute$2(docElem);\n const height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: {\n ...baseSpec.parts,\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n },\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' }\n });\n };\n const renderSlidingMoreToolbar = toolbarSpec => {\n const primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n const overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch({\n ...baseSpec,\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n },\n onClosed: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n }\n });\n };\n const renderToolbar = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n });\n };\n\n const factory$6 = (detail, components, _spec) => {\n const apis = {\n getSocket: comp => {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: (comp, panelConfigs, showSidebar) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => setSidebar(sidebar, panelConfigs, showSidebar));\n },\n toggleSidebar: (comp, name) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => toggleSidebar(sidebar, name));\n },\n whichSidebar: comp => {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: comp => {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: comp => {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: (comp, groups) => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n const renderedGroups = map$2(groups, renderToolbarGroup);\n toolbar.getApis().setGroups(toolbar, renderedGroups);\n });\n },\n setToolbars: (comp, toolbars) => {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(mToolbar => {\n const renderedToolbars = map$2(toolbars, g => map$2(g, renderToolbarGroup));\n CustomList.setItems(mToolbar, renderedToolbars);\n });\n },\n refreshToolbar: comp => {\n const toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(toolbar => toolbar.getApis().refresh(toolbar));\n },\n toggleToolbarDrawer: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggle, toggle => toggle(toolbar));\n });\n },\n isToolbarDrawerToggled: comp => {\n return parts$a.getPart(comp, detail, 'toolbar').bind(toolbar => Optional.from(toolbar.getApis().isOpen).map(isOpen => isOpen(toolbar))).getOr(false);\n },\n getThrobber: comp => {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: comp => {\n const optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(() => parts$a.getPart(comp, detail, 'multiple-toolbar'));\n optToolbar.each(toolbar => {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: (comp, menus) => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: comp => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.focus(menubar);\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n behaviours: detail.behaviours\n };\n };\n const partMenubar = partType.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$1('backstage')]\n });\n const toolbarFactory = spec => {\n if (spec.type === ToolbarMode$1.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode$1.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n const partMultipleToolbar = partType.optional({\n factory: {\n sketch: spec => CustomList.sketch({\n uid: spec.uid,\n dom: spec.dom,\n listBehaviours: derive$1([Keying.config({\n mode: 'acyclic',\n selector: '.tox-toolbar'\n })]),\n makeItem: () => renderToolbar({\n type: spec.type,\n uid: generate$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n }\n }),\n setupItem: (_mToolbar, tc, data, _index) => {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n })\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n const partToolbar = partType.optional({\n factory: {\n sketch: spec => {\n const renderer = toolbarFactory(spec);\n const toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n },\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape'),\n required$1('getSink')\n ]\n });\n const partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n const partPromotion = partType.optional({\n factory: { sketch: renderPromotion },\n name: 'promotion',\n schema: [required$1('dom')]\n });\n const partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n const partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n const partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\n });\n var OuterContainer = composite({\n name: 'OuterContainer',\n factory: factory$6,\n configFields: [\n required$1('dom'),\n required$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partPromotion,\n partThrobber\n ],\n apis: {\n getSocket: (apis, comp) => {\n return apis.getSocket(comp);\n },\n setSidebar: (apis, comp, panelConfigs, showSidebar) => {\n apis.setSidebar(comp, panelConfigs, showSidebar);\n },\n toggleSidebar: (apis, comp, name) => {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: (apis, comp) => {\n return apis.whichSidebar(comp);\n },\n getHeader: (apis, comp) => {\n return apis.getHeader(comp);\n },\n getToolbar: (apis, comp) => {\n return apis.getToolbar(comp);\n },\n setToolbar: (apis, comp, groups) => {\n apis.setToolbar(comp, groups);\n },\n setToolbars: (apis, comp, toolbars) => {\n apis.setToolbars(comp, toolbars);\n },\n refreshToolbar: (apis, comp) => {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: (apis, comp) => {\n apis.toggleToolbarDrawer(comp);\n },\n isToolbarDrawerToggled: (apis, comp) => {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: (apis, comp) => {\n return apis.getThrobber(comp);\n },\n setMenubar: (apis, comp, menus) => {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: (apis, comp) => {\n apis.focusMenubar(comp);\n },\n focusToolbar: (apis, comp) => {\n apis.focusToolbar(comp);\n }\n }\n });\n\n const defaultMenubar = 'file edit view insert format tools table help';\n const defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | export print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code wordcount'\n },\n table: {\n title: 'Table',\n items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n },\n help: {\n title: 'Help',\n items: 'help'\n }\n };\n const make = (menu, registry, editor) => {\n const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: () => bind$3(menu.items, i => {\n const itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, removedMenuItem => removedMenuItem === itemName)) {\n return [];\n } else if (itemName === 'separator' || itemName === '|') {\n return [{ type: 'separator' }];\n } else if (registry.menuItems[itemName]) {\n return [registry.menuItems[itemName]];\n } else {\n return [];\n }\n })\n };\n };\n const parseItemsString = items => {\n return items.split(' ');\n };\n const identifyMenus = (editor, registry) => {\n const rawMenuData = {\n ...defaultMenus,\n ...registry.menus\n };\n const userDefinedMenus = keys(registry.menus).length > 0;\n const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n const validMenus = filter$2(menubar, menuName => {\n const isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$g(registry.menus, menuName).exists(menu => has$2(menu, 'items'));\n } else {\n return isDefaultMenu;\n }\n });\n const menus = map$2(validMenus, menuName => {\n const menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(menus, menu => {\n const isNotSeparator = item => isString(item) || item.type !== 'separator';\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n const fireSkinLoaded = editor => {\n const done = () => {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return () => {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n\n const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl));\n return styleSheetLoader.load(stylesheetUrl);\n };\n const loadUiSkins = (editor, skinUrl) => {\n const skinUiCss = skinUrl + '/skin.min.css';\n return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n };\n const loadShadowDomUiSkins = (editor, skinUrl) => {\n const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (isInShadowRoot$1) {\n const shadowDomSkinCss = skinUrl + '/skin.shadowdom.min.css';\n return loadStylesheet(editor, shadowDomSkinCss, global$7.DOM.styleSheetLoader);\n } else {\n return Promise.resolve();\n }\n };\n const loadSkin = (isInline, editor) => {\n const skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (!isSkinDisabled(editor) && isString(skinUrl)) {\n Promise.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n } else {\n fireSkinLoaded(editor)();\n }\n };\n const iframe = curry(loadSkin, false);\n const inline = curry(loadSkin, true);\n\n const onSetupFormatToggle = (editor, name) => api => {\n const boundCallback = unbindable();\n const init = () => {\n api.setActive(editor.formatter.match(name));\n const binding = editor.formatter.formatChanged(name, api.setActive);\n boundCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n boundCallback.clear();\n };\n };\n const onSetupEvent = (editor, event, f) => api => {\n const handleEvent = () => f(api);\n const init = () => {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n const onActionToggleFormat$1 = editor => rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n\n const generateSelectItems = (_editor, backstage, spec) => {\n const generateItem = (rawItem, response, invalid, value) => {\n const translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Optional.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n const items = bind$3(rawItem.getStyleItems(), si => validate(si, response, value));\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n enabled: items.length > 0,\n getSubmenuItems: () => bind$3(rawItem.getStyleItems(), si => validate(si, response, value))\n });\n }\n } else {\n return Optional.some({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n enabled: !invalid,\n onAction: spec.onAction(rawItem),\n ...rawItem.getStylePreview().fold(() => ({}), preview => ({ meta: { style: preview } }))\n });\n }\n };\n const validate = (item, response, value) => {\n const invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n const validateItems = preItems => {\n const value = spec.getCurrentValue();\n const response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, item => validate(item, response, value));\n };\n const getFetch = (backstage, getStyleItems) => (comp, callback) => {\n const preItems = getStyleItems();\n const items = validateItems(preItems);\n const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n callback(menu);\n };\n return {\n validateItems,\n getFetch\n };\n };\n const createMenuItems = (editor, backstage, spec) => {\n const dataset = spec.dataset;\n const getStyleItems = dataset.type === 'basic' ? () => map$2(dataset.data, d => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems\n };\n };\n const createSelectButton = (editor, backstage, spec) => {\n const {items, getStyleItems} = createMenuItems(editor, backstage, spec);\n const getApi = comp => ({ getComponent: constant$1(comp) });\n const onSetup = onSetupEvent(editor, 'NodeChange', api => {\n const comp = api.getComponent();\n spec.updateText(comp);\n });\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n tooltip: Optional.from(spec.tooltip),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup,\n getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: []\n }, 'tox-tbtn', backstage.shared);\n };\n\n const process = rawFormats => map$2(rawFormats, item => {\n let title = item, format = item;\n const values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title,\n format\n };\n });\n const buildBasicStaticDataset = data => ({\n type: 'basic',\n data\n });\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n const split = (rawFormats, delimiter) => {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n const buildBasicSettingsDataset = (editor, settingName, delimiter) => {\n const rawFormats = editor.options.get(settingName);\n const data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data\n };\n };\n\n const alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n const getSpec$4 = editor => {\n const getMatchingValue = () => find$5(alignMenuItems, item => editor.formatter.match(item.format));\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = _format => Optional.none;\n const updateSelectMenuIcon = comp => {\n const match = getMatchingValue();\n const alignment = match.fold(constant$1('left'), item => item.title.toLowerCase());\n emitWith(comp, updateMenuIcon, { icon: `align-${ alignment }` });\n };\n const dataset = buildBasicStaticDataset(alignMenuItems);\n const onAction = rawItem => () => find$5(alignMenuItems, item => item.format === rawItem.format).each(item => editor.execCommand(item.command));\n return {\n tooltip: 'Align',\n text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuIcon,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor));\n const createAlignMenu = (editor, backstage) => {\n const menuItems = createMenuItems(editor, backstage, getSpec$4(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate('Align'),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const findNearest = (editor, getStyles) => {\n const styles = getStyles();\n const formats = map$2(styles, style => style.format);\n return Optional.from(editor.formatter.closest(formats)).bind(fmt => find$5(styles, data => data.format === fmt)).orThunk(() => someIf(editor.formatter.match('p'), {\n title: 'Paragraph',\n format: 'p'\n }));\n };\n\n const getSpec$3 = editor => {\n const fallbackFormat = 'Paragraph';\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n if (fmt) {\n return Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n } else {\n return Optional.none();\n }\n };\n const updateSelectMenuText = comp => {\n const detectedFormat = findNearest(editor, () => dataset.data);\n const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n emitWith(comp, updateMenuText, { text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor));\n const createBlocksMenu = (editor, backstage) => {\n const menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blocks', {\n text: 'Blocks',\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n const splitFonts = fontFamily => {\n const fonts = fontFamily.split(/\\s*,\\s*/);\n return map$2(fonts, font => font.replace(/^['\"]+|['\"]+$/g, ''));\n };\n const isSystemFontStack = fontFamily => {\n const matchesSystemStack = () => {\n const fonts = splitFonts(fontFamily.toLowerCase());\n return forall(systemStackFonts, font => fonts.indexOf(font.toLowerCase()) > -1);\n };\n return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n };\n const getSpec$2 = editor => {\n const systemFont = 'System Font';\n const getMatchingValue = () => {\n const getFirstFont = fontFamily => fontFamily ? splitFonts(fontFamily)[0] : '';\n const fontFamily = editor.queryCommandValue('FontName');\n const items = dataset.data;\n const font = fontFamily ? fontFamily.toLowerCase() : '';\n const matchOpt = find$5(items, item => {\n const format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(() => {\n return someIf(isSystemFontStack(font), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt,\n font: fontFamily\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = item => () => Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, font} = getMatchingValue();\n const text = matchOpt.fold(constant$1(font), item => item.title);\n emitWith(comp, updateMenuText, { text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor));\n const createFontFamilyMenu = (editor, backstage) => {\n const menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontfamily', {\n text: backstage.shared.providers.translate('Fonts'),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n const keywordFontSizes = {\n 'xx-small': '7pt',\n 'x-small': '8pt',\n 'small': '10pt',\n 'medium': '12pt',\n 'large': '14pt',\n 'x-large': '18pt',\n 'xx-large': '24pt'\n };\n const round = (number, precision) => {\n const factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n const toPt = (fontSize, precision) => {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$g(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n const toLegacy = fontSize => get$g(legacyFontSizes, fontSize).getOr('');\n const getSpec$1 = editor => {\n const getMatchingValue = () => {\n let matchOpt = Optional.none();\n const items = dataset.data;\n const fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n const pt = toPt(fontSize, precision);\n const legacy = toLegacy(pt);\n matchOpt = find$5(items, item => item.format === fontSize || item.format === pt || item.format === legacy);\n }\n }\n return {\n matchOpt,\n size: fontSize\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = constant$1(Optional.none);\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, size} = getMatchingValue();\n const text = matchOpt.fold(constant$1(size), match => match.title);\n emitWith(comp, updateMenuText, { text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n text: Optional.some('12pt'),\n icon: Optional.none(),\n isSelectedFor,\n getPreviewFor,\n getCurrentValue,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor));\n const createFontSizeMenu = (editor, backstage) => {\n const menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontsize', {\n text: 'Font sizes',\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const getSpec = (editor, dataset) => {\n const fallbackFormat = 'Paragraph';\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const updateSelectMenuText = comp => {\n const getFormatItems = fmt => {\n if (isNestedFormat(fmt)) {\n return bind$3(fmt.items, getFormatItems);\n } else if (isFormatReference(fmt)) {\n return [{\n title: fmt.title,\n format: fmt.format\n }];\n } else {\n return [];\n }\n };\n const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n emitWith(comp, updateMenuText, { text });\n };\n return {\n tooltip: 'Formats',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: shouldAutoHideStyleFormats(editor),\n isInvalid: item => !editor.formatter.canApply(item.format),\n dataset\n };\n };\n const createStylesButton = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n return createSelectButton(editor, backstage, getSpec(editor, dataset));\n };\n const createStylesMenu = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n const menuItems = createMenuItems(editor, backstage, getSpec(editor, dataset));\n editor.ui.registry.addNestedMenuItem('styles', {\n text: 'Formats',\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const events$3 = (reflectingConfig, reflectingState) => {\n const update = (component, data) => {\n reflectingConfig.updateState.each(updateState => {\n const newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(renderComponents => {\n const newComponents = renderComponents(data, reflectingState.get());\n const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse;\n replacer(component, newComponents);\n });\n };\n return derive$2([\n run$1(receive(), (component, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n const channel = reflectingConfig.channel;\n if (contains$2(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached((comp, _se) => {\n reflectingConfig.initialData.each(rawData => {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$3\n });\n\n const getState = (component, replaceConfig, reflectState) => reflectState;\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState\n });\n\n var ReflectingSchema = [\n required$1('channel'),\n option$3('renderComponents'),\n option$3('updateState'),\n option$3('initialData'),\n defaultedBoolean('reuseDom', true)\n ];\n\n const init$3 = () => {\n const cell = Cell(Optional.none());\n const clear = () => cell.set(Optional.none());\n const readState = () => cell.get().getOr('none');\n return {\n readState,\n get: cell.get,\n set: cell.set,\n clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$3\n });\n\n const Reflecting = create$3({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n const schema$7 = constant$1([\n required$1('toggleClass'),\n required$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n onStrictHandler('onItemExecute'),\n option$3('lazySink'),\n required$1('dom'),\n onHandler('onOpen'),\n field('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n defaulted('eventOrder', {}),\n option$3('role')\n ].concat(sandboxFields()));\n const arrowPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'arrow',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: arrow => {\n arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n },\n buttonBehaviours: derive$1([Toggling.config({\n toggleOnExecute: false,\n toggleClass: detail.toggleClass\n })])\n };\n }\n });\n const buttonPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'button',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: btn => {\n btn.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n const parts$3 = constant$1([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: detail => {\n return {\n onExecute: (tmenu, item) => {\n tmenu.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType$1()\n ]);\n\n const factory$5 = (detail, components, spec, externals) => {\n const switchToMenu = sandbox => {\n Composing.getCurrent(sandbox).each(current => {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup(detail, identity, component, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const openMenu = comp => {\n action(comp);\n return Optional.some(true);\n };\n const executeOnButton = comp => {\n const button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n const buttonEvents = {\n ...derive$2([runOnAttached((component, _simulatedEvent) => {\n const ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(descriptor => {\n const descriptorId = generate$6('aria');\n set$9(descriptor.element, 'id', descriptorId);\n set$9(component.element, 'aria-describedby', descriptorId);\n });\n })]),\n ...events$a(Optional.some(action))\n };\n const apis = {\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: hotspot => {\n const arrow = getPartOrDie(hotspot, detail, 'arrow');\n const extras = {\n onOpen: () => {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: () => {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox$1(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n const SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\n apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n });\n\n const getButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const getToggleApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map(tooltip => ({\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n })).getOr({});\n const focusButtonEvent = generate$6('focus-button');\n const renderCommonStructure = (icon, text, tooltip, receiver, behaviours, providersBackstage) => {\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons)),\n text.map(text => renderLabel(text, 'tox-tbtn', providersBackstage))\n ]),\n eventOrder: {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ]\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n receivingConfig(),\n config('common-button-display-events', [run$1(mousedown(), (button, se) => {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })])\n ].concat(receiver.map(r => Reflecting.config({\n channel: r,\n initialData: {\n icon,\n text\n },\n renderComponents: (data, _state) => componentRenderPipeline([\n data.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons)),\n data.text.map(text => renderLabel(text, 'tox-tbtn', providersBackstage))\n ])\n })).toArray()).concat(behaviours.getOr([])))\n };\n };\n const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes) => {\n const sharedBackstage = backstage.shared;\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: () => Future.nu(resolve => {\n resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n }),\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), sharedBackstage.providers),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes\n }\n }\n }\n });\n };\n const renderCommonToolbarButton = (spec, specialisation, providersBackstage) => {\n const editorOffCell = Cell(noop);\n const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), providersBackstage);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.isDisabled()),\n receivingConfig()\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n const renderToolbarButton = (spec, providersBackstage) => renderToolbarButtonWith(spec, providersBackstage, []);\n const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n const renderToolbarToggleButton = (spec, providersBackstage) => renderToolbarToggleButtonWith(spec, providersBackstage, []);\n const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n const fetchChoices = (getApi, spec, providersBackstage) => comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, classForPreset(spec.presets)).each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }))));\n const renderSplitButton = (spec, sharedBackstage) => {\n const displayChannel = generate$6('channel-update-split-dropdown-display');\n const getApi = comp => ({\n isEnabled: () => !Disabling.isDisabled(comp),\n setEnabled: state => Disabling.set(comp, !state),\n setIconFill: (id, value) => {\n descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setActive: state => {\n set$9(comp.element, 'aria-pressed', state);\n descendant(comp.element, 'span').each(button => {\n comp.getSystem().getByDom(button).each(buttonComp => Toggling.set(buttonComp, state));\n });\n },\n isActive: () => descendant(comp.element, 'span').exists(button => comp.getSystem().getByDom(button).exists(Toggling.isOn))\n });\n const editorOffCell = Cell(noop);\n const specialisation = {\n getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: {\n 'aria-pressed': false,\n ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers)\n }\n },\n onExecute: button => {\n spec.onAction(getApi(button));\n },\n onItemExecute: (_a, _b, _c) => {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n config('split-dropdown-events', [\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: {\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ]\n },\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some(displayChannel), Optional.some([Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n })]), sharedBackstage.providers)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$2('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n addFocusableBehaviour()\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n const defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styles']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor) => {\n const internal = bridgeBuilder(spec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return render(internal, backstage, editor);\n };\n const types = {\n button: renderFromBridge(createToolbarButton, (s, backstage) => renderToolbarButton(s, backstage.shared.providers)),\n togglebutton: renderFromBridge(createToggleButton, (s, backstage) => renderToolbarToggleButton(s, backstage.shared.providers)),\n menubutton: renderFromBridge(createMenuButton, (s, backstage) => renderMenuButton(s, 'tox-tbtn', backstage, Optional.none())),\n splitbutton: renderFromBridge(createSplitButton, (s, backstage) => renderSplitButton(s, backstage.shared)),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor) => {\n const buttons = editor.ui.registry.getAll().buttons;\n const identify = toolbar => identifyButtons(editor, {\n buttons,\n toolbar,\n allowToolbarGroups: false\n }, backstage, Optional.none());\n const attributes = { [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n switch (getToolbarMode(editor)) {\n case ToolbarMode$1.floating:\n return renderFloatingToolbarButton(s, backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n })\n };\n const extractFrom = (spec, backstage, editor) => get$g(types, spec.type).fold(() => {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, render => Optional.some(render(spec, backstage, editor)));\n const bespokeButtons = {\n styles: createStylesButton,\n fontsize: createFontSizeButton,\n fontfamily: createFontFamilyButton,\n blocks: createBlocksButton,\n align: createAlignButton\n };\n const removeUnusedDefaults = buttons => {\n const filteredItemGroups = map$2(defaultToolbar, group => {\n const items = filter$2(group.items, subItem => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n return {\n name: group.name,\n items\n };\n });\n return filter$2(filteredItemGroups, group => group.items.length > 0);\n };\n const convertStringToolbar = strToolbar => {\n const groupsStrings = strToolbar.split('|');\n return map$2(groupsStrings, g => ({ items: g.trim().split(' ') }));\n };\n const isToolbarGroupSettingArray = toolbar => isArrayOf(toolbar, t => has$2(t, 'name') && has$2(t, 'items'));\n const createToolbar = toolbarConfig => {\n const toolbar = toolbarConfig.toolbar;\n const buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$g(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind(ps => findMap(ps, prefix => get$g(buttons, prefix + toolbarItem.toLowerCase())))).fold(() => get$g(bespokeButtons, toolbarItem.toLowerCase()).map(r => r(editor, backstage)), spec => {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n console.warn(`Ignoring the '${ toolbarItem }' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n return Optional.none();\n } else {\n return extractFrom(spec, backstage, editor);\n }\n });\n const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => {\n const toolbarGroups = createToolbar(toolbarConfig);\n const groups = map$2(toolbarGroups, group => {\n const items = bind$3(group.items, toolbarItem => {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n items\n };\n });\n return filter$2(groups, group => group.items.length > 0);\n };\n\n const setToolbar = (editor, uiComponents, rawUiConfig, backstage) => {\n const comp = uiComponents.outerContainer;\n const toolbarConfig = rawUiConfig.toolbar;\n const toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n const toolbars = toolbarConfig.map(t => {\n const config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, backstage, Optional.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, backstage, Optional.none()));\n }\n };\n\n const detection = detect$1();\n const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n const setupEvents$1 = (editor, uiComponents) => {\n const dom = editor.dom;\n let contentWindow = editor.getWin();\n const initialDocEle = editor.getDoc().documentElement;\n const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n const resizeWindow = () => {\n const outer = lastWindowDimensions.get();\n if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n const resizeDocument = () => {\n const docEle = editor.getDoc().documentElement;\n const inner = lastDocumentDimensions.get();\n if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n const scroll = e => {\n fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n const mothership = uiComponents.uiMothership.element;\n editor.on('hide', () => {\n set$8(mothership, 'display', 'none');\n });\n editor.on('show', () => {\n remove$6(mothership, 'display');\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', () => {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n const render$1 = (editor, uiComponents, rawUiConfig, backstage, args) => {\n const lastToolbarWidth = Cell(0);\n const outerContainer = uiComponents.outerContainer;\n iframe(editor);\n const eTargetNode = SugarElement.fromDom(args.targetNode);\n const uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, uiComponents.mothership);\n attachSystem(uiRoot, uiComponents.uiMothership);\n editor.on('PostRender', () => {\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor));\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n setupEvents$1(editor, uiComponents);\n });\n const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n const limit = first(() => {\n editor.dispatch('ScrollContent');\n }, 20);\n const unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', (_ui, value) => {\n OuterContainer.toggleSidebar(outerContainer, value);\n editor.dispatch('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', () => {\n var _a;\n return (_a = OuterContainer.whichSidebar(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n const toolbarMode = getToolbarMode(editor);\n const refreshDrawer = () => {\n OuterContainer.refreshToolbar(uiComponents.outerContainer);\n };\n if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', () => {\n const width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n const api = {\n setEnabled: state => {\n broadcastReadonly(uiComponents, !state);\n },\n isEnabled: () => !Disabling.isDisabled(outerContainer)\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n const parseToInt = val => {\n const re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n const numToPx = val => isNumber(val) ? val + 'px' : val;\n const calcCappedSize = (size, minSize, maxSize) => {\n const minOverride = minSize.filter(min => size < min);\n const maxOverride = maxSize.filter(max => size > max);\n return minOverride.or(maxOverride).getOr(size);\n };\n\n const getHeight = editor => {\n const baseHeight = getHeightOption(editor);\n const minHeight = getMinHeightOption(editor);\n const maxHeight = getMaxHeightOption(editor);\n return parseToInt(baseHeight).map(height => calcCappedSize(height, minHeight, maxHeight));\n };\n const getHeightWithFallback = editor => {\n const height = getHeight(editor);\n return height.getOr(getHeightOption(editor));\n };\n const getWidth = editor => {\n const baseWidth = getWidthOption(editor);\n const minWidth = getMinWidthOption(editor);\n const maxWidth = getMaxWidthOption(editor);\n return parseToInt(baseWidth).map(width => calcCappedSize(width, minWidth, maxWidth));\n };\n const getWidthWithFallback = editor => {\n const width = getWidth(editor);\n return width.getOr(getWidthOption(editor));\n };\n\n const {ToolbarLocation, ToolbarMode} = Options;\n const InlineHeader = (editor, targetElm, uiComponents, backstage, floatContainer) => {\n const {uiMothership, outerContainer} = uiComponents;\n const DOM = global$7.DOM;\n const useFixedToolbarContainer = useFixedContainer(editor);\n const isSticky = isStickyToolbar(editor);\n const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n const headerBackstage = backstage.shared.header;\n const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n const toolbarMode = getToolbarMode(editor);\n const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n const visible = Cell(false);\n const isVisible = () => visible.get() && !editor.removed;\n const calcToolbarOffset = toolbar => isSplitToolbar ? toolbar.fold(constant$1(0), tbar => tbar.components().length > 1 ? get$d(tbar.components()[1].element) : 0) : 0;\n const calcMode = container => {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n const toolbar = OuterContainer.getToolbar(outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const toolbarHeight = get$d(container.element) - offset;\n const targetBounds = box$1(targetElm);\n const roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n const doc = documentElement(targetElm);\n const docHeight = Math.max(doc.dom.scrollHeight, get$d(doc));\n const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n const winBounds = win();\n const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n return isRoomAtBottomViewport ? 'bottom' : 'top';\n }\n }\n case ToolbarLocation.bottom:\n return 'bottom';\n case ToolbarLocation.top:\n default:\n return 'top';\n }\n };\n const setupMode = mode => {\n floatContainer.on(container => {\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$9(container.element, Attribute, verticalDir);\n });\n };\n const updateChromeWidth = () => {\n floatContainer.on(container => {\n const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n const bodyMargin = parseToInt(get$e(body(), 'margin-left')).getOr(0);\n return get$c(body()) - absolute$3(targetElm).left + bodyMargin;\n });\n set$8(container.element, 'max-width', maxWidth + 'px');\n });\n };\n const updateChromePosition = () => {\n floatContainer.on(container => {\n const toolbar = OuterContainer.getToolbar(outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const targetBounds = box$1(targetElm);\n const top = isPositionedAtTop() ? Math.max(targetBounds.y - get$d(container.element) + offset, 0) : targetBounds.bottom;\n setAll(outerContainer.element, {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x) + 'px'\n });\n });\n };\n const repositionPopups$1 = () => {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n const updateChromeUi = (resetDocking = false) => {\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(outerContainer);\n }\n if (!useFixedToolbarContainer) {\n updateChromePosition();\n }\n if (isSticky) {\n const action = resetDocking ? Docking.reset : Docking.refresh;\n floatContainer.on(action);\n }\n repositionPopups$1();\n };\n const updateMode = (updateUi = true) => {\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return;\n }\n floatContainer.on(container => {\n const currentMode = headerBackstage.getDockingMode();\n const newMode = calcMode(container);\n if (newMode !== currentMode) {\n setupMode(newMode);\n if (updateUi) {\n updateChromeUi(true);\n }\n }\n });\n };\n const show = () => {\n visible.set(true);\n set$8(outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n remove$6(uiMothership.element, 'display');\n updateMode(false);\n updateChromeUi();\n };\n const hide = () => {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$8(outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$8(uiMothership.element, 'display', 'none');\n };\n return {\n isVisible,\n isPositionedAtTop,\n show,\n hide,\n update: updateChromeUi,\n updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n const bounds = box$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds\n };\n };\n const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n const resizeContent = e => {\n const {pos, bounds} = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n const {\n pos: prevPos,\n bounds: prevBounds\n } = prevPosAndBounds.get();\n const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos,\n bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(true);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n if (!toolbarPersist) {\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n }\n editor.on('SkinLoaded ResizeWindow', () => ui.update(true));\n editor.on('NodeChange keydown', e => {\n requestAnimationFrame(() => resizeContent(e));\n });\n editor.on('ScrollWindow', () => ui.updateMode());\n const elementLoad = unbindable();\n elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', e => resizeContent(e.raw)));\n editor.on('remove', () => {\n elementLoad.clear();\n });\n };\n const render = (editor, uiComponents, rawUiConfig, backstage, args) => {\n const {mothership, uiMothership, outerContainer} = uiComponents;\n const floatContainer = value$2();\n const targetElm = SugarElement.fromDom(args.targetNode);\n const ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n const toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n const render = () => {\n if (floatContainer.isSet()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n const uiContainer = getUiContainer(editor);\n attachSystem(uiContainer, mothership);\n attachSystem(uiContainer, uiMothership);\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\n };\n editor.on('show', render);\n editor.on('hide', ui.hide);\n if (!toolbarPersist) {\n editor.on('focus', render);\n editor.on('blur', ui.hide);\n }\n editor.on('init', () => {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n const api = {\n show: render,\n hide: ui.hide,\n setEnabled: state => {\n broadcastReadonly(uiComponents, !state);\n },\n isEnabled: () => !Disabling.isDisabled(outerContainer)\n };\n return {\n editorContainer: outerContainer.element.dom,\n api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n const showContextToolbarEvent = 'contexttoolbar-show';\n const hideContextToolbarEvent = 'contexttoolbar-hide';\n\n const getFormApi = input => ({\n hide: () => emit(input, sandboxClose()),\n getValue: () => Representing.getValue(input)\n });\n const runOnExecute = (memInput, original) => run$1(internalToolbarButtonExecute, (comp, se) => {\n const input = memInput.get(comp);\n const formApi = getFormApi(input);\n original.onAction(formApi, se.event.buttonApi);\n });\n const renderContextButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToolbarButton({\n ...rest,\n type: 'button',\n onAction: noop\n }));\n return renderToolbarButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const renderContextToggleButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToggleButton({\n ...rest,\n type: 'togglebutton',\n onAction: noop\n }));\n return renderToolbarToggleButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const isToggleButton = button => button.type === 'contextformtogglebutton';\n const generateOne = (memInput, button, providersBackstage) => {\n if (isToggleButton(button)) {\n return renderContextToggleButton(memInput, button, providersBackstage);\n } else {\n return renderContextButton(memInput, button, providersBackstage);\n }\n };\n const generate = (memInput, buttons, providersBackstage) => {\n const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage)));\n const asSpecs = () => map$2(mementos, mem => mem.asSpec());\n const findPrimary = compInSystem => findMap(buttons, (button, i) => {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(mem => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n return {\n asSpecs,\n findPrimary\n };\n };\n\n const buildInitGroups = (ctx, providers) => {\n const inputAttributes = ctx.label.fold(() => ({}), label => ({ 'aria-label': label }));\n const memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: input => commands.findPrimary(input).map(primary => {\n emitExecute(primary);\n return true;\n }),\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n })])\n }));\n const commands = generate(memInput, ctx.commands, providers);\n return [\n {\n title: Optional.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Optional.none(),\n items: commands.asSpecs()\n }\n ];\n };\n const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers\n });\n const ContextForm = {\n renderContextForm,\n buildInitGroups\n };\n\n const isVerticalOverlap = (a, b, threshold = 0.01) => b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n const getRangeRect = rng => {\n const rect = rng.getBoundingClientRect();\n if (rect.height <= 0 && rect.width <= 0) {\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n return elm.filter(isElement$1).map(e => e.dom.getBoundingClientRect()).getOr(rect);\n } else {\n return rect;\n }\n };\n const getSelectionBounds = editor => {\n const rng = editor.selection.getRng();\n const rect = getRangeRect(rng);\n if (editor.inline) {\n const scroll = get$b();\n return bounds(scroll.left + rect.left, scroll.top + rect.top, rect.width, rect.height);\n } else {\n const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height);\n }\n };\n const getAnchorElementBounds = (editor, lastElement) => lastElement.filter(elem => inBody(elem) && isHTMLElement(elem)).map(absolute$2).getOrThunk(() => getSelectionBounds(editor));\n const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => {\n const x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n const right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n return {\n x,\n width: right - x\n };\n };\n const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const header = descendant(container, '.tox-editor-header').getOr(container);\n const headerBox = box$1(header);\n const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: viewportBounds.bottom\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y,\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n }\n const containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox;\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y + margin, viewportBounds.y),\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n };\n const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => {\n const viewportBounds = getBounds$3(window);\n const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n const {x, width} = getHorizontalBounds(contentAreaBox, viewportBounds, margin);\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n const isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n const {y, bottom} = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin);\n return bounds(x, y, width, bottom - y);\n }\n };\n\n const bubbleSize$1 = 12;\n const bubbleAlignments$1 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top'],\n inset: ['tox-pop--inset']\n };\n const anchorOverrides = {\n maxHeightFunction: expandable$1(),\n maxWidthFunction: expandable()\n };\n const isEntireElementSelected = (editor, elem) => {\n const rng = editor.selection.getRng();\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem);\n };\n const preservePosition = (elem, position, f) => {\n const currentPosition = getRaw(elem, 'position');\n set$8(elem, 'position', position);\n const result = f(elem);\n currentPosition.each(pos => set$8(elem, 'position', pos));\n return result;\n };\n const shouldUseInsetLayouts = position => position === 'node';\n const determineInsetLayout = (editor, contextbar, elem, data, bounds) => {\n const selectionBounds = getSelectionBounds(editor);\n const isSameAnchorElement = data.lastElement().exists(prev => eq(elem, prev));\n if (isEntireElementSelected(editor, elem)) {\n return isSameAnchorElement ? preserve : north;\n } else if (isSameAnchorElement) {\n return preservePosition(contextbar, data.getMode(), () => {\n const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar));\n return isOverlapping && !data.isReposition() ? flip : preserve;\n });\n } else {\n const yBounds = data.getMode() === 'fixed' ? bounds.y + get$b().top : bounds.y;\n const contextbarHeight = get$d(contextbar) + bubbleSize$1;\n return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n }\n };\n const getAnchorSpec$2 = (editor, mobile, data, position) => {\n const smartInsetLayout = elem => (anchor, element, bubbles, placee, bounds) => {\n const layout = determineInsetLayout(editor, placee, elem, data, bounds);\n const newAnchor = {\n ...anchor,\n y: bounds.y,\n height: bounds.height\n };\n return {\n ...layout(newAnchor, element, bubbles, placee, bounds),\n alwaysFit: true\n };\n };\n const getInsetLayouts = elem => shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n const desktopAnchorSpecLayouts = {\n onLtr: elem => [\n north$2,\n south$2,\n northeast$2,\n southeast$2,\n northwest$2,\n southwest$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n north$2,\n south$2,\n northwest$2,\n southwest$2,\n northeast$2,\n southeast$2\n ].concat(getInsetLayouts(elem))\n };\n const mobileAnchorSpecLayouts = {\n onLtr: elem => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2\n ].concat(getInsetLayouts(elem))\n };\n return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n };\n const getAnchorLayout = (editor, position, isTouch, data) => {\n if (position === 'line') {\n return {\n bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n layouts: {\n onLtr: () => [east$2],\n onRtl: () => [west$2]\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n layouts: getAnchorSpec$2(editor, isTouch, data, position),\n overrides: anchorOverrides\n };\n }\n };\n\n const matchTargetWith = (elem, candidates) => {\n const ctxs = filter$2(candidates, toolbarApi => toolbarApi.predicate(elem.dom));\n const {pass, fail} = partition$3(ctxs, t => t.type === 'contexttoolbar');\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n const filterByPositionForStartNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const doesPositionExist = value => exists(toolbars, t => t.position === value);\n const filterToolbarsByPosition = value => filter$2(toolbars, t => t.position === value);\n const hasSelectionToolbars = doesPositionExist('selection');\n const hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n const nodeToolbars = filterToolbarsByPosition('node');\n const selectionToolbars = map$2(filterToolbarsByPosition('selection'), t => ({\n ...t,\n position: 'node'\n }));\n return nodeToolbars.concat(selectionToolbars);\n } else {\n return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node');\n }\n } else {\n return filterToolbarsByPosition('line');\n }\n }\n };\n const filterByPositionForAncestorNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const findPosition = value => find$5(toolbars, t => t.position === value);\n const basePosition = findPosition('selection').orThunk(() => findPosition('node')).orThunk(() => findPosition('line')).map(t => t.position);\n return basePosition.fold(() => [], pos => filter$2(toolbars, t => t.position === pos));\n }\n };\n const matchStartNode = (elem, nodeCandidates, editorCandidates) => {\n const nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n const editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem,\n toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n const matchAncestor = (isRoot, startNode, scopes) => {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor$2(startNode, ancestorElem => {\n if (isElement$1(ancestorElem)) {\n const {contextToolbars, contextForms} = matchTargetWith(ancestorElem, scopes.inNodeScope);\n const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars\n }) : Optional.none();\n } else {\n return Optional.none();\n }\n }, isRoot);\n }\n };\n const lookup$1 = (scopes, editor) => {\n const rootElem = SugarElement.fromDom(editor.getBody());\n const isRoot = elem => eq(elem, rootElem);\n const isOutsideRoot = startNode => !isRoot(startNode) && !contains(rootElem, startNode);\n const startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes));\n };\n\n const categorise = (contextToolbars, navigate) => {\n const forms = {};\n const inNodeScope = [];\n const inEditorScope = [];\n const formNavigators = {};\n const lookupTable = {};\n const registerForm = (key, toolbarSpec) => {\n const contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(launch => {\n formNavigators['form:' + key + ''] = {\n ...toolbarSpec.launch,\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: () => {\n navigate(contextForm);\n }\n };\n });\n if (contextForm.scope === 'editor') {\n inEditorScope.push(contextForm);\n } else {\n inNodeScope.push(contextForm);\n }\n lookupTable[key] = contextForm;\n };\n const registerToolbar = (key, toolbarSpec) => {\n createContextToolbar(toolbarSpec).each(contextToolbar => {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n const keys$1 = keys(contextToolbars);\n each$1(keys$1, key => {\n const toolbarApi = contextToolbars[key];\n if (toolbarApi.type === 'contextform') {\n registerForm(key, toolbarApi);\n } else if (toolbarApi.type === 'contexttoolbar') {\n registerToolbar(key, toolbarApi);\n }\n });\n return {\n forms,\n inNodeScope,\n inEditorScope,\n lookupTable,\n formNavigators\n };\n };\n\n const forwardSlideEvent = generate$6('forward-slide');\n const backSlideEvent = generate$6('backward-slide');\n const changeSlideEvent = generate$6('change-slide-event');\n const resizingClass = 'tox-pop--resizing';\n const renderContextToolbar = spec => {\n const stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: comp => {\n stack.set([]);\n InlineView.getContent(comp).each(c => {\n remove$6(c.element, 'visibility');\n });\n remove$2(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), (comp, se) => {\n if (se.event.raw.propertyName === 'width') {\n remove$2(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, (comp, se) => {\n const elem = comp.element;\n remove$6(elem, 'width');\n const currentWidth = get$c(elem);\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n const newWidth = get$c(elem);\n set$8(elem, 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(newContents => {\n se.event.focus.bind(f => {\n focus$3(f);\n return search(elem);\n }).orThunk(() => {\n Keying.focusIn(newContents);\n return active$1(getRootNode(elem));\n });\n });\n setTimeout(() => {\n set$8(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, (comp, se) => {\n InlineView.getContent(comp).each(oldContents => {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active$1(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, (comp, _se) => {\n last$1(stack.get()).each(last => {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: comp => last$1(stack.get()).fold(() => spec.onEscape(), _ => {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n })\n })\n ]),\n lazySink: () => Result.value(spec.sink)\n });\n };\n\n const transitionClass = 'tox-pop--transition';\n const register$9 = (editor, registryContextToolbars, sink, extras) => {\n const backstage = extras.backstage;\n const sharedBackstage = backstage.shared;\n const isTouch = detect$1().deviceType.isTouch;\n const lastElement = value$2();\n const lastTrigger = value$2();\n const lastContextPosition = value$2();\n const contextbar = build$1(renderContextToolbar({\n sink,\n onEscape: () => {\n editor.focus();\n return Optional.some(true);\n }\n }));\n const getBounds = () => {\n const position = lastContextPosition.get().getOr('node');\n const margin = shouldUseInsetLayouts(position) ? 1 : 0;\n return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n };\n const canLaunchToolbar = () => {\n return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n };\n const isSameLaunchElement = elem => is$1(lift2(elem, lastElement.get(), eq), true);\n const shouldContextToolbarHide = () => {\n if (!canLaunchToolbar()) {\n return true;\n } else {\n const contextToolbarBounds = getBounds();\n const anchorBounds = is$1(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds);\n }\n };\n const close = () => {\n lastElement.clear();\n lastTrigger.clear();\n lastContextPosition.clear();\n InlineView.hide(contextbar);\n };\n const hideOrRepositionIfNecessary = () => {\n if (InlineView.isOpen(contextbar)) {\n const contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n } else {\n lastTrigger.set(0);\n InlineView.reposition(contextbar);\n }\n }\n };\n const wrapInPopDialog = toolbarSpec => ({\n dom: {\n tag: 'div',\n classes: ['tox-pop__dialog']\n },\n components: [toolbarSpec],\n behaviours: derive$1([\n Keying.config({ mode: 'acyclic' }),\n config('pop-dialog-wrap-events', [\n runOnAttached(comp => {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp));\n }),\n runOnDetached(_comp => {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n });\n const getScopes = cached(() => categorise(registryContextToolbars, toolbarApi => {\n const alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n }));\n const buildContextToolbarGroups = (allButtons, ctx) => identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras.backstage, Optional.some(['form:']));\n const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers);\n const buildToolbar = toolbars => {\n const {buttons} = editor.ui.registry.getAll();\n const scopes = getScopes();\n const allButtons = {\n ...buttons,\n ...scopes.formNavigators\n };\n const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default;\n const initGroups = flatten(map$2(toolbars, ctx => ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers)));\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: sharedBackstage.providers\n });\n };\n const getAnchor = (position, element) => {\n const anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n const anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n lastElement: lastElement.get,\n isReposition: () => is$1(lastTrigger.get(), 0),\n getMode: () => Positioning.getMode(sink)\n });\n return deepMerge(anchorage, anchorLayout);\n };\n const launchContext = (toolbarApi, elem) => {\n launchContextToolbar.cancel();\n if (!canLaunchToolbar()) {\n return;\n }\n const toolbarSpec = buildToolbar(toolbarApi);\n const position = toolbarApi[0].position;\n const anchor = getAnchor(position, elem);\n lastContextPosition.set(position);\n lastTrigger.set(1);\n const contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n if (!isSameLaunchElement(elem)) {\n remove$2(contextBarEle, transitionClass);\n Positioning.reset(sink, contextbar);\n }\n InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n anchor,\n transition: {\n classes: [transitionClass],\n mode: 'placement'\n }\n }, () => Optional.some(getBounds()));\n elem.fold(lastElement.clear, lastElement.set);\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n }\n };\n const launchContextToolbar = last(() => {\n if (!editor.hasFocus() || editor.removed) {\n return;\n }\n if (has(contextbar.element, transitionClass)) {\n launchContextToolbar.throttle();\n } else {\n const scopes = getScopes();\n lookup$1(scopes, editor).fold(close, info => {\n launchContext(info.toolbars, Optional.some(info.elem));\n });\n }\n }, 17);\n editor.on('init', () => {\n editor.on('remove', close);\n editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent', launchContextToolbar.throttle);\n editor.on(hideContextToolbarEvent, close);\n editor.on(showContextToolbarEvent, e => {\n const scopes = getScopes();\n get$g(scopes.lookupTable, e.toolbarKey).each(ctx => {\n launchContext([ctx], someIf(e.target !== editor, e.target));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n editor.on('focusout', _e => {\n global$9.setEditorTimeout(editor, () => {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', () => {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('AfterProgressState', event => {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n launchContextToolbar.throttle();\n }\n });\n editor.on('NodeChange', _e => {\n search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n });\n });\n };\n\n const register$8 = editor => {\n const alignToolbarButtons = [\n {\n name: 'alignleft',\n text: 'Align left',\n cmd: 'JustifyLeft',\n icon: 'align-left'\n },\n {\n name: 'aligncenter',\n text: 'Align center',\n cmd: 'JustifyCenter',\n icon: 'align-center'\n },\n {\n name: 'alignright',\n text: 'Align right',\n cmd: 'JustifyRight',\n icon: 'align-right'\n },\n {\n name: 'alignjustify',\n text: 'Justify',\n cmd: 'JustifyFull',\n icon: 'align-justify'\n }\n ];\n each$1(alignToolbarButtons, item => {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n icon: item.icon,\n onAction: onActionExecCommand(editor, item.cmd),\n onSetup: onSetupFormatToggle(editor, item.name)\n });\n });\n editor.ui.registry.addButton('alignnone', {\n tooltip: 'No alignment',\n icon: 'align-none',\n onAction: onActionExecCommand(editor, 'JustifyNone')\n });\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n const normalise = (input, accepted) => parse(input, accepted).map(({value, unit}) => value + unit);\n\n const registerController = (editor, spec) => {\n const getMenuItems = () => {\n const options = spec.getOptions(editor);\n const initial = spec.getCurrent(editor).map(spec.hash);\n const current = value$2();\n return map$2(options, value => ({\n type: 'togglemenuitem',\n text: spec.display(value),\n onSetup: api => {\n const setActive = active => {\n if (active) {\n current.on(oldApi => oldApi.setActive(false));\n current.set(api);\n }\n api.setActive(active);\n };\n setActive(is$1(initial, spec.hash(value)));\n const unbindWatcher = spec.watcher(editor, value, setActive);\n return () => {\n current.clear();\n unbindWatcher();\n };\n },\n onAction: () => spec.setCurrent(editor, value)\n }));\n };\n editor.ui.registry.addMenuButton(spec.name, {\n tooltip: spec.text,\n icon: spec.icon,\n fetch: callback => callback(getMenuItems()),\n onSetup: spec.onToolbarSetup\n });\n editor.ui.registry.addNestedMenuItem(spec.name, {\n type: 'nestedmenuitem',\n text: spec.text,\n getSubmenuItems: getMenuItems,\n onSetup: spec.onMenuSetup\n });\n };\n const lineHeightSpec = {\n name: 'lineheight',\n text: 'Line height',\n icon: 'line-height',\n getOptions: getLineHeightFormats,\n hash: input => normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input),\n display: identity,\n watcher: (editor, value, callback) => editor.formatter.formatChanged('lineheight', callback, false, { value }).unbind,\n getCurrent: editor => Optional.from(editor.queryCommandValue('LineHeight')),\n setCurrent: (editor, value) => editor.execCommand('LineHeight', false, value)\n };\n const languageSpec = editor => {\n const settingsOpt = Optional.from(getContentLanguages(editor));\n return settingsOpt.map(settings => ({\n name: 'language',\n text: 'Language',\n icon: 'language',\n getOptions: constant$1(settings),\n hash: input => isUndefined(input.customCode) ? input.code : `${ input.code }/${ input.customCode }`,\n display: input => input.title,\n watcher: (editor, value, callback) => {\n var _a;\n return editor.formatter.formatChanged('lang', callback, false, {\n value: value.code,\n customValue: (_a = value.customCode) !== null && _a !== void 0 ? _a : null\n }).unbind;\n },\n getCurrent: editor => {\n const node = SugarElement.fromDom(editor.selection.getNode());\n return closest$4(node, n => Optional.some(n).filter(isElement$1).bind(ele => {\n const codeOpt = getOpt(ele, 'lang');\n return codeOpt.map(code => {\n const customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n return {\n code,\n customCode,\n title: ''\n };\n });\n }));\n },\n setCurrent: (editor, lang) => editor.execCommand('Lang', false, lang),\n onToolbarSetup: api => {\n const unbinder = unbindable();\n api.setActive(editor.formatter.match('lang', {}, undefined, true));\n unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n return unbinder.clear;\n }\n }));\n };\n const register$7 = editor => {\n registerController(editor, lineHeightSpec);\n languageSpec(editor).each(spec => registerController(editor, spec));\n };\n\n const register$6 = (editor, backstage) => {\n createAlignMenu(editor, backstage);\n createFontFamilyMenu(editor, backstage);\n createStylesMenu(editor, backstage);\n createBlocksMenu(editor, backstage);\n createFontSizeMenu(editor, backstage);\n };\n\n const onSetupOutdentState = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.queryCommandState('outdent'));\n });\n const registerButtons$2 = editor => {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: onSetupOutdentState(editor),\n onAction: onActionExecCommand(editor, 'outdent')\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onAction: onActionExecCommand(editor, 'indent')\n });\n };\n const register$5 = editor => {\n registerButtons$2(editor);\n };\n\n const makeSetupHandler = (editor, pasteAsText) => api => {\n api.setActive(pasteAsText.get());\n const pastePlainTextToggleHandler = e => {\n pasteAsText.set(e.state);\n api.setActive(e.state);\n };\n editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n return () => editor.off('PastePlainTextToggle', pastePlainTextToggleHandler);\n };\n const register$4 = editor => {\n const pasteAsText = Cell(getPasteAsText(editor));\n const onAction = () => editor.execCommand('mceTogglePlainTextPaste');\n editor.ui.registry.addToggleButton('pastetext', {\n active: false,\n icon: 'paste-text',\n tooltip: 'Paste as text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n editor.ui.registry.addToggleMenuItem('pastetext', {\n text: 'Paste as text',\n icon: 'paste-text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n };\n\n const onActionToggleFormat = (editor, fmt) => () => {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n const registerFormatButtons = editor => {\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n icon: 'bold'\n },\n {\n name: 'italic',\n text: 'Italic',\n icon: 'italic'\n },\n {\n name: 'underline',\n text: 'Underline',\n icon: 'underline'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n icon: 'superscript'\n }\n ], (btn, _idx) => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupFormatToggle(editor, btn.name),\n onAction: onActionToggleFormat(editor, btn.name)\n });\n });\n for (let i = 1; i <= 6; i++) {\n const name = 'h' + i;\n editor.ui.registry.addToggleButton(name, {\n text: name.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupFormatToggle(editor, name),\n onAction: onActionToggleFormat(editor, name)\n });\n }\n };\n const registerCommandButtons = editor => {\n global$1.each([\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste'\n },\n {\n name: 'help',\n text: 'Help',\n action: 'mceHelp',\n icon: 'help'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'remove',\n text: 'Remove',\n action: 'Delete',\n icon: 'remove'\n },\n {\n name: 'print',\n text: 'Print',\n action: 'mcePrint',\n icon: 'print'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], btn => {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action)\n });\n });\n };\n const registerCommandToggleButtons = editor => {\n global$1.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], btn => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n onSetup: onSetupFormatToggle(editor, btn.name)\n });\n });\n };\n const registerButtons$1 = editor => {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n const registerMenuItems$2 = editor => {\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n action: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n action: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n action: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n action: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut',\n shortcut: 'Meta+X'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n shortcut: 'Meta+C'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste',\n shortcut: 'Meta+V'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A'\n },\n {\n name: 'print',\n text: 'Print...',\n action: 'mcePrint',\n icon: 'print',\n shortcut: 'Meta+P'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], menuitem => {\n editor.ui.registry.addMenuItem(menuitem.name, {\n text: menuitem.text,\n icon: menuitem.icon,\n shortcut: menuitem.shortcut,\n onAction: onActionExecCommand(editor, menuitem.action)\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onAction: onActionToggleFormat(editor, 'code')\n });\n };\n const register$3 = editor => {\n registerButtons$1(editor);\n registerMenuItems$2(editor);\n };\n\n const onSetupUndoRedoState = (editor, type) => onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', api => {\n api.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type]());\n });\n const registerMenuItems$1 = editor => {\n editor.ui.registry.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n const registerButtons = editor => {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n const register$2 = editor => {\n registerMenuItems$1(editor);\n registerButtons(editor);\n };\n\n const onSetupVisualAidState = editor => onSetupEvent(editor, 'VisualAid', api => {\n api.setActive(editor.hasVisual);\n });\n const registerMenuItems = editor => {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: onSetupVisualAidState(editor),\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n const registerToolbarButton = editor => {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n const register$1 = editor => {\n registerToolbarButton(editor);\n registerMenuItems(editor);\n };\n\n const setup$6 = (editor, backstage) => {\n register$8(editor);\n register$3(editor);\n register$6(editor, backstage);\n register$2(editor);\n register$c(editor);\n register$1(editor);\n register$5(editor);\n register$7(editor);\n register$4(editor);\n };\n\n const patchPipeConfig = config => isString(config) ? config.split(/[ ,]/) : config;\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('contextmenu_avoid_overlap', {\n processor: 'string',\n default: ''\n });\n registerOption('contextmenu_never_use_native', {\n processor: 'boolean',\n default: false\n });\n registerOption('contextmenu', {\n processor: value => {\n if (value === false) {\n return {\n value: [],\n valid: true\n };\n } else if (isString(value) || isArrayOf(value, isString)) {\n return {\n value: patchPipeConfig(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string.'\n };\n }\n },\n default: 'link linkchecker image editimage table spellchecker configurepermanentpen'\n });\n };\n const shouldNeverUseNative = option('contextmenu_never_use_native');\n const getAvoidOverlapSelector = option('contextmenu_avoid_overlap');\n const isContextMenuDisabled = editor => getContextMenu(editor).length === 0;\n const getContextMenu = editor => {\n const contextMenus = editor.ui.registry.getAll().contextMenus;\n const contextMenu = editor.options.get('contextmenu');\n if (editor.options.isSet('contextmenu')) {\n return contextMenu;\n } else {\n return filter$2(contextMenu, item => has$2(contextMenus, item));\n }\n };\n\n const nu = (x, y) => ({\n type: 'makeshift',\n x,\n y\n });\n const transpose = (pos, dx, dy) => {\n return nu(pos.x + dx, pos.y + dy);\n };\n const isTouchEvent$1 = e => e.type === 'longpress' || e.type.indexOf('touch') === 0;\n const fromPageXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.pageX, touch.pageY);\n } else {\n return nu(e.pageX, e.pageY);\n }\n };\n const fromClientXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.clientX, touch.clientY);\n } else {\n return nu(e.clientX, e.clientY);\n }\n };\n const transposeContentAreaContainer = (element, pos) => {\n const containerPos = global$7.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n const getPointAnchor = (editor, e) => {\n if (e.type === 'contextmenu' || e.type === 'longpress') {\n if (editor.inline) {\n return fromPageXY(e);\n } else {\n return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n }\n } else {\n return getSelectionAnchor(editor);\n }\n };\n const getSelectionAnchor = editor => {\n return {\n type: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n const getNodeAnchor = editor => ({\n type: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n });\n const getAnchorSpec$1 = (editor, e, anchorType) => {\n switch (anchorType) {\n case 'node':\n return getNodeAnchor(editor);\n case 'point':\n return getPointAnchor(editor, e);\n case 'selection':\n return getSelectionAnchor(editor);\n }\n };\n\n const initAndShow$1 = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const items = buildMenu();\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n menu: { markers: markers('normal') },\n data: menuData\n });\n });\n };\n\n const layouts = {\n onLtr: () => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2,\n north,\n south,\n northeast,\n southeast,\n northwest,\n southwest\n ],\n onRtl: () => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2,\n north,\n south,\n northwest,\n southwest,\n northeast,\n southeast\n ]\n };\n const bubbleSize = 12;\n const bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n const isTouchWithinSelection = (editor, e) => {\n const selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n const touch = e.touches[0];\n const rng = selection.getRng();\n const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(rngRect => rngRect.left <= touch.clientX && rngRect.right >= touch.clientX && rngRect.top <= touch.clientY && rngRect.bottom >= touch.clientY);\n }\n };\n const setupiOSOverrides = editor => {\n const originalSelection = editor.selection.getRng();\n const selectionReset = () => {\n global$9.setEditorTimeout(editor, () => {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n const preventMousedown = e => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n const clearSelectionReset = () => unbindEventListeners();\n editor.once('longpresscancel', clearSelectionReset);\n const unbindEventListeners = () => {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n const getAnchorSpec = (editor, e, anchorType) => {\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n const bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n return {\n bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n layouts,\n overrides: {\n maxWidthFunction: expandable(),\n maxHeightFunction: expandable$1()\n },\n ...anchorSpec\n };\n };\n const show = (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) => {\n const anchorSpec = getAnchorSpec(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: true,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n const highlightOnOpen = highlightImmediately ? HighlightOnOpen.HighlightMenuAndItem : HighlightOnOpen.HighlightNone;\n InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n menu: {\n markers: markers('normal'),\n highlightOnOpen\n },\n data: menuData,\n type: 'horizontal'\n }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection')));\n editor.dispatch(hideContextToolbarEvent);\n });\n };\n const initAndShow = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const detection = detect$1();\n const isiOS = detection.os.isiOS();\n const isMacOS = detection.os.isMacOS();\n const isAndroid = detection.os.isAndroid();\n const isTouch = detection.deviceType.isTouch();\n const shouldHighlightImmediately = () => !(isAndroid || isiOS || isMacOS && isTouch);\n const open = () => {\n const items = buildMenu();\n show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n };\n if ((isMacOS || isiOS) && anchorType !== 'node') {\n const openiOS = () => {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS();\n } else {\n editor.once('selectionchange', openiOS);\n editor.once('touchend', () => editor.off('selectionchange', openiOS));\n }\n } else {\n open();\n }\n };\n\n const isSeparator = item => isString(item) ? item === '|' : item.type === 'separator';\n const separator = { type: 'separator' };\n const makeContextItem = item => {\n const commonMenuItem = item => ({\n text: item.text,\n icon: item.icon,\n enabled: item.enabled,\n shortcut: item.shortcut\n });\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n ...commonMenuItem(item),\n getSubmenuItems: () => {\n const items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map$2(items, makeContextItem);\n }\n }\n };\n default:\n const commonItem = item;\n return {\n type: 'menuitem',\n ...commonMenuItem(commonItem),\n onAction: noarg(commonItem.onAction)\n };\n }\n }\n };\n const addContextMenuGroup = (xs, groupItems) => {\n if (groupItems.length === 0) {\n return xs;\n }\n const lastMenuItem = last$1(xs).filter(item => !isSeparator(item));\n const before = lastMenuItem.fold(() => [], _ => [separator]);\n return xs.concat(before).concat(groupItems).concat([separator]);\n };\n const generateContextMenu = (contextMenus, menuConfig, selectedElement) => {\n const sections = foldl(menuConfig, (acc, name) => {\n return get$g(contextMenus, name.toLowerCase()).map(menu => {\n const items = menu.update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n const allItems = map$2(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n }).getOrThunk(() => acc.concat([name]));\n }, []);\n if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n const isNativeOverrideKeyEvent = (editor, e) => e.ctrlKey && !shouldNeverUseNative(editor);\n const isTouchEvent = e => e.type === 'longpress' || has$2(e, 'touches');\n const isTriggeredByKeyboard = (editor, e) => !isTouchEvent(e) && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n const getSelectedElement = (editor, e) => isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n const getAnchorType = (editor, e) => {\n const selector = getAvoidOverlapSelector(editor);\n const anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n if (isNotEmpty(selector)) {\n const target = getSelectedElement(editor, e);\n const selectorExists = closest(SugarElement.fromDom(target), selector);\n return selectorExists ? 'node' : anchorType;\n } else {\n return anchorType;\n }\n };\n const setup$5 = (editor, lazySink, backstage) => {\n const detection = detect$1();\n const isTouch = detection.deviceType.isTouch;\n const contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink,\n onEscape: () => editor.focus(),\n onShow: () => backstage.setContextMenuState(true),\n onHide: () => backstage.setContextMenuState(false),\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run$1(dismissRequested(), (comp, _se) => {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n const hideContextMenu = () => InlineView.hide(contextmenu);\n const showContextMenu = e => {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n const anchorType = getAnchorType(editor, e);\n const buildMenu = () => {\n const selectedElement = getSelectedElement(editor, e);\n const registry = editor.ui.registry.getAll();\n const menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n const initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\n };\n editor.on('init', () => {\n const hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n const adt = Adt.generate([\n {\n offset: [\n 'x',\n 'y'\n ]\n },\n {\n absolute: [\n 'x',\n 'y'\n ]\n },\n {\n fixed: [\n 'x',\n 'y'\n ]\n }\n ]);\n const subtract = change => point => point.translate(-change.left, -change.top);\n const add = change => point => point.translate(change.left, change.top);\n const transform = changes => (x, y) => foldl(changes, (rest, f) => f(rest), SugarPosition(x, y));\n const asFixed = (coord, scroll, origin) => coord.fold(transform([\n add(origin),\n subtract(scroll)\n ]), transform([subtract(scroll)]), transform([]));\n const asAbsolute = (coord, scroll, origin) => coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n const asOffset = (coord, scroll, origin) => coord.fold(transform([]), transform([subtract(origin)]), transform([\n add(scroll),\n subtract(origin)\n ]));\n const withinRange = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n const getDeltas = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n const left = Math.abs(a1.left - a2.left);\n const top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n const toStyles = (coord, scroll, origin) => {\n const stylesOpt = coord.fold((x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }), (x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n }), (x, y) => ({\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }));\n return {\n right: Optional.none(),\n bottom: Optional.none(),\n ...stylesOpt\n };\n };\n const translate = (coord, deltaX, deltaY) => coord.fold((x, y) => offset(x + deltaX, y + deltaY), (x, y) => absolute(x + deltaX, y + deltaY), (x, y) => fixed(x + deltaX, y + deltaY));\n const absorb = (partialCoord, originalCoord, scroll, origin) => {\n const absorbOne = (stencil, nu) => (optX, optY) => {\n const original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left), optY.getOr(original.top));\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n };\n const offset = adt.offset;\n const absolute = adt.absolute;\n const fixed = adt.fixed;\n\n const parseAttrToInt = (element, name) => {\n const value = get$f(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n const get = (component, snapsInfo) => {\n const element = component.element;\n const x = parseAttrToInt(element, snapsInfo.leftAttr);\n const y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n const set = (component, snapsInfo, pt) => {\n const element = component.element;\n set$9(element, snapsInfo.leftAttr, pt.left + 'px');\n set$9(element, snapsInfo.topAttr, pt.top + 'px');\n };\n const clear = (component, snapsInfo) => {\n const element = component.element;\n remove$7(element, snapsInfo.leftAttr);\n remove$7(element, snapsInfo.topAttr);\n };\n\n const getCoords = (component, snapInfo, coord, delta) => get(component, snapInfo).fold(() => coord, fixed$1 => fixed(fixed$1.left + delta.left, fixed$1.top + delta.top));\n const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => {\n const newCoord = getCoords(component, snapInfo, coord, delta);\n const snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n const fixedCoord = asFixed(newCoord, scroll, origin);\n set(component, snapInfo, fixedCoord);\n return snap.fold(() => ({\n coord: fixed(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n }), spanned => ({\n coord: spanned.output,\n extra: spanned.extra\n }));\n };\n const stopDrag = (component, snapInfo) => {\n clear(component, snapInfo);\n };\n const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, snap => {\n const sensor = snap.sensor;\n const inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return inRange ? Optional.some({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }) : Optional.none();\n });\n const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(() => {\n const bestSnap = foldl(snaps, (acc, snap) => {\n const sensor = snap.sensor;\n const deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(() => ({\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n }), bestDeltas => {\n const currAvg = (deltas.left + deltas.top) / 2;\n const bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n if (currAvg <= bestAvg) {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Optional.none(),\n snap: Optional.none()\n });\n return bestSnap.snap.map(snap => ({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }));\n });\n };\n const findSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n const snapTo$1 = (snap, scroll, origin) => ({\n coord: absorb(snap.output, snap.output, scroll, origin),\n extra: snap.extra\n });\n\n const snapTo = (component, dragConfig, _state, snap) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$b(doc);\n const origin = getOrigin(target);\n const snapPin = snapTo$1(snap, scroll, origin);\n const styles = toStyles(snapPin.coord, scroll, origin);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo\n });\n\n const initialAttribute = 'data-initial-z-index';\n const resetZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getOpt(root, initialAttribute).fold(() => remove$6(root, 'z-index'), zIndex => set$8(root, 'z-index', zIndex));\n remove$7(root, initialAttribute);\n });\n };\n const changeZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getRaw(root, 'z-index').each(zindex => {\n set$9(root, initialAttribute, zindex);\n });\n set$8(root, 'z-index', get$e(blocker.element, 'z-index'));\n });\n };\n const instigate = (anyComponent, blocker) => {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n const discard = blocker => {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container.sketch({\n dom: {\n styles: {\n 'left': '0px',\n 'top': '0px',\n 'width': '100%',\n 'height': '100%',\n 'position': 'fixed',\n 'z-index': '1000000000000000'\n },\n classes: [blockerClass]\n },\n events: blockerEvents\n }));\n\n var SnapSchema = optionObjOf('snaps', [\n required$1('getSnapPoints'),\n onHandler('onSensor'),\n required$1('leftAttr'),\n required$1('topAttr'),\n defaulted('lazyViewport', win),\n defaulted('mustSnap', false)\n ]);\n\n const schema$6 = [\n defaulted('useFixed', never),\n required$1('blockerClass'),\n defaulted('getTarget', identity),\n defaulted('onDrag', noop),\n defaulted('repositionTarget', true),\n defaulted('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n const getCurrentCoord = target => lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), (left, top, position) => {\n const nu = position === 'fixed' ? fixed : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(() => {\n const location = absolute$3(target);\n return absolute(location.left, location.top);\n });\n const clampCoords = (component, coords, scroll, origin, startData) => {\n const bounds = startData.bounds;\n const absoluteCoord = asAbsolute(coords, scroll, origin);\n const newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n const newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n const newCoords = absolute(newX, newY);\n return coords.fold(() => {\n const offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left, offset$1.top);\n }, constant$1(newCoords), () => {\n const fixed$1 = asFixed(newCoords, scroll, origin);\n return fixed(fixed$1.left, fixed$1.top);\n });\n };\n const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => {\n const newCoord = optSnaps.fold(() => {\n const translated = translate(currentCoord, delta.left, delta.top);\n const fixedCoord = asFixed(translated, scroll, origin);\n return fixed(fixedCoord.left, fixedCoord.top);\n }, snapInfo => {\n const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(extra => {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n const dragBy = (component, dragConfig, startData, delta) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$b(doc);\n const origin = getOrigin(target);\n const currentCoord = getCurrentCoord(target);\n const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n const styles = toStyles(newCoord, scroll, origin);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n const calcStartData = (dragConfig, comp) => ({\n bounds: dragConfig.getBounds(),\n height: getOuter$2(comp.element),\n width: getOuter$1(comp.element)\n });\n const move = (component, dragConfig, dragState, dragMode, event) => {\n const delta = dragState.update(dragMode, event);\n const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component));\n delta.each(dlt => {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n const stop = (component, blocker, dragConfig, dragState) => {\n blocker.each(discard);\n dragConfig.snaps.each(snapInfo => {\n stopDrag(component, snapInfo);\n });\n const target = dragConfig.getTarget(component.element);\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n const handlers = events => (dragConfig, dragState) => {\n const updateStartState = comp => {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive$2([\n run$1(windowScroll(), comp => {\n dragState.getStartData().each(() => updateStartState(comp));\n }),\n ...events(dragConfig, dragState, updateStartState)\n ]);\n };\n\n const init$2 = dragApi => derive$2([\n run$1(mousedown(), dragApi.forceDrop),\n run$1(mouseup(), dragApi.drop),\n run$1(mousemove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n }),\n run$1(mouseout(), dragApi.delayDrop)\n ]);\n\n const getData$1 = event => Optional.from(SugarPosition(event.x, event.y));\n const getDelta$1 = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n const events$2 = (dragConfig, dragState, updateStartState) => [run$1(mousedown(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState);\n const delayDrop = DelayedFunction(stop$1, 200);\n const dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: event => {\n delayDrop.cancel();\n move(component, dragConfig, dragState, MouseData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n const schema$5 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$2) })\n ];\n\n const init$1 = dragApi => derive$2([\n run$1(touchstart(), dragApi.forceDrop),\n run$1(touchend(), dragApi.drop),\n run$1(touchcancel(), dragApi.drop),\n run$1(touchmove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n\n const getDataFrom = touches => {\n const touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n const getData = event => {\n const raw = event.raw;\n const touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n const getDelta = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData,\n getDelta: getDelta\n });\n\n const events$1 = (dragConfig, dragState, updateStartState) => {\n const blockerSingleton = value$2();\n const stopBlocking = component => {\n stop(component, blockerSingleton.get(), dragConfig, dragState);\n blockerSingleton.clear();\n };\n return [\n run$1(touchstart(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n const stop = () => stopBlocking(component);\n const dragApi = {\n drop: stop,\n delayDrop: noop,\n forceDrop: stop,\n move: event => {\n move(component, dragConfig, dragState, TouchData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$1(dragApi));\n blockerSingleton.set(blocker);\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run$1(touchmove(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run$1(touchend(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n stopBlocking(component);\n }),\n run$1(touchcancel(), stopBlocking)\n ];\n };\n const schema$4 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$1) })\n ];\n\n const events = (dragConfig, dragState, updateStartState) => [\n ...events$2(dragConfig, dragState, updateStartState),\n ...events$1(dragConfig, dragState, updateStartState)\n ];\n const schema$3 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events) })\n ];\n\n const mouse = schema$5;\n const touch = schema$4;\n const mouseOrTouch = schema$3;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n const init = () => {\n let previous = Optional.none();\n let startData = Optional.none();\n const reset = () => {\n previous = Optional.none();\n startData = Optional.none();\n };\n const calculateDelta = (mode, nu) => {\n const result = previous.map(old => mode.getDelta(old, nu));\n previous = Optional.some(nu);\n return result;\n };\n const update = (mode, dragEvent) => mode.getData(dragEvent).bind(nuData => calculateDelta(mode, nuData));\n const setStartData = data => {\n startData = Optional.some(data);\n };\n const getStartData = () => startData;\n const readState = constant$1({});\n return nu$8({\n readState,\n reset,\n update,\n getStartData,\n setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n const Dragging = createModes({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: (dragConfig, dragState) => {\n const dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: sConfig => ({\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n })\n },\n state: DragState,\n apis: DraggingApis\n });\n\n const snapWidth = 40;\n const snapOffset = snapWidth / 2;\n const calcSnap = (selectorOpt, td, x, y, width, height) => selectorOpt.fold(() => Dragging.snap({\n sensor: absolute(x - snapOffset, y - snapOffset),\n range: SugarPosition(width, height),\n output: absolute(Optional.some(x), Optional.some(y)),\n extra: { td }\n }), selectorHandle => {\n const sensorLeft = x - snapOffset;\n const sensorTop = y - snapOffset;\n const sensorWidth = snapWidth;\n const sensorHeight = snapWidth;\n const rect = selectorHandle.element.dom.getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute(sensorLeft, sensorTop),\n range: SugarPosition(sensorWidth, sensorHeight),\n output: absolute(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n extra: { td }\n });\n });\n const getSnapsConfig = (getSnapPoints, cell, onChange) => {\n const isSameCell = (cellOpt, td) => cellOpt.exists(currentTd => eq(currentTd, td));\n return {\n getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: (component, extra) => {\n const td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(td);\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n const createSelector = snaps => record(Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-selector']\n },\n buttonBehaviours: derive$1([\n Dragging.config({\n mode: 'mouseOrTouch',\n blockerClass: 'blocker',\n snaps\n }),\n Unselecting.config({})\n ]),\n eventOrder: {\n mousedown: [\n 'dragging',\n 'alloy.base.behaviour'\n ],\n touchstart: [\n 'dragging',\n 'alloy.base.behaviour'\n ]\n }\n }));\n const setup$4 = (editor, sink) => {\n const tlTds = Cell([]);\n const brTds = Cell([]);\n const isVisible = Cell(false);\n const startCell = value$2();\n const finishCell = value$2();\n const getTopLeftSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n const getTopLeftSnaps = () => map$2(tlTds.get(), td => getTopLeftSnap(td));\n const getBottomRightSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n const getBottomRightSnaps = () => map$2(brTds.get(), td => getBottomRightSnap(td));\n const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, start => {\n finishCell.get().each(finish => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, finish => {\n startCell.get().each(start => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const memTopLeft = createSelector(topLeftSnaps);\n const memBottomRight = createSelector(bottomRightSnaps);\n const topLeft = build$1(memTopLeft.asSpec());\n const bottomRight = build$1(memBottomRight.asSpec());\n const showOrHideHandle = (selector, cell, isAbove, isBelow) => {\n const cellRect = cell.dom.getBoundingClientRect();\n remove$6(selector.element, 'display');\n const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n const aboveViewport = isAbove(cellRect);\n const belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$8(selector.element, 'display', 'none');\n }\n };\n const snapTo = (selector, cell, getSnapConfig, pos) => {\n const snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n const isAbove = rect => rect[pos] < 0;\n const isBelow = (rect, viewportHeight) => rect[pos] > viewportHeight;\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n const snapTopLeft = cell => snapTo(topLeft, cell, getTopLeftSnap, 'top');\n const snapLastTopLeft = () => startCell.get().each(snapTopLeft);\n const snapBottomRight = cell => snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n const snapLastBottomRight = () => finishCell.get().each(snapBottomRight);\n if (detect$1().deviceType.isTouch()) {\n editor.on('TableSelectionChange', e => {\n if (!isVisible.get()) {\n attach(sink, topLeft);\n attach(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(e.start);\n finishCell.set(e.finish);\n e.otherCells.each(otherCells => {\n tlTds.set(otherCells.upOrLeftCells);\n brTds.set(otherCells.downOrRightCells);\n snapTopLeft(e.start);\n snapBottomRight(e.finish);\n });\n });\n editor.on('ResizeEditor ResizeWindow ScrollContent', () => {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', () => {\n if (isVisible.get()) {\n detach(topLeft);\n detach(bottomRight);\n isVisible.set(false);\n }\n startCell.clear();\n finishCell.clear();\n });\n }\n };\n\n var Logo = \"\\n \\n\\n\";\n\n const isHidden = elm => elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus') || elm.getAttribute('data-mce-type') === 'bookmark';\n const renderElementPath = (editor, settings, providersBackstage) => {\n var _a;\n const delimiter = (_a = settings.delimiter) !== null && _a !== void 0 ? _a : '\\u203A';\n const renderElement = (name, element, index) => Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'data-index': index,\n 'aria-level': index + 1\n }\n },\n components: [text$1(name)],\n action: _btn => {\n editor.focus();\n editor.selection.select(element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n });\n const renderDivider = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true }\n },\n components: [text$1(` ${ delimiter } `)]\n });\n const renderPathData = data => foldl(data, (acc, path, index) => {\n const element = renderElement(path.name, path.element, index);\n if (index === 0) {\n return acc.concat([element]);\n } else {\n return acc.concat([\n renderDivider(),\n element\n ]);\n }\n }, []);\n const updatePath = parents => {\n const newPath = [];\n let i = parents.length;\n while (i-- > 0) {\n const parent = parents[i];\n if (parent.nodeType === 1 && !isHidden(parent)) {\n const args = fireResolveName(editor, parent);\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Disabling.config({ disabled: providersBackstage.isDisabled }),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached((comp, _e) => {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', () => Keying.focusIn(comp));\n editor.on('NodeChange', e => {\n const newPath = updatePath(e.parents);\n const newChildren = newPath.length > 0 ? renderPathData(newPath) : [];\n Replacing.set(comp, newChildren);\n });\n })])\n ]),\n components: []\n };\n };\n\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n const getDimensions = (editor, deltas, resizeType, originalHeight, originalWidth) => {\n const dimensions = { height: calcCappedSize(originalHeight + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor)) };\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor));\n }\n return dimensions;\n };\n const resize = (editor, deltas, resizeType) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const dimensions = getDimensions(editor, deltas, resizeType, get$d(container), get$c(container));\n each(dimensions, (val, dim) => {\n if (isNumber(val)) {\n set$8(container, dim, numToPx(val));\n }\n });\n fireResizeEditor(editor);\n };\n\n const getResizeType = editor => {\n const resize = getResize(editor);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n const keyboardHandler = (editor, resizeType, x, y) => {\n const scale = 20;\n const delta = SugarPosition(x * scale, y * scale);\n resize(editor, delta, resizeType);\n return Optional.some(true);\n };\n const renderResizeHandler = (editor, providersBackstage) => {\n const resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n return Optional.some(render$3('resize-handle', {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: { title: providersBackstage.translate('Resize') },\n behaviours: [\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: (_comp, _target, delta) => resize(editor, delta, resizeType),\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: () => keyboardHandler(editor, resizeType, -1, 0),\n onRight: () => keyboardHandler(editor, resizeType, 1, 0),\n onUp: () => keyboardHandler(editor, resizeType, 0, -1),\n onDown: () => keyboardHandler(editor, resizeType, 0, 1)\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]\n }, providersBackstage.icons));\n };\n\n const renderWordCount = (editor, providersBackstage) => {\n const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$1(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute$1(comp => {\n const currentVal = Representing.getValue(comp);\n const newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(comp => {\n editor.on('wordCountUpdate', e => {\n const {mode} = Representing.getValue(comp);\n Representing.setValue(comp, {\n mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ]\n }\n });\n };\n\n const renderStatusbar = (editor, providersBackstage) => {\n const renderBranding = () => {\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding']\n },\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': 'https://www.tiny.cloud/powered-by-tiny?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce&utm_content=v6',\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-label': global$8.translate([\n 'Powered by {0}',\n 'Tiny'\n ])\n },\n innerHtml: Logo.trim()\n },\n behaviours: derive$1([Focusing.config({})])\n }]\n };\n };\n const getTextComponents = () => {\n const components = [];\n if (useElementPath(editor)) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (useBranding(editor)) {\n components.push(renderBranding());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__text-container']\n },\n components\n }];\n }\n return [];\n };\n const getComponents = () => {\n const components = getTextComponents();\n const resizeHandler = renderResizeHandler(editor, providersBackstage);\n return components.concat(resizeHandler.toArray());\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n const getLazyMothership = singleton => singleton.get().getOrDie('UI has not been rendered');\n const setup$3 = editor => {\n const isInline = editor.inline;\n const mode = isInline ? Inline : Iframe;\n const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n const lazySink = value$2();\n const lazyOuterContainer = value$2();\n const lazyMothership = value$2();\n const lazyUiMothership = value$2();\n const platform = detect$1();\n const isTouch = platform.deviceType.isTouch();\n const touchPlatformClass = 'tox-platform-touch';\n const deviceClasses = isTouch ? [touchPlatformClass] : [];\n const isToolbarBottom = isToolbarLocationBottom(editor);\n const toolbarMode = getToolbarMode(editor);\n const memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n const lazyHeader = () => lazyOuterContainer.get().bind(OuterContainer.getHeader);\n const lazySinkResult = () => Result.fromOption(lazySink.get(), 'UI has not been rendered');\n const lazyAnchorBar = () => lazyOuterContainer.get().bind(container => memAnchorBar.getOpt(container)).getOrDie('Could not find a anchor bar element');\n const lazyToolbar = () => lazyOuterContainer.get().bind(container => OuterContainer.getToolbar(container)).getOrDie('Could not find more toolbar element');\n const lazyThrobber = () => lazyOuterContainer.get().bind(container => OuterContainer.getThrobber(container)).getOrDie('Could not find throbber element');\n const backstage = init$7(lazySinkResult, editor, lazyAnchorBar);\n const makeHeaderPart = () => {\n const verticalDirAttributes = { attributes: { [Attribute]: isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom } };\n const partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage,\n onEscape: () => {\n editor.focus();\n }\n });\n const partToolbar = OuterContainer.parts.toolbar({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: lazySinkResult,\n providers: backstage.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar,\n lazyHeader: () => lazyHeader().getOrDie('Could not find header element'),\n ...verticalDirAttributes\n });\n const partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstage.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n type: toolbarMode\n });\n const hasMultipleToolbar = isMultipleToolbars(editor);\n const hasToolbar = isToolbarEnabled(editor);\n const hasMenubar = isMenubarEnabled(editor);\n const shouldHavePromotion = promotionEnabled(editor);\n const partPromotion = makePromotion();\n const getPartToolbar = () => {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n const menubarCollection = shouldHavePromotion ? [\n partPromotion,\n partMenubar\n ] : [partMenubar];\n return OuterContainer.parts.header({\n dom: {\n tag: 'div',\n classes: ['tox-editor-header'],\n ...verticalDirAttributes\n },\n components: flatten([\n hasMenubar ? menubarCollection : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor,\n sharedBackstage: backstage.shared\n });\n };\n const makePromotion = () => {\n return OuterContainer.parts.promotion({\n dom: {\n tag: 'div',\n classes: ['tox-promotion']\n }\n });\n };\n const makeSidebarDefinition = () => {\n const partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n const partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n };\n const renderSink = () => {\n const uiContainer = getUiContainer(editor);\n const isGridUiContainer = eq(body(), uiContainer) && get$e(uiContainer, 'display') === 'grid';\n const sinkSpec = {\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(deviceClasses),\n attributes: { ...global$8.isRtl() ? { dir: 'rtl' } : {} }\n },\n behaviours: derive$1([Positioning.config({ useFixed: () => header.isDocked(lazyHeader) })])\n };\n const reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive$2([run$1(windowResize(), comp => {\n set$8(comp.element, 'width', document.body.clientWidth + 'px');\n })])\n };\n const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {}));\n const uiMothership = takeover(sink);\n lazySink.set(sink);\n lazyUiMothership.set(uiMothership);\n return {\n sink,\n uiMothership\n };\n };\n const renderContainer = () => {\n const partHeader = makeHeaderPart();\n const sidebarContainer = makeSidebarDefinition();\n const partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage\n });\n const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n const editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [sidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n const editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n const containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n const isHidden = isDistractionFree(editor);\n const attributes = {\n role: 'application',\n ...global$8.isRtl() ? { dir: 'rtl' } : {},\n ...isHidden ? { 'aria-hidden': 'true' } : {}\n };\n const outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses),\n styles: {\n visibility: 'hidden',\n ...isHidden ? {\n opacity: '0',\n border: '0'\n } : {}\n },\n attributes\n },\n components: containerComponents,\n behaviours: derive$1([\n receivingConfig(),\n Disabling.config({ disableClass: 'tox-tinymce--disabled' }),\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle'\n })\n ])\n }));\n const mothership = takeover(outerContainer);\n lazyOuterContainer.set(outerContainer);\n lazyMothership.set(mothership);\n return {\n mothership,\n outerContainer\n };\n };\n const setEditorSize = outerContainer => {\n const parsedHeight = numToPx(getHeightWithFallback(editor));\n const parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$8(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$8(outerContainer.element, 'height', parsedHeight);\n } else {\n set$8(outerContainer.element, 'height', '400px');\n }\n }\n return parsedHeight;\n };\n const setupShortcutsAndCommands = outerContainer => {\n editor.addShortcut('alt+F9', 'focus menubar', () => {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.addShortcut('alt+F10', 'focus toolbar', () => {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', () => {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', () => OuterContainer.isToolbarDrawerToggled(outerContainer));\n };\n const renderUI = () => {\n const {mothership, outerContainer} = renderContainer();\n const {uiMothership, sink} = renderSink();\n map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name) => {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n const {buttons, menuItems, contextToolbars, sidebars} = editor.ui.registry.getAll();\n const toolbarOpt = getMultipleToolbarsOption(editor);\n const rawUiConfig = {\n menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)),\n allowToolbarGroups: toolbarMode === ToolbarMode$1.floating,\n buttons,\n sidebar: sidebars\n };\n setupShortcutsAndCommands(outerContainer);\n setup$b(editor, mothership, uiMothership);\n header.setup(editor, backstage.shared, lazyHeader);\n setup$6(editor, backstage);\n setup$5(editor, lazySinkResult, backstage);\n setup$8(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n register$9(editor, contextToolbars, sink, { backstage });\n setup$4(editor, sink);\n const elm = editor.getElement();\n const height = setEditorSize(outerContainer);\n const uiComponents = {\n mothership,\n uiMothership,\n outerContainer,\n sink\n };\n const args = {\n targetNode: elm,\n height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n const getMothership = () => getLazyMothership(lazyMothership);\n const getUiMothership = () => getLazyMothership(lazyUiMothership);\n return {\n getMothership,\n getUiMothership,\n backstage,\n renderUI\n };\n };\n\n const describedBy = (describedElement, describeElement) => {\n const describeId = Optional.from(get$f(describedElement, 'id')).fold(() => {\n const id = generate$6('dialog-describe');\n set$9(describeElement, 'id', id);\n return id;\n }, identity);\n set$9(describedElement, 'aria-describedby', describeId);\n };\n\n const labelledBy = (labelledElement, labelElement) => {\n const labelId = getOpt(labelledElement, 'id').fold(() => {\n const id = generate$6('dialog-label');\n set$9(labelElement, 'id', id);\n return id;\n }, identity);\n set$9(labelledElement, 'aria-labelledby', labelId);\n };\n\n const schema$2 = constant$1([\n required$1('lazySink'),\n option$3('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted('useTabstopAt', always),\n defaulted('eventOrder', {}),\n field('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n const basic = { sketch: identity };\n const parts$2 = constant$1([\n optional({\n name: 'draghandle',\n overrides: (detail, spec) => {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: handle => {\n return ancestor(handle, '[role=\"dialog\"]').getOr(handle);\n },\n blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n getBounds: detail.getDragBounds\n })])\n };\n }\n }),\n required({\n schema: [required$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [required$1('dom')],\n name: 'footer'\n }),\n external({\n factory: {\n sketch: (spec, detail) => ({\n ...spec,\n dom: detail.dom,\n components: detail.components\n })\n },\n schema: [\n defaulted('dom', {\n tag: 'div',\n styles: {\n position: 'fixed',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px'\n }\n }),\n defaulted('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n const factory$4 = (detail, components, spec, externals) => {\n const dialogComp = value$2();\n const showDialog = dialog => {\n dialogComp.set(dialog);\n const sink = detail.lazySink(dialog).getOrDie();\n const externalBlocker = externals.blocker();\n const blocker = sink.getSystem().build({\n ...externalBlocker,\n components: externalBlocker.components.concat([premade(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), () => {\n Keying.focusIn(dialog);\n })])\n ])\n });\n attach(sink, blocker);\n Keying.focusIn(dialog);\n };\n const hideDialog = dialog => {\n dialogComp.clear();\n parent(dialog.element).each(blockerDom => {\n dialog.getSystem().getByDom(blockerDom).each(blocker => {\n detach(blocker);\n });\n });\n };\n const getDialogBody = dialog => getPartOrDie(dialog, detail, 'body');\n const getDialogFooter = dialog => getPartOrDie(dialog, detail, 'footer');\n const setBusy = (dialog, getBusySpec) => {\n Blocking.block(dialog, getBusySpec);\n };\n const setIdle = dialog => {\n Blocking.unblock(dialog);\n };\n const modalEventsId = generate$6('modal-events');\n const eventOrder = {\n ...detail.eventOrder,\n [attachedToDom()]: [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || [])\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle,\n setBusy\n },\n eventOrder,\n domModification: {\n attributes: {\n 'role': 'dialog',\n 'aria-modal': 'true'\n }\n },\n behaviours: augment(detail.modalBehaviours, [\n Replacing.config({}),\n Keying.config({\n mode: 'cyclic',\n onEnter: detail.onExecute,\n onEscape: detail.onEscape,\n useTabstopAt: detail.useTabstopAt\n }),\n Blocking.config({ getRoot: dialogComp.get }),\n config(modalEventsId, [runOnAttached(c => {\n labelledBy(c.element, getPartOrDie(c, detail, 'title').element);\n describedBy(c.element, getPartOrDie(c, detail, 'body').element);\n })])\n ])\n };\n };\n const ModalDialog = composite({\n name: 'ModalDialog',\n configFields: schema$2(),\n partFields: parts$2(),\n factory: factory$4,\n apis: {\n show: (apis, dialog) => {\n apis.show(dialog);\n },\n hide: (apis, dialog) => {\n apis.hide(dialog);\n },\n getBody: (apis, dialog) => apis.getBody(dialog),\n getFooter: (apis, dialog) => apis.getFooter(dialog),\n setBusy: (apis, dialog, getBusySpec) => {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: (apis, dialog) => {\n apis.setIdle(dialog);\n }\n }\n });\n\n const dialogToggleMenuItemSchema = objOf([\n type,\n name$1\n ].concat(commonMenuItemFields));\n const dialogToggleMenuItemDataProcessor = boolean;\n\n const baseFooterButtonFields = [\n generatedName('button'),\n optionalIcon,\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n primary,\n enabled,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary'\n ])\n ];\n const dialogFooterButtonFields = [\n ...baseFooterButtonFields,\n text\n ];\n const normalFooterButtonFields = [\n requiredStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ]),\n ...dialogFooterButtonFields\n ];\n const menuFooterButtonFields = [\n requiredStringEnum('type', ['menu']),\n optionalText,\n optionalTooltip,\n optionalIcon,\n requiredArrayOf('items', dialogToggleMenuItemSchema),\n ...baseFooterButtonFields\n ];\n const dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields\n });\n\n const alertBannerFields = [\n type,\n text,\n requiredStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n icon,\n defaulted('url', '')\n ];\n const alertBannerSchema = objOf(alertBannerFields);\n\n const createBarFields = itemsField => [\n type,\n itemsField\n ];\n\n const buttonFields = [\n type,\n text,\n enabled,\n generatedName('button'),\n optionalIcon,\n borderless,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary',\n 'toolbar'\n ]),\n primary\n ];\n const buttonSchema = objOf(buttonFields);\n\n const formComponentFields = [\n type,\n name$1\n ];\n const formComponentWithLabelFields = formComponentFields.concat([optionalLabel]);\n\n const checkboxFields = formComponentFields.concat([\n label,\n enabled\n ]);\n const checkboxSchema = objOf(checkboxFields);\n const checkboxDataProcessor = boolean;\n\n const collectionFields = formComponentWithLabelFields.concat([defaultedColumns('auto')]);\n const collectionSchema = objOf(collectionFields);\n const collectionDataProcessor = arrOfObj([\n value$1,\n text,\n icon\n ]);\n\n const colorInputFields = formComponentWithLabelFields;\n const colorInputSchema = objOf(colorInputFields);\n const colorInputDataProcessor = string;\n\n const colorPickerFields = formComponentWithLabelFields;\n const colorPickerSchema = objOf(colorPickerFields);\n const colorPickerDataProcessor = string;\n\n const customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredString('scriptId'),\n requiredString('scriptUrl'),\n defaultedPostMsg('settings', undefined)\n ]);\n const customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredFunction('init')\n ]);\n const customEditorSchema = valueOf(v => asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(() => asRaw('customeditor.new', objOfOnly(customEditorFields), v)));\n const customEditorDataProcessor = string;\n\n const dropZoneFields = formComponentWithLabelFields;\n const dropZoneSchema = objOf(dropZoneFields);\n const dropZoneDataProcessor = arrOfVal();\n\n const createGridFields = itemsField => [\n type,\n requiredNumber('columns'),\n itemsField\n ];\n\n const htmlPanelFields = [\n type,\n requiredString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ])\n ];\n const htmlPanelSchema = objOf(htmlPanelFields);\n\n const iframeFields = formComponentWithLabelFields.concat([\n defaultedBoolean('sandboxed', true),\n defaultedBoolean('transparent', true)\n ]);\n const iframeSchema = objOf(iframeFields);\n const iframeDataProcessor = string;\n\n const imagePreviewSchema = objOf(formComponentFields.concat([optionString('height')]));\n const imagePreviewDataProcessor = objOf([\n requiredString('url'),\n optionNumber('zoom'),\n optionNumber('cachedWidth'),\n optionNumber('cachedHeight')\n ]);\n\n const inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled\n ]);\n const inputSchema = objOf(inputFields);\n const inputDataProcessor = string;\n\n const createLabelFields = itemsField => [\n type,\n label,\n itemsField\n ];\n\n const listBoxSingleItemFields = [\n text,\n value$1\n ];\n const listBoxNestedItemFields = [\n text,\n requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema))\n ];\n const listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n const listBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOf('items', listBoxItemSchema),\n enabled\n ]);\n const listBoxSchema = objOf(listBoxFields);\n const listBoxDataProcessor = string;\n\n const selectBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOfObj('items', [\n text,\n value$1\n ]),\n defaultedNumber('size', 1),\n enabled\n ]);\n const selectBoxSchema = objOf(selectBoxFields);\n const selectBoxDataProcessor = string;\n\n const sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n enabled\n ]);\n const sizeInputSchema = objOf(sizeInputFields);\n const sizeInputDataProcessor = objOf([\n requiredString('width'),\n requiredString('height')\n ]);\n\n const sliderFields = formComponentFields.concat([\n label,\n defaultedNumber('min', 0),\n defaultedNumber('max', 0)\n ]);\n const sliderSchema = objOf(sliderFields);\n const sliderInputDataProcessor = number;\n\n const tableFields = [\n type,\n requiredArrayOf('header', string),\n requiredArrayOf('cells', arrOf(string))\n ];\n const tableSchema = objOf(tableFields);\n\n const textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled\n ]);\n const textAreaSchema = objOf(textAreaFields);\n const textAreaDataProcessor = string;\n\n const urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n enabled\n ]);\n const urlInputSchema = objOf(urlInputFields);\n const urlInputDataProcessor = objOf([\n value$1,\n defaultedMeta\n ]);\n\n const createItemsField = name => field$1('items', 'items', required$2(), arrOf(valueOf(v => asRaw(`Checking item of ${ name }`, itemSchema, v).fold(sErr => Result.error(formatError(sErr)), passValue => Result.value(passValue)))));\n const itemSchema = valueThunk(() => choose$2('type', {\n alertbanner: alertBannerSchema,\n bar: objOf(createBarFields(createItemsField('bar'))),\n button: buttonSchema,\n checkbox: checkboxSchema,\n colorinput: colorInputSchema,\n colorpicker: colorPickerSchema,\n dropzone: dropZoneSchema,\n grid: objOf(createGridFields(createItemsField('grid'))),\n iframe: iframeSchema,\n input: inputSchema,\n listbox: listBoxSchema,\n selectbox: selectBoxSchema,\n sizeinput: sizeInputSchema,\n slider: sliderSchema,\n textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagepreview: imagePreviewSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n panel: panelSchema\n }));\n const panelFields = [\n type,\n defaulted('classes', []),\n requiredArrayOf('items', itemSchema)\n ];\n const panelSchema = objOf(panelFields);\n\n const tabFields = [\n generatedName('tab'),\n title,\n requiredArrayOf('items', itemSchema)\n ];\n const tabPanelFields = [\n type,\n requiredArrayOfObj('tabs', tabFields)\n ];\n const tabPanelSchema = objOf(tabPanelFields);\n\n const dialogButtonFields = dialogFooterButtonFields;\n const dialogButtonSchema = dialogFooterButtonSchema;\n const dialogSchema = objOf([\n requiredString('title'),\n requiredOf('body', choose$2('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n requiredArrayOf('buttons', dialogButtonSchema),\n defaulted('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onTabChange', noop)\n ]);\n const createDialog = spec => asRaw('dialog', dialogSchema, spec);\n\n const urlDialogButtonSchema = objOf([\n requiredStringEnum('type', [\n 'cancel',\n 'custom'\n ]),\n ...dialogButtonFields\n ]);\n const urlDialogSchema = objOf([\n requiredString('title'),\n requiredString('url'),\n optionNumber('height'),\n optionNumber('width'),\n optionArrayOf('buttons', urlDialogButtonSchema),\n defaultedFunction('onAction', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onMessage', noop)\n ]);\n const createUrlDialog = spec => asRaw('dialog', urlDialogSchema, spec);\n\n const getAllObjects = obj => {\n if (isObject(obj)) {\n return [obj].concat(bind$3(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind$3(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n const isNamedItem = obj => isString(obj.type) && isString(obj.name);\n const dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n imagepreview: imagePreviewDataProcessor,\n selectbox: selectBoxDataProcessor,\n sizeinput: sizeInputDataProcessor,\n slider: sliderInputDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n const getDataProcessor = item => Optional.from(dataProcessors[item.type]);\n const getNamedItems = structure => filter$2(getAllObjects(structure), isNamedItem);\n\n const createDataValidator = structure => {\n const namedItems = getNamedItems(structure);\n const fields = bind$3(namedItems, item => getDataProcessor(item).fold(() => [], schema => [requiredOf(item.name, schema)]));\n return objOf(fields);\n };\n\n const extract = structure => {\n var _a;\n const internalDialog = getOrDie(createDialog(structure));\n const dataValidator = createDataValidator(structure);\n const initialData = (_a = structure.initialData) !== null && _a !== void 0 ? _a : {};\n return {\n internalDialog,\n dataValidator,\n initialData\n };\n };\n const DialogManager = {\n open: (factory, structure) => {\n const extraction = extract(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: (factory, structure) => {\n const internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: structure => extract(structure)\n };\n\n const toValidValues = values => {\n const errors = [];\n const result = {};\n each(values, (value, name) => {\n value.fold(() => {\n errors.push(name);\n }, v => {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n const renderBodyPanel = (spec, dialogData, backstage) => {\n const memForm = record(Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map$2(spec.items, item => interpretInForm(parts, item, dialogData, backstage))\n })));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n RepresentingConfigs.memento(memForm, {\n postprocess: formValue => toValidValues(formValue).fold(err => {\n console.error(err);\n return {};\n }, identity)\n })\n ])\n };\n };\n\n const factory$3 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$a(detail.action),\n behaviours: augment(detail.tabButtonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n })\n ]),\n domModification: detail.domModification\n });\n const TabButton = single({\n name: 'TabButton',\n configFields: [\n defaulted('uid', undefined),\n required$1('value'),\n field$1('dom', 'dom', mergeWithThunk(() => ({\n attributes: {\n 'role': 'tab',\n 'id': generate$6('aria'),\n 'aria-selected': 'false'\n }\n })), anyValue()),\n option$3('action'),\n defaulted('domModification', {}),\n field('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n required$1('view')\n ],\n factory: factory$3\n });\n\n const schema$1 = constant$1([\n required$1('tabs'),\n required$1('dom'),\n defaulted('clickToDismiss', false),\n field('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers$1([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n const tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: barDetail => {\n const dismissTab$1 = (tabbar, button) => {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar,\n button\n });\n };\n const changeTab$1 = (tabbar, button) => {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar,\n button\n });\n };\n return {\n action: button => {\n const tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n const activeButton = Highlighting.isHighlighted(tabbar, button);\n const response = (() => {\n if (activeButton && barDetail.clickToDismiss) {\n return dismissTab$1;\n } else if (!activeButton) {\n return changeTab$1;\n } else {\n return noop;\n }\n })();\n response(tabbar, button);\n },\n domModification: { classes: [barDetail.markers.tabClass] }\n };\n }\n });\n const parts$1 = constant$1([tabsPart]);\n\n const factory$2 = (detail, components, _spec, _externals) => ({\n 'uid': detail.uid,\n 'dom': detail.dom,\n components,\n 'debug.sketcher': 'Tabbar',\n 'domModification': { attributes: { role: 'tablist' } },\n 'behaviours': augment(detail.tabbarBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedClass,\n itemClass: detail.markers.tabClass,\n onHighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: tabbar => {\n return Highlighting.getHighlighted(tabbar).map(tab => tab.element);\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n });\n const Tabbar = composite({\n name: 'Tabbar',\n configFields: schema$1(),\n partFields: parts$1(),\n factory: factory$2\n });\n\n const factory$1 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n });\n const Tabview = single({\n name: 'Tabview',\n configFields: [field('tabviewBehaviours', [Replacing])],\n factory: factory$1\n });\n\n const schema = constant$1([\n defaulted('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted('tabs', []),\n field('tabSectionBehaviours', [])\n ]);\n const barPart = required({\n factory: Tabbar,\n schema: [\n required$1('dom'),\n requiredObjOf('markers', [\n required$1('tabClass'),\n required$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: detail => {\n return { tabs: detail.tabs };\n }\n });\n const viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n const parts = constant$1([\n barPart,\n viewPart\n ]);\n\n const factory = (detail, components, _spec, _externals) => {\n const changeTab$1 = button => {\n const tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(tabview => {\n const tabWithValue = find$5(detail.tabs, t => t.value === tabValue);\n tabWithValue.each(tabData => {\n const panel = tabData.view();\n getOpt(button.element, 'id').each(id => {\n set$9(tabview.element, 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n const changeTabBy = (section, byPred) => {\n getPart(section, detail, 'tabbar').each(tabbar => {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$3(detail.tabSectionBehaviours),\n events: derive$2(flatten([\n detail.selectFirst ? [runOnAttached((section, _simulatedEvent) => {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run$1(changeTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run$1(dismissTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: section => {\n return getPart(section, detail, 'tabview').map(tabview => Replacing.contents(tabview)).getOr([]);\n },\n showTab: (section, tabKey) => {\n const getTabIfNotActive = tabbar => {\n const candidates = Highlighting.getCandidates(tabbar);\n const optTab = find$5(candidates, c => Representing.getValue(c) === tabKey);\n return optTab.filter(tab => !Highlighting.isHighlighted(tabbar, tab));\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n const TabSection = composite({\n name: 'TabSection',\n configFields: schema(),\n partFields: parts(),\n factory,\n apis: {\n getViewItems: (apis, component) => apis.getViewItems(component),\n showTab: (apis, component, tabKey) => {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i) => {\n Replacing.set(tabviewComp, allTabs[i].view());\n const rect = tabview.dom.getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n const getMaxHeight = heights => head(sort(heights, (a, b) => {\n if (a > b) {\n return -1;\n } else if (a < b) {\n return +1;\n } else {\n return 0;\n }\n }));\n const getMaxTabviewHeight = (dialog, tabview, tablist) => {\n const documentElement$1 = documentElement(dialog).dom;\n const rootElm = ancestor(dialog, '.tox-dialog-wrap').getOr(dialog);\n const isFixed = get$e(rootElm, 'position') === 'fixed';\n let maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n const tabviewHeight = get$d(tabview);\n const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$c(tablist);\n const currentTabHeight = isTabListBeside ? Math.max(get$d(tablist), tabviewHeight) : tabviewHeight;\n const dialogTopMargin = parseInt(get$e(dialog, 'margin-top'), 10) || 0;\n const dialogBottomMargin = parseInt(get$e(dialog, 'margin-bottom'), 10) || 0;\n const dialogHeight = get$d(dialog) + dialogTopMargin + dialogBottomMargin;\n const chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n const showTab = (allTabs, comp) => {\n head(allTabs).each(tab => TabSection.showTab(comp, tab.value));\n };\n const setTabviewHeight = (tabview, height) => {\n set$8(tabview, 'height', height + 'px');\n set$8(tabview, 'flex-basis', height + 'px');\n };\n const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => {\n ancestor(dialogBody, '[role=\"dialog\"]').each(dialog => {\n descendant(dialog, '[role=\"tablist\"]').each(tablist => {\n maxTabHeight.get().map(height => {\n set$8(tabview, 'height', '0');\n set$8(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(height => {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n const getTabview = dialog => descendant(dialog, '[role=\"tabpanel\"]');\n const smartMode = allTabs => {\n const maxTabHeight = value$2();\n const extraEvents = [\n runOnAttached(comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n set$8(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(tabviewComp => {\n const heights = measureHeights(allTabs, tabview, tabviewComp);\n const maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$6(tabview, 'visibility');\n showTab(allTabs, comp);\n requestAnimationFrame(() => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run$1(windowResize(), comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run$1(formResizeEvent, (comp, _se) => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n const oldFocus = active$1(getRootNode(tabview));\n set$8(tabview, 'visibility', 'hidden');\n const oldHeight = getRaw(tabview, 'height').map(h => parseInt(h, 10));\n remove$6(tabview, 'height');\n remove$6(tabview, 'flex-basis');\n const newHeight = tabview.dom.getBoundingClientRect().height;\n const hasGrown = oldHeight.forall(h => newHeight > h);\n if (hasGrown) {\n maxTabHeight.set(newHeight);\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(h => {\n setTabviewHeight(tabview, h);\n });\n }\n remove$6(tabview, 'visibility');\n oldFocus.each(focus$3);\n });\n })\n ];\n const selectFirst = false;\n return {\n extraEvents,\n selectFirst\n };\n };\n\n const SendDataToSectionChannel = 'send-data-to-section';\n const SendDataToViewChannel = 'send-data-to-view';\n const renderTabPanel = (spec, dialogData, backstage) => {\n const storedValue = Cell({});\n const updateDataWithForm = form => {\n const formData = Representing.getValue(form);\n const validData = toValidValues(formData).getOr({});\n const currentData = storedValue.get();\n const newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n const setDataOnForm = form => {\n const tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n const oldTab = Cell(null);\n const allTabs = map$2(spec.tabs, tab => {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item']\n },\n components: [text$1(backstage.shared.providers.translate(tab.title))],\n view: () => {\n return [Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map$2(tab.items, item => interpretInForm(parts, item, dialogData, backstage)),\n formBehaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n config('TabView.form.events', [\n runOnAttached(setDataOnForm),\n runOnDetached(updateDataWithForm)\n ]),\n Receiving.config({\n channels: wrapAll([\n {\n key: SendDataToSectionChannel,\n value: { onReceive: updateDataWithForm }\n },\n {\n key: SendDataToViewChannel,\n value: { onReceive: setDataOnForm }\n }\n ])\n })\n ])\n }))];\n }\n };\n });\n const tabMode = smartMode(allTabs);\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: (section, button, _viewItems) => {\n const name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name,\n oldName: oldTab.get()\n });\n oldTab.set(name);\n },\n tabs: allTabs,\n components: [\n TabSection.parts.tabbar({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav']\n },\n components: [Tabbar.parts.tabs({})],\n markers: {\n tabClass: 'tox-tab',\n selectedClass: 'tox-dialog__body-nav-item--active'\n },\n tabbarBehaviours: derive$1([Tabstopping.config({})])\n }),\n TabSection.parts.tabview({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n }\n })\n ],\n selectFirst: tabMode.selectFirst,\n tabSectionBehaviours: derive$1([\n config('tabpanel', tabMode.extraEvents),\n Keying.config({ mode: 'acyclic' }),\n Composing.config({ find: comp => head(TabSection.getViewItems(comp)) }),\n RepresentingConfigs.withComp(Optional.none(), tsection => {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n }, (tsection, value) => {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n })\n ])\n });\n };\n\n const dialogChannel = generate$6('update-dialog');\n const titleChannel = generate$6('update-title');\n const bodyChannel = generate$6('update-body');\n const footerChannel = generate$6('update-footer');\n const bodySendMessageChannel = generate$6('body-send-message');\n\n const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs) => {\n const renderComponents = incoming => {\n const body = incoming.body;\n switch (body.type) {\n case 'tabpanel': {\n return [renderTabPanel(body, incoming.initialData, backstage)];\n }\n default: {\n return [renderBodyPanel(body, incoming.initialData, backstage)];\n }\n }\n };\n const updateState = (_comp, incoming) => Optional.some({ isTabPanel: () => incoming.body.type === 'tabpanel' });\n const ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: {\n ...contentId.map(x => ({ id: x })).getOr({}),\n ...ariaAttrs ? ariaAttributes : {}\n }\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: `${ bodyChannel }-${ dialogId }`,\n updateState,\n renderComponents,\n initialData: spec\n })\n ])\n };\n };\n const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs);\n const renderModalBody = (spec, dialogId, backstage) => {\n const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false);\n return ModalDialog.parts.body(bodySpec);\n };\n const renderIframeBody = spec => {\n const bodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-iframe']\n },\n components: [craft({\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n })])\n };\n return ModalDialog.parts.body(bodySpec);\n };\n\n const isTouch = global$5.deviceType.isTouch();\n const hiddenHeader = (title, close) => ({\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n });\n const pClose = (onClose, providersBackstage) => ModalDialog.parts.close(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close')\n }\n },\n action: onClose,\n buttonBehaviours: derive$1([Tabstopping.config({})])\n }));\n const pUntitled = () => ModalDialog.parts.title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [{ dom: fromHtml(`

${ providersBackstage.translate(message) }

`) }]\n }]\n });\n const pFooter = buttons => ModalDialog.parts.footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n const pFooterGroup = (startButtons, endButtons) => [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-start']\n },\n components: startButtons\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-end']\n },\n components: endButtons\n })\n ];\n const renderDialog$1 = spec => {\n const dialogClass = 'tox-dialog';\n const blockerClass = dialogClass + '-wrap';\n const blockerBackdropClass = blockerClass + '__backdrop';\n const scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: comp => {\n spec.onEscape(comp);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem),\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: {\n position: 'relative',\n ...spec.extraStyles\n }\n },\n components: [\n spec.header,\n spec.body,\n ...spec.footer.toArray()\n ],\n parts: {\n blocker: {\n dom: fromHtml(`
`),\n components: [{\n dom: {\n tag: 'div',\n classes: isTouch ? [\n blockerBackdropClass,\n blockerBackdropClass + '--opaque'\n ] : [blockerBackdropClass]\n }\n }]\n }\n },\n dragBlockClass: blockerClass,\n modalBehaviours: derive$1([\n Focusing.config({}),\n config('dialog-events', spec.dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n Keying.focusIn(comp);\n })])),\n config('scroll-lock', [\n runOnAttached(() => {\n add$2(body(), scrollLockClass);\n }),\n runOnDetached(() => {\n remove$2(body(), scrollLockClass);\n })\n ]),\n ...spec.extraBehaviours\n ]),\n eventOrder: {\n [execute$5()]: ['dialog-events'],\n [attachedToDom()]: [\n 'scroll-lock',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'scroll-lock'\n ],\n ...spec.eventOrder\n }\n });\n };\n\n const renderClose = providersBackstage => Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close'),\n 'title': providersBackstage.translate('Close')\n }\n },\n components: [render$3('close', {\n tag: 'div',\n classes: ['tox-icon']\n }, providersBackstage.icons)],\n action: comp => {\n emit(comp, formCancelEvent);\n }\n });\n const renderTitle = (spec, dialogId, titleId, providersBackstage) => {\n const renderComponents = data => [text$1(providersBackstage.translate(data.title))];\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n attributes: { ...titleId.map(x => ({ id: x })).getOr({}) }\n },\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ titleChannel }-${ dialogId }`,\n initialData: spec,\n renderComponents\n })])\n };\n };\n const renderDragHandle = () => ({ dom: fromHtml('
') });\n const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container.sketch({\n dom: fromHtml('
'),\n components: [\n renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: handle => {\n return closest$1(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: () => [],\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n const renderModalHeader = (spec, dialogId, providersBackstage) => {\n const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage));\n const pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n const pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n const components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml('
'),\n components\n });\n };\n\n const getHeader = (title, dialogId, backstage) => renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, dialogId, backstage.shared.providers);\n const getBusySpec = (message, bs, providers) => ({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': providers.translate(message) },\n styles: {\n left: '0px',\n right: '0px',\n bottom: '0px',\n top: '0px',\n position: 'absolute'\n }\n },\n behaviours: bs,\n components: [{ dom: fromHtml('
') }]\n });\n const getEventExtras = (lazyDialog, providers, extra) => ({\n onClose: () => extra.closeWindow(),\n onBlock: blockEvent => {\n ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers));\n },\n onUnblock: () => {\n ModalDialog.setIdle(lazyDialog());\n }\n });\n const renderModalDialog = (spec, initialData, dialogEvents, backstage) => {\n const updateState = (_comp, incoming) => Optional.some(incoming);\n return build$1(renderDialog$1({\n ...spec,\n lazySink: backstage.shared.getSink,\n extraBehaviours: [\n Reflecting.config({\n channel: `${ dialogChannel }-${ spec.id }`,\n updateState,\n initialData\n }),\n RepresentingConfigs.memory({}),\n ...spec.extraBehaviours\n ],\n onEscape: comp => {\n emit(comp, formCancelEvent);\n },\n dialogEvents,\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [attachedToDom()]: [\n 'scroll-lock',\n Reflecting.name(),\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n Reflecting.name(),\n 'scroll-lock'\n ]\n }\n }));\n };\n const mapMenuButtons = buttons => {\n const mapItems = button => {\n const items = map$2(button.items, item => {\n const cell = Cell(false);\n return {\n ...item,\n storage: cell\n };\n });\n return {\n ...button,\n items\n };\n };\n return map$2(buttons, button => {\n return button.type === 'menu' ? mapItems(button) : button;\n });\n };\n const extractCellsToObject = buttons => foldl(buttons, (acc, button) => {\n if (button.type === 'menu') {\n const menuButton = button;\n return foldl(menuButton.items, (innerAcc, item) => {\n innerAcc[item.name] = item.storage;\n return innerAcc;\n }, acc);\n }\n return acc;\n }, {});\n\n const initCommonEvents = (fireApiEvent, extras) => [\n runWithTarget(focusin(), onFocus),\n fireApiEvent(formCloseEvent, (_api, spec) => {\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, (api, spec, _event, self) => {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()),\n run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event))\n ];\n const initUrlDialog = (getInstanceApi, extras) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialog => {\n f(currentDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formActionEvent, (api, spec, event) => {\n spec.onAction(api, { name: event.name });\n })\n ];\n };\n const initDialog = (getInstanceApi, extras, getSink) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialogInit => {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formSubmitEvent, (api, spec) => spec.onSubmit(api)),\n fireApiEvent(formChangeEvent, (api, spec, event) => {\n spec.onChange(api, { name: event.name });\n }),\n fireApiEvent(formActionEvent, (api, spec, event, component) => {\n const focusIn = () => Keying.focusIn(component);\n const isDisabled = focused => has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(val => val === 'true');\n const rootNode = getRootNode(component.element);\n const current = active$1(rootNode);\n spec.onAction(api, {\n name: event.name,\n value: event.value\n });\n active$1(rootNode).fold(focusIn, focused => {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(cur => contains(focused, cur) && isDisabled(cur))) {\n focusIn();\n } else {\n getSink().toOptional().filter(sink => !contains(sink.element, focused)).each(focusIn);\n }\n });\n }),\n fireApiEvent(formTabChangeEvent, (api, spec, event) => {\n spec.onTabChange(api, {\n newTabName: event.name,\n oldTabName: event.oldName\n });\n }),\n runOnDetached(component => {\n const api = getInstanceApi();\n Representing.setValue(component, api.getData());\n })\n ];\n };\n const SilverDialogEvents = {\n initUrlDialog,\n initDialog\n };\n\n const makeButton = (button, backstage) => renderFooterButton(button, button.type, backstage);\n const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, button => button.name === buttonName).bind(memButton => memButton.memento.getOpt(compInSystem));\n const renderComponents = (_data, state) => {\n const footerButtons = state.map(s => s.footerButtons).getOr([]);\n const buttonGroups = partition$3(footerButtons, button => button.align === 'start');\n const makeGroup = (edge, buttons) => Container.sketch({\n dom: {\n tag: 'div',\n classes: [`tox-dialog__footer-${ edge }`]\n },\n components: map$2(buttons, button => button.memento.asSpec())\n });\n const startButtons = makeGroup('start', buttonGroups.pass);\n const endButtons = makeGroup('end', buttonGroups.fail);\n return [\n startButtons,\n endButtons\n ];\n };\n const renderFooter = (initSpec, dialogId, backstage) => {\n const updateState = (comp, data) => {\n const footerButtons = map$2(data.buttons, button => {\n const memButton = record(makeButton(button, backstage));\n return {\n name: button.name,\n align: button.align,\n memento: memButton\n };\n });\n const lookupByName = buttonName => lookup(comp, footerButtons, buttonName);\n return Optional.some({\n lookupByName,\n footerButtons\n });\n };\n return {\n dom: fromHtml('
'),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ footerChannel }-${ dialogId }`,\n initialData: initSpec,\n updateState,\n renderComponents\n })])\n };\n };\n const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage);\n const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage));\n\n const getCompByName = (access, name) => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form, name).orThunk(() => {\n const footer = access.getFooter();\n const footerState = Reflecting.getState(footer).get();\n return footerState.bind(f => f.lookupByName(name));\n });\n } else {\n return Optional.none();\n }\n };\n const validateData$1 = (access, data) => {\n const root = access.getRoot();\n return Reflecting.getState(root).get().map(dialogState => getOrDie(asRaw('data', dialogState.dataValidator, data))).getOr(data);\n };\n const getDialogApi = (access, doRedial, menuItemStates) => {\n const withRoot = f => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const getData = () => {\n const root = access.getRoot();\n const valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n const representedValues = Representing.getValue(valueComp);\n const menuItemCurrentState = map$1(menuItemStates, cell => cell.get());\n return {\n ...representedValues,\n ...menuItemCurrentState\n };\n };\n const setData = newData => {\n withRoot(_ => {\n const prevData = instanceApi.getData();\n const mergedData = deepMerge(prevData, newData);\n const newInternalData = validateData$1(access, mergedData);\n const form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each(menuItemStates, (v, k) => {\n if (has$2(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n const setEnabled = (name, state) => {\n getCompByName(access, name).each(state ? Disabling.enable : Disabling.disable);\n };\n const focus = name => {\n getCompByName(access, name).each(Focusing.focus);\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const showTab = name => {\n withRoot(_ => {\n const body = access.getBody();\n const bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(b => b.isTabPanel())) {\n Composing.getCurrent(body).each(tabSection => {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n const redial = d => {\n withRoot(root => {\n const id = access.getId();\n const dialogInit = doRedial(d);\n root.getSystem().broadcastOn([`${ dialogChannel }-${ id }`], dialogInit);\n root.getSystem().broadcastOn([`${ titleChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ bodyChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ footerChannel }-${ id }`], dialogInit.internalDialog);\n instanceApi.setData(dialogInit.initialData);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const instanceApi = {\n getData,\n setData,\n setEnabled,\n focus,\n block,\n unblock,\n showTab,\n redial,\n close\n };\n return instanceApi;\n };\n\n const getDialogSizeClasses = size => {\n switch (size) {\n case 'large':\n return ['tox-dialog--width-lg'];\n case 'medium':\n return ['tox-dialog--width-md'];\n default:\n return [];\n }\n };\n const renderDialog = (dialogInit, extra, backstage) => {\n const dialogId = generate$6('dialog');\n const internalDialog = dialogInit.internalDialog;\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const body = renderModalBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, backstage);\n const storedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storedMenuButtons);\n const footer = renderModalFooter({ buttons: storedMenuButtons }, dialogId, backstage);\n const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink);\n const dialogSize = getDialogSizeClasses(internalDialog.size);\n const spec = {\n id: dialogId,\n header,\n body,\n footer: Optional.some(footer),\n extraClasses: dialogSize,\n extraBehaviours: [],\n extraStyles: {}\n };\n const dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n const modalAccess = (() => {\n const getForm = () => {\n const outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n return {\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getBody: () => ModalDialog.getBody(dialog),\n getFooter: () => ModalDialog.getFooter(dialog),\n getFormWrapper: getForm\n };\n })();\n const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs) => {\n const dialogId = generate$6('dialog');\n const dialogLabelId = generate$6('dialog-label');\n const dialogContentId = generate$6('dialog-content');\n const internalDialog = dialogInit.internalDialog;\n const updateState = (_comp, incoming) => Optional.some(incoming);\n const memHeader = record(renderInlineHeader({\n title: internalDialog.title,\n draggable: true\n }, dialogId, dialogLabelId, backstage.shared.providers));\n const memBody = record(renderInlineBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, dialogContentId, backstage, ariaAttrs));\n const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storagedMenuButtons);\n const memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, dialogId, backstage));\n const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, {\n onBlock: event => {\n Blocking.block(dialog, (_comp, bs) => getBusySpec(event.message, bs, backstage.shared.providers));\n },\n onUnblock: () => {\n Blocking.unblock(dialog);\n },\n onClose: () => extra.closeWindow()\n }, backstage.shared.getSink);\n const dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n 'tox-dialog-inline'\n ],\n attributes: {\n role: 'dialog',\n ['aria-labelledby']: dialogLabelId,\n ['aria-describedby']: dialogContentId\n }\n },\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [execute$5()]: ['execute-on-form'],\n [attachedToDom()]: [\n 'reflecting',\n 'execute-on-form'\n ]\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: c => {\n emit(c, formCloseEvent);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem) && (name$3(elem) !== 'button' || get$f(elem, 'disabled') !== 'disabled')\n }),\n Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n Keying.focusIn(comp);\n })])),\n Blocking.config({ getRoot: () => Optional.some(dialog) }),\n Replacing.config({}),\n RepresentingConfigs.memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n memFooter.asSpec()\n ]\n });\n const instanceApi = getDialogApi({\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getFooter: () => memFooter.get(dialog),\n getBody: () => memBody.get(dialog),\n getFormWrapper: () => {\n const body = memBody.get(dialog);\n return Composing.getCurrent(body).getOr(body);\n }\n }, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n const getUrlDialogApi = root => {\n const withRoot = f => {\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const sendMessage = data => {\n withRoot(root => {\n root.getSystem().broadcastOn([bodySendMessageChannel], data);\n });\n };\n return {\n block,\n unblock,\n close,\n sendMessage\n };\n };\n\n const SUPPORTED_MESSAGE_ACTIONS = [\n 'insertContent',\n 'setContent',\n 'execCommand',\n 'close',\n 'block',\n 'unblock'\n ];\n const isSupportedMessage = data => isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n const isCustomMessage = data => !isSupportedMessage(data) && isObject(data) && has$2(data, 'mceAction');\n const handleMessage = (editor, api, data) => {\n switch (data.mceAction) {\n case 'insertContent':\n editor.insertContent(data.content);\n break;\n case 'setContent':\n editor.setContent(data.content);\n break;\n case 'execCommand':\n const ui = isBoolean(data.ui) ? data.ui : false;\n editor.execCommand(data.cmd, ui, data.value);\n break;\n case 'close':\n api.close();\n break;\n case 'block':\n api.block(data.message);\n break;\n case 'unblock':\n api.unblock();\n break;\n }\n };\n const renderUrlDialog = (internalDialog, extra, editor, backstage) => {\n const dialogId = generate$6('dialog');\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const body = renderIframeBody(internalDialog);\n const footer = internalDialog.buttons.bind(buttons => {\n if (buttons.length === 0) {\n return Optional.none();\n } else {\n return Optional.some(renderModalFooter({ buttons }, dialogId, backstage));\n }\n });\n const dialogEvents = SilverDialogEvents.initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra));\n const styles = {\n ...internalDialog.height.fold(() => ({}), height => ({\n 'height': height + 'px',\n 'max-height': height + 'px'\n })),\n ...internalDialog.width.fold(() => ({}), width => ({\n 'width': width + 'px',\n 'max-width': width + 'px'\n }))\n };\n const classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n const iframeUri = new global(internalDialog.url, { base_uri: new global(window.location.href) });\n const iframeDomain = `${ iframeUri.protocol }://${ iframeUri.host }${ iframeUri.port ? ':' + iframeUri.port : '' }`;\n const messageHandlerUnbinder = unbindable();\n const extraBehaviours = [\n config('messages', [\n runOnAttached(() => {\n const unbind = bind(SugarElement.fromDom(window), 'message', e => {\n if (iframeUri.isSameOrigin(new global(e.raw.origin))) {\n const data = e.raw.data;\n if (isSupportedMessage(data)) {\n handleMessage(editor, instanceApi, data);\n } else if (isCustomMessage(data)) {\n internalDialog.onMessage(instanceApi, data);\n }\n }\n });\n messageHandlerUnbinder.set(unbind);\n }),\n runOnDetached(messageHandlerUnbinder.clear)\n ]),\n Receiving.config({\n channels: {\n [bodySendMessageChannel]: {\n onReceive: (comp, data) => {\n descendant(comp.element, 'iframe').each(iframeEle => {\n const iframeWin = iframeEle.dom.contentWindow;\n if (isNonNullable(iframeWin)) {\n iframeWin.postMessage(data, iframeDomain);\n }\n });\n }\n }\n }\n })\n ];\n const spec = {\n id: dialogId,\n header,\n body,\n footer,\n extraClasses: classes,\n extraBehaviours,\n extraStyles: styles\n };\n const dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);\n const instanceApi = getUrlDialogApi(dialog);\n return {\n dialog,\n instanceApi\n };\n };\n\n const setup$2 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = () => {\n ModalDialog.hide(alertDialog);\n callback();\n };\n const memFooterClose = record(renderFooterButton({\n name: 'close-alert',\n text: 'OK',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage));\n const titleSpec = pUntitled();\n const closeSpec = pClose(closeDialog, sharedBackstage.providers);\n const alertDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n onEscape: closeDialog,\n extraClasses: ['tox-alert-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [run$1(formCancelEvent, closeDialog)],\n eventOrder: {}\n }));\n ModalDialog.show(alertDialog);\n const footerCloseButton = memFooterClose.get(alertDialog);\n Focusing.focus(footerCloseButton);\n };\n return { open };\n };\n\n const setup$1 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = state => {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n const memFooterYes = record(renderFooterButton({\n name: 'yes',\n text: 'Yes',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'submit', backstage));\n const footerNo = renderFooterButton({\n name: 'no',\n text: 'No',\n primary: false,\n buttonType: Optional.some('secondary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage);\n const titleSpec = pUntitled();\n const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers);\n const confirmDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [\n footerNo,\n memFooterYes.asSpec()\n ]))),\n onEscape: () => closeDialog(false),\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run$1(formCancelEvent, () => closeDialog(false)),\n run$1(formSubmitEvent, () => closeDialog(true))\n ],\n eventOrder: {}\n }));\n ModalDialog.show(confirmDialog);\n const footerYesButton = memFooterYes.get(confirmDialog);\n Focusing.focus(footerYesButton);\n };\n return { open };\n };\n\n const validateData = (data, validator) => getOrDie(asRaw('data', validator, data));\n const isAlertOrConfirmDialog = target => closest(target, '.tox-alert-dialog') || closest(target, '.tox-confirm-dialog');\n const inlineAdditionalBehaviours = (editor, isStickyToolbar, isToolbarLocationTop) => {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: ['top']\n })];\n }\n };\n const setup = extras => {\n const backstage = extras.backstage;\n const editor = extras.editor;\n const isStickyToolbar$1 = isStickyToolbar(editor);\n const alertDialog = setup$2(backstage);\n const confirmDialog = setup$1(backstage);\n const open = (config, params, closeWindow) => {\n if (params !== undefined && params.inline === 'toolbar') {\n return openInlineDialog(config, backstage.shared.anchors.inlineDialog(), closeWindow, params.ariaAttrs);\n } else if (params !== undefined && params.inline === 'cursor') {\n return openInlineDialog(config, backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);\n } else {\n return openModalDialog(config, closeWindow);\n }\n };\n const openUrl = (config, closeWindow) => openModalUrlDialog(config, closeWindow);\n const openModalUrlDialog = (config, closeWindow) => {\n const factory = contents => {\n const dialog = renderUrlDialog(contents, {\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, editor, backstage);\n ModalDialog.show(dialog.dialog);\n return dialog.instanceApi;\n };\n return DialogManager.openUrl(factory, config);\n };\n const openModalDialog = (config, closeWindow) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = internalInitialData;\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const dialog = renderDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, backstage);\n ModalDialog.show(dialog.dialog);\n dialog.instanceApi.setData(initialData);\n return dialog.instanceApi;\n };\n return DialogManager.open(factory, config);\n };\n const openInlineDialog = (config$1, anchor, closeWindow, ariaAttrs = false) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = validateData(internalInitialData, dataValidator);\n const inlineDialog = value$2();\n const isToolbarLocationTop = backstage.shared.header.isPositionedAtTop();\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const refreshDocking = () => inlineDialog.on(dialog => {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n const dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, backstage, ariaAttrs);\n const inlineDialogComp = build$1(InlineView.sketch({\n lazySink: backstage.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: {},\n ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n emit(dialogUi.dialog, formCancelEvent);\n })]),\n ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop)\n ]),\n isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n }));\n inlineDialog.set(inlineDialogComp);\n InlineView.showWithin(inlineDialogComp, premade(dialogUi.dialog), { anchor }, Optional.some(body()));\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n const confirm = (message, callback) => {\n confirmDialog.open(message, callback);\n };\n const alert = (message, callback) => {\n alertDialog.open(message, callback);\n };\n const close = instanceApi => {\n instanceApi.close();\n };\n return {\n open,\n openUrl,\n alert,\n close,\n confirm\n };\n };\n\n const registerOptions = editor => {\n register$e(editor);\n register$d(editor);\n register(editor);\n };\n var Theme = () => {\n global$a.add('silver', editor => {\n registerOptions(editor);\n const {getUiMothership, backstage, renderUI} = setup$3(editor);\n Autocompleter.register(editor, backstage.shared);\n const windowMgr = setup({\n editor,\n backstage\n });\n return {\n renderUI,\n getWindowManagerImpl: constant$1(windowMgr),\n getNotificationManagerImpl: () => NotificationManagerImpl(editor, { backstage }, getUiMothership())\n };\n });\n };\n\n Theme();\n\n})();\n","// Exports the \"template\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/template')\n// ES2015:\n// import 'tinymce/plugins/template'\nrequire('./plugin.js');","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('pagebreak_separator', {\n processor: 'string',\n default: ''\n });\n registerOption('pagebreak_split_block', {\n processor: 'boolean',\n default: false\n });\n };\n const getSeparatorHtml = option('pagebreak_separator');\n const shouldSplitBlock = option('pagebreak_split_block');\n\n const pageBreakClass = 'mce-pagebreak';\n const getPlaceholderHtml = shouldSplitBlock => {\n const html = ``;\n return shouldSplitBlock ? `

${ html }

` : html;\n };\n const setup$1 = editor => {\n const separatorHtml = getSeparatorHtml(editor);\n const shouldSplitBlock$1 = () => shouldSplitBlock(editor);\n const pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\\?\\.\\*\\[\\]\\(\\)\\{\\}\\+\\^\\$\\:]/g, a => {\n return '\\\\' + a;\n }), 'gi');\n editor.on('BeforeSetContent', e => {\n e.content = e.content.replace(pageBreakSeparatorRegExp, getPlaceholderHtml(shouldSplitBlock$1()));\n });\n editor.on('PreInit', () => {\n editor.serializer.addNodeFilter('img', nodes => {\n let i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (className && className.indexOf(pageBreakClass) !== -1) {\n const parentNode = node.parent;\n if (parentNode && editor.schema.getBlockElements()[parentNode.name] && shouldSplitBlock$1()) {\n parentNode.type = 3;\n parentNode.value = separatorHtml;\n parentNode.raw = true;\n node.remove();\n continue;\n }\n node.type = 3;\n node.value = separatorHtml;\n node.raw = true;\n }\n }\n });\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mcePageBreak', () => {\n editor.insertContent(getPlaceholderHtml(shouldSplitBlock(editor)));\n });\n };\n\n const setup = editor => {\n editor.on('ResolveName', e => {\n if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, pageBreakClass)) {\n e.name = 'pagebreak';\n }\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mcePageBreak');\n editor.ui.registry.addButton('pagebreak', {\n icon: 'page-break',\n tooltip: 'Page break',\n onAction\n });\n editor.ui.registry.addMenuItem('pagebreak', {\n text: 'Page break',\n icon: 'page-break',\n onAction\n });\n };\n\n var Plugin = () => {\n global$1.add('pagebreak', editor => {\n register$2(editor);\n register$1(editor);\n register(editor);\n setup$1(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","// Exports the \"help\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/help')\n// ES2015:\n// import 'tinymce/plugins/help'\nrequire('./plugin.js');","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const never = constant(false);\n\n const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('template_cdate_classes', {\n processor: 'string',\n default: 'cdate'\n });\n registerOption('template_mdate_classes', {\n processor: 'string',\n default: 'mdate'\n });\n registerOption('template_selected_content_classes', {\n processor: 'string',\n default: 'selcontent'\n });\n registerOption('template_preview_replace_values', { processor: 'object' });\n registerOption('template_replace_values', { processor: 'object' });\n registerOption('templates', {\n processor: value => isString(value) || isArrayOf(value, isObject) || isFunction(value),\n default: []\n });\n registerOption('template_cdate_format', {\n processor: 'string',\n default: editor.translate('%Y-%m-%d')\n });\n registerOption('template_mdate_format', {\n processor: 'string',\n default: editor.translate('%Y-%m-%d')\n });\n };\n const getCreationDateClasses = option('template_cdate_classes');\n const getModificationDateClasses = option('template_mdate_classes');\n const getSelectedContentClasses = option('template_selected_content_classes');\n const getPreviewReplaceValues = option('template_preview_replace_values');\n const getTemplateReplaceValues = option('template_replace_values');\n const getTemplates = option('templates');\n const getCdateFormat = option('template_cdate_format');\n const getMdateFormat = option('template_mdate_format');\n const getContentStyle = option('content_style');\n const shouldUseContentCssCors = option('content_css_cors');\n const getBodyClass = option('body_class');\n\n const addZeros = (value, len) => {\n value = '' + value;\n if (value.length < len) {\n for (let i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n const getDateTime = (editor, fmt, date = new Date()) => {\n const daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n const daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n const monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n const monthsLong = 'January February March April May June July August September October November December'.split(' ');\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n\n const hasOwnProperty = Object.hasOwnProperty;\n const get = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const entitiesAttr = {\n '\"': '"',\n '<': '<',\n '>': '>',\n '&': '&',\n '\\'': '''\n };\n const htmlEscape = html => html.replace(/[\"'<>&]/g, match => get(entitiesAttr, match).getOr(match));\n const hasAnyClasses = (dom, n, classes) => exists(classes.split(/\\s+/), c => dom.hasClass(n, c));\n\n const createTemplateList = (editor, callback) => {\n return () => {\n const templateList = getTemplates(editor);\n if (isFunction(templateList)) {\n templateList(callback);\n } else if (isString(templateList)) {\n fetch(templateList).then(res => {\n if (res.ok) {\n res.json().then(callback);\n }\n });\n } else {\n callback(templateList);\n }\n };\n };\n const replaceTemplateValues = (html, templateValues) => {\n global$1.each(templateValues, (v, k) => {\n if (isFunction(v)) {\n v = v(k);\n }\n html = html.replace(new RegExp('\\\\{\\\\$' + escape(k) + '\\\\}', 'g'), v);\n });\n return html;\n };\n const replaceVals = (editor, scope) => {\n const dom = editor.dom, vl = getTemplateReplaceValues(editor);\n global$1.each(dom.select('*', scope), e => {\n global$1.each(vl, (v, k) => {\n if (dom.hasClass(e, k)) {\n if (isFunction(v)) {\n v(e);\n }\n }\n });\n });\n };\n const insertTemplate = (editor, _ui, html) => {\n const dom = editor.dom;\n const sel = editor.selection.getContent();\n html = replaceTemplateValues(html, getTemplateReplaceValues(editor));\n let el = dom.create('div', {}, html);\n const n = dom.select('.mceTmpl', el);\n if (n && n.length > 0) {\n el = dom.create('div');\n el.appendChild(n[0].cloneNode(true));\n }\n global$1.each(dom.select('*', el), n => {\n if (hasAnyClasses(dom, n, getCreationDateClasses(editor))) {\n n.innerHTML = getDateTime(editor, getCdateFormat(editor));\n }\n if (hasAnyClasses(dom, n, getModificationDateClasses(editor))) {\n n.innerHTML = getDateTime(editor, getMdateFormat(editor));\n }\n if (hasAnyClasses(dom, n, getSelectedContentClasses(editor))) {\n n.innerHTML = sel;\n }\n });\n replaceVals(editor, el);\n editor.execCommand('mceInsertContent', false, el.innerHTML);\n editor.addVisual();\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const getPreviewContent = (editor, html) => {\n var _a;\n if (html.indexOf('') === -1) {\n let contentCssEntries = '';\n const contentStyle = (_a = getContentStyle(editor)) !== null && _a !== void 0 ? _a : '';\n const cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global$1.each(editor.contentCSS, url => {\n contentCssEntries += '';\n });\n if (contentStyle) {\n contentCssEntries += '';\n }\n const bodyClass = getBodyClass(editor);\n const encode = editor.dom.encode;\n const isMetaKeyPressed = global.os.isMacOS() || global.os.isiOS() ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n const preventClicksOnLinksScript = ' ';\n const directionality = editor.getBody().dir;\n const dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n html = '' + '' + '' + '' + contentCssEntries + preventClicksOnLinksScript + '' + '' + html + '' + '';\n }\n return replaceTemplateValues(html, getPreviewReplaceValues(editor));\n };\n const open = (editor, templateList) => {\n const createTemplates = () => {\n if (!templateList || templateList.length === 0) {\n const message = editor.translate('No templates defined.');\n editor.notificationManager.open({\n text: message,\n type: 'info'\n });\n return Optional.none();\n }\n return Optional.from(global$1.map(templateList, (template, index) => {\n const isUrlTemplate = t => t.url !== undefined;\n return {\n selected: index === 0,\n text: template.title,\n value: {\n url: isUrlTemplate(template) ? Optional.from(template.url) : Optional.none(),\n content: !isUrlTemplate(template) ? Optional.from(template.content) : Optional.none(),\n description: template.description\n }\n };\n }));\n };\n const createSelectBoxItems = templates => map(templates, t => ({\n text: t.text,\n value: t.text\n }));\n const findTemplate = (templates, templateTitle) => find(templates, t => t.text === templateTitle);\n const loadFailedAlert = api => {\n editor.windowManager.alert('Could not load the specified template.', () => api.focus('template'));\n };\n const getTemplateContent = t => t.value.url.fold(() => Promise.resolve(t.value.content.getOr('')), url => fetch(url).then(res => res.ok ? res.text() : Promise.reject()));\n const onChange = (templates, updateDialog) => (api, change) => {\n if (change.name === 'template') {\n const newTemplateTitle = api.getData().template;\n findTemplate(templates, newTemplateTitle).each(t => {\n api.block('Loading...');\n getTemplateContent(t).then(previewHtml => {\n updateDialog(api, t, previewHtml);\n }).catch(() => {\n updateDialog(api, t, '');\n api.setEnabled('save', false);\n loadFailedAlert(api);\n });\n });\n }\n };\n const onSubmit = templates => api => {\n const data = api.getData();\n findTemplate(templates, data.template).each(t => {\n getTemplateContent(t).then(previewHtml => {\n editor.execCommand('mceInsertTemplate', false, previewHtml);\n api.close();\n }).catch(() => {\n api.setEnabled('save', false);\n loadFailedAlert(api);\n });\n });\n };\n const openDialog = templates => {\n const selectBoxItems = createSelectBoxItems(templates);\n const buildDialogSpec = (bodyItems, initialData) => ({\n title: 'Insert Template',\n size: 'large',\n body: {\n type: 'panel',\n items: bodyItems\n },\n initialData,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: onSubmit(templates),\n onChange: onChange(templates, updateDialog)\n });\n const updateDialog = (dialogApi, template, previewHtml) => {\n const content = getPreviewContent(editor, previewHtml);\n const bodyItems = [\n {\n type: 'selectbox',\n name: 'template',\n label: 'Templates',\n items: selectBoxItems\n },\n {\n type: 'htmlpanel',\n html: `

${ htmlEscape(template.value.description) }

`\n },\n {\n label: 'Preview',\n type: 'iframe',\n name: 'preview',\n sandboxed: false,\n transparent: false\n }\n ];\n const initialData = {\n template: template.text,\n preview: content\n };\n dialogApi.unblock();\n dialogApi.redial(buildDialogSpec(bodyItems, initialData));\n dialogApi.focus('template');\n };\n const dialogApi = editor.windowManager.open(buildDialogSpec([], {\n template: '',\n preview: ''\n }));\n dialogApi.block('Loading...');\n getTemplateContent(templates[0]).then(previewHtml => {\n updateDialog(dialogApi, templates[0], previewHtml);\n }).catch(() => {\n updateDialog(dialogApi, templates[0], '');\n dialogApi.setEnabled('save', false);\n loadFailedAlert(dialogApi);\n });\n };\n const optTemplates = createTemplates();\n optTemplates.each(openDialog);\n };\n\n const showDialog = editor => templates => {\n open(editor, templates);\n };\n const register$1 = editor => {\n editor.addCommand('mceInsertTemplate', curry(insertTemplate, editor));\n editor.addCommand('mceTemplate', createTemplateList(editor, showDialog(editor)));\n };\n\n const setup = editor => {\n editor.on('PreProcess', o => {\n const dom = editor.dom, dateFormat = getMdateFormat(editor);\n global$1.each(dom.select('div', o.node), e => {\n if (dom.hasClass(e, 'mceTmpl')) {\n global$1.each(dom.select('*', e), e => {\n if (hasAnyClasses(dom, e, getModificationDateClasses(editor))) {\n e.innerHTML = getDateTime(editor, dateFormat);\n }\n });\n replaceVals(editor, e);\n }\n });\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceTemplate');\n editor.ui.registry.addButton('template', {\n icon: 'template',\n tooltip: 'Insert template',\n onAction\n });\n editor.ui.registry.addMenuItem('template', {\n icon: 'template',\n text: 'Insert template...',\n onAction\n });\n };\n\n var Plugin = () => {\n global$2.add('template', editor => {\n register$2(editor);\n register(editor);\n register$1(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n };\n const allowHtmlInNamedAnchor = option('allow_html_in_named_anchor');\n\n const namedAnchorSelector = 'a:not([href])';\n const isEmptyString = str => !str;\n const getIdFromAnchor = elm => {\n const id = elm.getAttribute('id') || elm.getAttribute('name');\n return id || '';\n };\n const isAnchor = elm => elm.nodeName.toLowerCase() === 'a';\n const isNamedAnchor = elm => isAnchor(elm) && !elm.getAttribute('href') && getIdFromAnchor(elm) !== '';\n const isEmptyNamedAnchor = elm => isNamedAnchor(elm) && !elm.firstChild;\n\n const removeEmptyNamedAnchorsInSelection = editor => {\n const dom = editor.dom;\n global$1(dom).walk(editor.selection.getRng(), nodes => {\n global.each(nodes, node => {\n if (isEmptyNamedAnchor(node)) {\n dom.remove(node, false);\n }\n });\n });\n };\n const isValidId = id => /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n const getNamedAnchor = editor => editor.dom.getParent(editor.selection.getStart(), namedAnchorSelector);\n const getId = editor => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n return getIdFromAnchor(anchor);\n } else {\n return '';\n }\n };\n const createAnchor = (editor, id) => {\n editor.undoManager.transact(() => {\n if (!allowHtmlInNamedAnchor(editor)) {\n editor.selection.collapse(true);\n }\n if (editor.selection.isCollapsed()) {\n editor.insertContent(editor.dom.createHTML('a', { id }));\n } else {\n removeEmptyNamedAnchorsInSelection(editor);\n editor.formatter.remove('namedAnchor', undefined, undefined, true);\n editor.formatter.apply('namedAnchor', { value: id });\n editor.addVisual();\n }\n });\n };\n const updateAnchor = (editor, id, anchorElement) => {\n anchorElement.removeAttribute('name');\n anchorElement.id = id;\n editor.addVisual();\n editor.undoManager.add();\n };\n const insert = (editor, id) => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n updateAnchor(editor, id, anchor);\n } else {\n createAnchor(editor, id);\n }\n editor.focus();\n };\n\n const insertAnchor = (editor, newId) => {\n if (!isValidId(newId)) {\n editor.windowManager.alert('ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return false;\n } else {\n insert(editor, newId);\n return true;\n }\n };\n const open = editor => {\n const currentId = getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n name: 'id',\n type: 'input',\n label: 'ID',\n placeholder: 'example'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { id: currentId },\n onSubmit: api => {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mceAnchor', () => {\n open(editor);\n });\n };\n\n const isNamedAnchorNode = node => isEmptyString(node.attr('href')) && !isEmptyString(node.attr('id') || node.attr('name'));\n const isEmptyNamedAnchorNode = node => isNamedAnchorNode(node) && !node.firstChild;\n const setContentEditable = state => nodes => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isEmptyNamedAnchorNode(node)) {\n node.attr('contenteditable', state);\n }\n }\n };\n const setup = editor => {\n editor.on('PreInit', () => {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n\n const registerFormats = editor => {\n editor.formatter.register('namedAnchor', {\n inline: 'a',\n selector: namedAnchorSelector,\n remove: 'all',\n split: true,\n deep: true,\n attributes: { id: '%value' },\n onmatch: (node, _fmt, _itemName) => {\n return isNamedAnchor(node);\n }\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceAnchor');\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction,\n onSetup: buttonApi => editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction\n });\n };\n\n var Plugin = () => {\n global$2.add('anchor', editor => {\n register$2(editor);\n setup(editor);\n register$1(editor);\n register(editor);\n editor.on('PreInit', () => {\n registerFormats(editor);\n });\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireInsertCustomChar = (editor, chr) => {\n return editor.dispatch('insertCustomChar', { chr });\n };\n\n const insertChar = (editor, chr) => {\n const evtChr = fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isArray$1 = isType('array');\n const isNull = eq(null);\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativePush = Array.prototype.push;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n const charMapProcessor = value => isFunction(value) || isArray$1(value);\n registerOption('charmap', { processor: charMapProcessor });\n registerOption('charmap_append', { processor: charMapProcessor });\n };\n const getCharMap$1 = option('charmap');\n const getCharMapAppend = option('charmap_append');\n\n const isArray = global.isArray;\n const UserDefined = 'User Defined';\n const getDefaultCharMap = () => {\n return [\n {\n name: 'Currency',\n characters: [\n [\n 36,\n 'dollar sign'\n ],\n [\n 162,\n 'cent sign'\n ],\n [\n 8364,\n 'euro sign'\n ],\n [\n 163,\n 'pound sign'\n ],\n [\n 165,\n 'yen sign'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 8352,\n 'euro-currency sign'\n ],\n [\n 8353,\n 'colon sign'\n ],\n [\n 8354,\n 'cruzeiro sign'\n ],\n [\n 8355,\n 'french franc sign'\n ],\n [\n 8356,\n 'lira sign'\n ],\n [\n 8357,\n 'mill sign'\n ],\n [\n 8358,\n 'naira sign'\n ],\n [\n 8359,\n 'peseta sign'\n ],\n [\n 8360,\n 'rupee sign'\n ],\n [\n 8361,\n 'won sign'\n ],\n [\n 8362,\n 'new sheqel sign'\n ],\n [\n 8363,\n 'dong sign'\n ],\n [\n 8365,\n 'kip sign'\n ],\n [\n 8366,\n 'tugrik sign'\n ],\n [\n 8367,\n 'drachma sign'\n ],\n [\n 8368,\n 'german penny symbol'\n ],\n [\n 8369,\n 'peso sign'\n ],\n [\n 8370,\n 'guarani sign'\n ],\n [\n 8371,\n 'austral sign'\n ],\n [\n 8372,\n 'hryvnia sign'\n ],\n [\n 8373,\n 'cedi sign'\n ],\n [\n 8374,\n 'livre tournois sign'\n ],\n [\n 8375,\n 'spesmilo sign'\n ],\n [\n 8376,\n 'tenge sign'\n ],\n [\n 8377,\n 'indian rupee sign'\n ],\n [\n 8378,\n 'turkish lira sign'\n ],\n [\n 8379,\n 'nordic mark sign'\n ],\n [\n 8380,\n 'manat sign'\n ],\n [\n 8381,\n 'ruble sign'\n ],\n [\n 20870,\n 'yen character'\n ],\n [\n 20803,\n 'yuan character'\n ],\n [\n 22291,\n 'yuan character, in hong kong and taiwan'\n ],\n [\n 22278,\n 'yen/yuan character variant one'\n ]\n ]\n },\n {\n name: 'Text',\n characters: [\n [\n 169,\n 'copyright sign'\n ],\n [\n 174,\n 'registered sign'\n ],\n [\n 8482,\n 'trade mark sign'\n ],\n [\n 8240,\n 'per mille sign'\n ],\n [\n 181,\n 'micro sign'\n ],\n [\n 183,\n 'middle dot'\n ],\n [\n 8226,\n 'bullet'\n ],\n [\n 8230,\n 'three dot leader'\n ],\n [\n 8242,\n 'minutes / feet'\n ],\n [\n 8243,\n 'seconds / inches'\n ],\n [\n 167,\n 'section sign'\n ],\n [\n 182,\n 'paragraph sign'\n ],\n [\n 223,\n 'sharp s / ess-zed'\n ]\n ]\n },\n {\n name: 'Quotations',\n characters: [\n [\n 8249,\n 'single left-pointing angle quotation mark'\n ],\n [\n 8250,\n 'single right-pointing angle quotation mark'\n ],\n [\n 171,\n 'left pointing guillemet'\n ],\n [\n 187,\n 'right pointing guillemet'\n ],\n [\n 8216,\n 'left single quotation mark'\n ],\n [\n 8217,\n 'right single quotation mark'\n ],\n [\n 8220,\n 'left double quotation mark'\n ],\n [\n 8221,\n 'right double quotation mark'\n ],\n [\n 8218,\n 'single low-9 quotation mark'\n ],\n [\n 8222,\n 'double low-9 quotation mark'\n ],\n [\n 60,\n 'less-than sign'\n ],\n [\n 62,\n 'greater-than sign'\n ],\n [\n 8804,\n 'less-than or equal to'\n ],\n [\n 8805,\n 'greater-than or equal to'\n ],\n [\n 8211,\n 'en dash'\n ],\n [\n 8212,\n 'em dash'\n ],\n [\n 175,\n 'macron'\n ],\n [\n 8254,\n 'overline'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 166,\n 'broken bar'\n ],\n [\n 168,\n 'diaeresis'\n ],\n [\n 161,\n 'inverted exclamation mark'\n ],\n [\n 191,\n 'turned question mark'\n ],\n [\n 710,\n 'circumflex accent'\n ],\n [\n 732,\n 'small tilde'\n ],\n [\n 176,\n 'degree sign'\n ],\n [\n 8722,\n 'minus sign'\n ],\n [\n 177,\n 'plus-minus sign'\n ],\n [\n 247,\n 'division sign'\n ],\n [\n 8260,\n 'fraction slash'\n ],\n [\n 215,\n 'multiplication sign'\n ],\n [\n 185,\n 'superscript one'\n ],\n [\n 178,\n 'superscript two'\n ],\n [\n 179,\n 'superscript three'\n ],\n [\n 188,\n 'fraction one quarter'\n ],\n [\n 189,\n 'fraction one half'\n ],\n [\n 190,\n 'fraction three quarters'\n ]\n ]\n },\n {\n name: 'Mathematical',\n characters: [\n [\n 402,\n 'function / florin'\n ],\n [\n 8747,\n 'integral'\n ],\n [\n 8721,\n 'n-ary sumation'\n ],\n [\n 8734,\n 'infinity'\n ],\n [\n 8730,\n 'square root'\n ],\n [\n 8764,\n 'similar to'\n ],\n [\n 8773,\n 'approximately equal to'\n ],\n [\n 8776,\n 'almost equal to'\n ],\n [\n 8800,\n 'not equal to'\n ],\n [\n 8801,\n 'identical to'\n ],\n [\n 8712,\n 'element of'\n ],\n [\n 8713,\n 'not an element of'\n ],\n [\n 8715,\n 'contains as member'\n ],\n [\n 8719,\n 'n-ary product'\n ],\n [\n 8743,\n 'logical and'\n ],\n [\n 8744,\n 'logical or'\n ],\n [\n 172,\n 'not sign'\n ],\n [\n 8745,\n 'intersection'\n ],\n [\n 8746,\n 'union'\n ],\n [\n 8706,\n 'partial differential'\n ],\n [\n 8704,\n 'for all'\n ],\n [\n 8707,\n 'there exists'\n ],\n [\n 8709,\n 'diameter'\n ],\n [\n 8711,\n 'backward difference'\n ],\n [\n 8727,\n 'asterisk operator'\n ],\n [\n 8733,\n 'proportional to'\n ],\n [\n 8736,\n 'angle'\n ]\n ]\n },\n {\n name: 'Extended Latin',\n characters: [\n [\n 192,\n 'A - grave'\n ],\n [\n 193,\n 'A - acute'\n ],\n [\n 194,\n 'A - circumflex'\n ],\n [\n 195,\n 'A - tilde'\n ],\n [\n 196,\n 'A - diaeresis'\n ],\n [\n 197,\n 'A - ring above'\n ],\n [\n 256,\n 'A - macron'\n ],\n [\n 198,\n 'ligature AE'\n ],\n [\n 199,\n 'C - cedilla'\n ],\n [\n 200,\n 'E - grave'\n ],\n [\n 201,\n 'E - acute'\n ],\n [\n 202,\n 'E - circumflex'\n ],\n [\n 203,\n 'E - diaeresis'\n ],\n [\n 274,\n 'E - macron'\n ],\n [\n 204,\n 'I - grave'\n ],\n [\n 205,\n 'I - acute'\n ],\n [\n 206,\n 'I - circumflex'\n ],\n [\n 207,\n 'I - diaeresis'\n ],\n [\n 298,\n 'I - macron'\n ],\n [\n 208,\n 'ETH'\n ],\n [\n 209,\n 'N - tilde'\n ],\n [\n 210,\n 'O - grave'\n ],\n [\n 211,\n 'O - acute'\n ],\n [\n 212,\n 'O - circumflex'\n ],\n [\n 213,\n 'O - tilde'\n ],\n [\n 214,\n 'O - diaeresis'\n ],\n [\n 216,\n 'O - slash'\n ],\n [\n 332,\n 'O - macron'\n ],\n [\n 338,\n 'ligature OE'\n ],\n [\n 352,\n 'S - caron'\n ],\n [\n 217,\n 'U - grave'\n ],\n [\n 218,\n 'U - acute'\n ],\n [\n 219,\n 'U - circumflex'\n ],\n [\n 220,\n 'U - diaeresis'\n ],\n [\n 362,\n 'U - macron'\n ],\n [\n 221,\n 'Y - acute'\n ],\n [\n 376,\n 'Y - diaeresis'\n ],\n [\n 562,\n 'Y - macron'\n ],\n [\n 222,\n 'THORN'\n ],\n [\n 224,\n 'a - grave'\n ],\n [\n 225,\n 'a - acute'\n ],\n [\n 226,\n 'a - circumflex'\n ],\n [\n 227,\n 'a - tilde'\n ],\n [\n 228,\n 'a - diaeresis'\n ],\n [\n 229,\n 'a - ring above'\n ],\n [\n 257,\n 'a - macron'\n ],\n [\n 230,\n 'ligature ae'\n ],\n [\n 231,\n 'c - cedilla'\n ],\n [\n 232,\n 'e - grave'\n ],\n [\n 233,\n 'e - acute'\n ],\n [\n 234,\n 'e - circumflex'\n ],\n [\n 235,\n 'e - diaeresis'\n ],\n [\n 275,\n 'e - macron'\n ],\n [\n 236,\n 'i - grave'\n ],\n [\n 237,\n 'i - acute'\n ],\n [\n 238,\n 'i - circumflex'\n ],\n [\n 239,\n 'i - diaeresis'\n ],\n [\n 299,\n 'i - macron'\n ],\n [\n 240,\n 'eth'\n ],\n [\n 241,\n 'n - tilde'\n ],\n [\n 242,\n 'o - grave'\n ],\n [\n 243,\n 'o - acute'\n ],\n [\n 244,\n 'o - circumflex'\n ],\n [\n 245,\n 'o - tilde'\n ],\n [\n 246,\n 'o - diaeresis'\n ],\n [\n 248,\n 'o slash'\n ],\n [\n 333,\n 'o macron'\n ],\n [\n 339,\n 'ligature oe'\n ],\n [\n 353,\n 's - caron'\n ],\n [\n 249,\n 'u - grave'\n ],\n [\n 250,\n 'u - acute'\n ],\n [\n 251,\n 'u - circumflex'\n ],\n [\n 252,\n 'u - diaeresis'\n ],\n [\n 363,\n 'u - macron'\n ],\n [\n 253,\n 'y - acute'\n ],\n [\n 254,\n 'thorn'\n ],\n [\n 255,\n 'y - diaeresis'\n ],\n [\n 563,\n 'y - macron'\n ],\n [\n 913,\n 'Alpha'\n ],\n [\n 914,\n 'Beta'\n ],\n [\n 915,\n 'Gamma'\n ],\n [\n 916,\n 'Delta'\n ],\n [\n 917,\n 'Epsilon'\n ],\n [\n 918,\n 'Zeta'\n ],\n [\n 919,\n 'Eta'\n ],\n [\n 920,\n 'Theta'\n ],\n [\n 921,\n 'Iota'\n ],\n [\n 922,\n 'Kappa'\n ],\n [\n 923,\n 'Lambda'\n ],\n [\n 924,\n 'Mu'\n ],\n [\n 925,\n 'Nu'\n ],\n [\n 926,\n 'Xi'\n ],\n [\n 927,\n 'Omicron'\n ],\n [\n 928,\n 'Pi'\n ],\n [\n 929,\n 'Rho'\n ],\n [\n 931,\n 'Sigma'\n ],\n [\n 932,\n 'Tau'\n ],\n [\n 933,\n 'Upsilon'\n ],\n [\n 934,\n 'Phi'\n ],\n [\n 935,\n 'Chi'\n ],\n [\n 936,\n 'Psi'\n ],\n [\n 937,\n 'Omega'\n ],\n [\n 945,\n 'alpha'\n ],\n [\n 946,\n 'beta'\n ],\n [\n 947,\n 'gamma'\n ],\n [\n 948,\n 'delta'\n ],\n [\n 949,\n 'epsilon'\n ],\n [\n 950,\n 'zeta'\n ],\n [\n 951,\n 'eta'\n ],\n [\n 952,\n 'theta'\n ],\n [\n 953,\n 'iota'\n ],\n [\n 954,\n 'kappa'\n ],\n [\n 955,\n 'lambda'\n ],\n [\n 956,\n 'mu'\n ],\n [\n 957,\n 'nu'\n ],\n [\n 958,\n 'xi'\n ],\n [\n 959,\n 'omicron'\n ],\n [\n 960,\n 'pi'\n ],\n [\n 961,\n 'rho'\n ],\n [\n 962,\n 'final sigma'\n ],\n [\n 963,\n 'sigma'\n ],\n [\n 964,\n 'tau'\n ],\n [\n 965,\n 'upsilon'\n ],\n [\n 966,\n 'phi'\n ],\n [\n 967,\n 'chi'\n ],\n [\n 968,\n 'psi'\n ],\n [\n 969,\n 'omega'\n ]\n ]\n },\n {\n name: 'Symbols',\n characters: [\n [\n 8501,\n 'alef symbol'\n ],\n [\n 982,\n 'pi symbol'\n ],\n [\n 8476,\n 'real part symbol'\n ],\n [\n 978,\n 'upsilon - hook symbol'\n ],\n [\n 8472,\n 'Weierstrass p'\n ],\n [\n 8465,\n 'imaginary part'\n ]\n ]\n },\n {\n name: 'Arrows',\n characters: [\n [\n 8592,\n 'leftwards arrow'\n ],\n [\n 8593,\n 'upwards arrow'\n ],\n [\n 8594,\n 'rightwards arrow'\n ],\n [\n 8595,\n 'downwards arrow'\n ],\n [\n 8596,\n 'left right arrow'\n ],\n [\n 8629,\n 'carriage return'\n ],\n [\n 8656,\n 'leftwards double arrow'\n ],\n [\n 8657,\n 'upwards double arrow'\n ],\n [\n 8658,\n 'rightwards double arrow'\n ],\n [\n 8659,\n 'downwards double arrow'\n ],\n [\n 8660,\n 'left right double arrow'\n ],\n [\n 8756,\n 'therefore'\n ],\n [\n 8834,\n 'subset of'\n ],\n [\n 8835,\n 'superset of'\n ],\n [\n 8836,\n 'not a subset of'\n ],\n [\n 8838,\n 'subset of or equal to'\n ],\n [\n 8839,\n 'superset of or equal to'\n ],\n [\n 8853,\n 'circled plus'\n ],\n [\n 8855,\n 'circled times'\n ],\n [\n 8869,\n 'perpendicular'\n ],\n [\n 8901,\n 'dot operator'\n ],\n [\n 8968,\n 'left ceiling'\n ],\n [\n 8969,\n 'right ceiling'\n ],\n [\n 8970,\n 'left floor'\n ],\n [\n 8971,\n 'right floor'\n ],\n [\n 9001,\n 'left-pointing angle bracket'\n ],\n [\n 9002,\n 'right-pointing angle bracket'\n ],\n [\n 9674,\n 'lozenge'\n ],\n [\n 9824,\n 'black spade suit'\n ],\n [\n 9827,\n 'black club suit'\n ],\n [\n 9829,\n 'black heart suit'\n ],\n [\n 9830,\n 'black diamond suit'\n ],\n [\n 8194,\n 'en space'\n ],\n [\n 8195,\n 'em space'\n ],\n [\n 8201,\n 'thin space'\n ],\n [\n 8204,\n 'zero width non-joiner'\n ],\n [\n 8205,\n 'zero width joiner'\n ],\n [\n 8206,\n 'left-to-right mark'\n ],\n [\n 8207,\n 'right-to-left mark'\n ]\n ]\n }\n ];\n };\n const charmapFilter = charmap => {\n return global.grep(charmap, item => {\n return isArray(item) && item.length === 2;\n });\n };\n const getCharsFromOption = optionValue => {\n if (isArray(optionValue)) {\n return charmapFilter(optionValue);\n }\n if (typeof optionValue === 'function') {\n return optionValue();\n }\n return [];\n };\n const extendCharMap = (editor, charmap) => {\n const userCharMap = getCharMap$1(editor);\n if (userCharMap) {\n charmap = [{\n name: UserDefined,\n characters: getCharsFromOption(userCharMap)\n }];\n }\n const userCharMapAppend = getCharMapAppend(editor);\n if (userCharMapAppend) {\n const userDefinedGroup = global.grep(charmap, cg => cg.name === UserDefined);\n if (userDefinedGroup.length) {\n userDefinedGroup[0].characters = [\n ...userDefinedGroup[0].characters,\n ...getCharsFromOption(userCharMapAppend)\n ];\n return charmap;\n }\n return charmap.concat({\n name: UserDefined,\n characters: getCharsFromOption(userCharMapAppend)\n });\n }\n return charmap;\n };\n const getCharMap = editor => {\n const groups = extendCharMap(editor, getDefaultCharMap());\n return groups.length > 1 ? [{\n name: 'All',\n characters: bind(groups, g => g.characters)\n }].concat(groups) : groups;\n };\n\n const get = editor => {\n const getCharMap$1 = () => {\n return getCharMap(editor);\n };\n const insertChar$1 = chr => {\n insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap$1,\n insertChar: insertChar$1\n };\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const fromCodePoint = String.fromCodePoint;\n\n const charMatches = (charCode, name, lowerCasePattern) => {\n if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) {\n return true;\n } else {\n return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\\s+/g, ''), lowerCasePattern);\n }\n };\n const scan = (group, pattern) => {\n const matches = [];\n const lowerCasePattern = pattern.toLowerCase();\n each(group.characters, g => {\n if (charMatches(g[0], g[1], lowerCasePattern)) {\n matches.push(g);\n }\n });\n return map(matches, m => ({\n text: m[1],\n value: fromCodePoint(m[0]),\n icon: fromCodePoint(m[0])\n }));\n };\n\n const patternName = 'pattern';\n const open = (editor, charMap) => {\n const makeGroupItems = () => [\n {\n label: 'Search',\n type: 'input',\n name: patternName\n },\n {\n type: 'collection',\n name: 'results'\n }\n ];\n const makeTabs = () => map(charMap, charGroup => ({\n title: charGroup.name,\n name: charGroup.name,\n items: makeGroupItems()\n }));\n const makePanel = () => ({\n type: 'panel',\n items: makeGroupItems()\n });\n const makeTabPanel = () => ({\n type: 'tabpanel',\n tabs: makeTabs()\n });\n const currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n const scanAndSet = (dialogApi, pattern) => {\n find(charMap, group => group.name === currentTab.get()).each(f => {\n const items = scan(f, pattern);\n dialogApi.setData({ results: items });\n });\n };\n const SEARCH_DELAY = 40;\n const updateFilter = last(dialogApi => {\n const pattern = dialogApi.getData().pattern;\n scanAndSet(dialogApi, pattern);\n }, SEARCH_DELAY);\n const body = charMap.length === 1 ? makePanel() : makeTabPanel();\n const initialData = {\n pattern: '',\n results: scan(charMap[0], '')\n };\n const bridgeSpec = {\n title: 'Special Character',\n size: 'normal',\n body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData,\n onAction: (api, details) => {\n if (details.name === 'results') {\n insertChar(editor, details.value);\n api.close();\n }\n },\n onTabChange: (dialogApi, details) => {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: (dialogApi, changeData) => {\n if (changeData.name === patternName) {\n updateFilter.throttle(dialogApi);\n }\n }\n };\n const dialogApi = editor.windowManager.open(bridgeSpec);\n dialogApi.focus(patternName);\n };\n\n const register$1 = (editor, charMap) => {\n editor.addCommand('mceShowCharmap', () => {\n open(editor, charMap);\n });\n };\n\n const init = (editor, all) => {\n editor.ui.registry.addAutocompleter('charmap', {\n trigger: ':',\n columns: 'auto',\n minChars: 2,\n fetch: (pattern, _maxResults) => new Promise((resolve, _reject) => {\n resolve(scan(all, pattern));\n }),\n onAction: (autocompleteApi, rng, value) => {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceShowCharmap');\n editor.ui.registry.addButton('charmap', {\n icon: 'insert-character',\n tooltip: 'Special character',\n onAction\n });\n editor.ui.registry.addMenuItem('charmap', {\n icon: 'insert-character',\n text: 'Special character...',\n onAction\n });\n };\n\n var Plugin = () => {\n global$1.add('charmap', editor => {\n register$2(editor);\n const charMap = getCharMap(editor);\n register$1(editor, charMap);\n register(editor);\n init(editor, charMap[0]);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n const not = f => t => !f(t);\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$1 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const filter$1 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$1(xs, 0);\n const last = xs => get$1(xs, xs.length - 1);\n const unique = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$1(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n const ELEMENT = 1;\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is = is$1;\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isElement$1 = isType(ELEMENT);\n const isTag = tag => e => isElement$1(e) && name(e) === tag;\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const child = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child(element, 0);\n const lastChild = element => child(element, element.dom.childNodes.length - 1);\n\n const ancestor = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n\n const before = (marker, elements) => {\n each$1(elements, x => {\n before$1(marker, x);\n });\n };\n const append = (parent, elements) => {\n each$1(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove(rogue);\n });\n };\n const remove = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n const keys = Object.keys;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const setAll = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const deep = original => clone(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$1(original);\n setAll(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after(original, nu);\n const children$1 = children(original);\n append(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const matchNodeName = name => node => isNonNullable(node) && node.nodeName.toLowerCase() === name;\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isTextNode = node => isNonNullable(node) && node.nodeType === 3;\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n const isOlNode = matchNodeName('ol');\n const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const isBr = matchNodeName('br');\n const isFirstChild = node => {\n var _a;\n return ((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === node;\n };\n const isTextBlock = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getTextBlockElements();\n const isBlock = (node, blockElements) => isNonNullable(node) && node.nodeName in blockElements;\n const isBogusBr = (dom, node) => {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n const isEmpty$1 = (dom, elm, keepBookmarks) => {\n const empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n const isChildOfBody = (dom, elm) => dom.isChildOf(elm, dom.getRoot());\n\n const option = name => editor => editor.options.get(name);\n const register$3 = editor => {\n const registerOption = editor.options.register;\n registerOption('lists_indent_on_tab', {\n processor: 'boolean',\n default: true\n });\n };\n const shouldIndentOnTab = option('lists_indent_on_tab');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n\n const createTextBlock = (editor, contentNode) => {\n const dom = editor.dom;\n const blockElements = editor.schema.getBlockElements();\n const fragment = dom.createFragment();\n const blockName = getForcedRootBlock(editor);\n const blockAttrs = getForcedRootBlockAttrs(editor);\n let node;\n let textBlock;\n let hasContentNode = false;\n textBlock = dom.create(blockName, blockAttrs);\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n while (node = contentNode.firstChild) {\n const nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (!textBlock) {\n textBlock = dom.create(blockName, blockAttrs);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n }\n }\n if (!hasContentNode && textBlock) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n return fragment;\n };\n\n const DOM$2 = global$2.DOM;\n const splitList = (editor, list, li) => {\n const removeAndKeepBookmarks = targetNode => {\n const parent = targetNode.parentNode;\n if (parent) {\n global$1.each(bookmarks, node => {\n parent.insertBefore(node, li.parentNode);\n });\n }\n DOM$2.remove(targetNode);\n };\n const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n const newBlock = createTextBlock(editor, li);\n const tmpRng = DOM$2.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(list);\n const fragment = tmpRng.extractContents();\n for (let node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$2.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$2.insertAfter(fragment, list);\n }\n DOM$2.insertAfter(newBlock, list);\n const parent = li.parentElement;\n if (parent && isEmpty$1(editor.dom, parent)) {\n removeAndKeepBookmarks(parent);\n }\n DOM$2.remove(li);\n if (isEmpty$1(editor.dom, list)) {\n DOM$2.remove(list);\n }\n };\n\n const isDescriptionDetail = isTag('dd');\n const isDescriptionTerm = isTag('dt');\n const outdentDlItem = (editor, item) => {\n if (isDescriptionDetail(item)) {\n mutate(item, 'dt');\n } else if (isDescriptionTerm(item)) {\n parentElement(item).each(dl => splitList(editor, dl.dom, item.dom));\n }\n };\n const indentDlItem = item => {\n if (isDescriptionTerm(item)) {\n mutate(item, 'dd');\n }\n };\n const dlIndentation = (editor, indentation, dlItems) => {\n if (indentation === 'Indent') {\n each$1(dlItems, indentDlItem);\n } else {\n each$1(dlItems, item => outdentDlItem(editor, item));\n }\n };\n\n const getNormalizedPoint = (container, offset) => {\n if (isTextNode(container)) {\n return {\n container,\n offset\n };\n }\n const node = global$5.getNode(container, offset);\n if (isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container,\n offset\n };\n };\n const normalizeRange = rng => {\n const outRng = rng.cloneRange();\n const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n const listNames = [\n 'OL',\n 'UL',\n 'DL'\n ];\n const listSelector = listNames.join(',');\n const getParentList = (editor, node) => {\n const selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, listSelector, getClosestListHost(editor, selectionStart));\n };\n const isParentListSelected = (parentList, selectedBlocks) => isNonNullable(parentList) && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n const findSubLists = parentList => filter$1(parentList.querySelectorAll(listSelector), isListNode);\n const getSelectedSubLists = editor => {\n const parentList = getParentList(editor);\n const selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return filter$1(selectedBlocks, elm => {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n const findParentListItemsNodes = (editor, elms) => {\n const listItemsElms = global$1.map(elms, elm => {\n const parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListHost(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return unique(listItemsElms);\n };\n const getSelectedListItems = editor => {\n const selectedBlocks = editor.selection.getSelectedBlocks();\n return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n };\n const getSelectedDlItems = editor => filter$1(getSelectedListItems(editor), isDlItemNode);\n const getClosestEditingHost = (editor, elm) => {\n const parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n };\n const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));\n const getClosestListHost = (editor, elm) => {\n const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);\n const parentBlock = find(parentBlocks, elm => isListHost(editor.schema, elm));\n return parentBlock.getOr(editor.getBody());\n };\n const findLastParentListNode = (editor, elm) => {\n const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n return last(parentLists);\n };\n const getSelectedLists = editor => {\n const firstList = findLastParentListNode(editor, editor.selection.getStart());\n const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n const getSelectedListRoots = editor => {\n const selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n const getUniqueListRoots = (editor, lists) => {\n const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));\n return unique(listRoots);\n };\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const inList = (parents, listName) => findUntil(parents, isListNode, isTableCellNode).exists(list => list.nodeName === listName && !isCustomList(list));\n const isWithinNonEditable = (editor, element) => element !== null && editor.dom.getContentEditableParent(element) === 'false';\n const selectionIsWithinNonEditableList = editor => {\n const parentList = getParentList(editor);\n return isWithinNonEditable(editor, parentList);\n };\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList);\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$1(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const fireListEvent = (editor, action, element) => editor.dispatch('ListMutation', {\n action,\n element\n });\n\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n\n const joinSegment = (parent, child) => {\n append$1(parent.item, child.list);\n };\n const joinSegments = segments => {\n for (let i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n const appendSegments = (head$1, tail) => {\n lift2(last(head$1), head(tail), joinSegment);\n };\n const createSegment = (scope, listType) => {\n const segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append$1(segment.list, segment.item);\n return segment;\n };\n const createSegments = (scope, entry, size) => {\n const segments = [];\n for (let i = 0; i < size; i++) {\n segments.push(createSegment(scope, entry.listType));\n }\n return segments;\n };\n const populateSegments = (segments, entry) => {\n for (let i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(segment => {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n append(segment.item, entry.content);\n });\n };\n const normalizeSegment = (segment, entry) => {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n const createItem = (scope, attr, content) => {\n const item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append(item, content);\n return item;\n };\n const appendItem = (segment, item) => {\n append$1(segment.list, item);\n segment.item = item;\n };\n const writeShallow = (scope, cast, entry) => {\n const newCast = cast.slice(0, entry.depth);\n last(newCast).each(segment => {\n const item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n });\n return newCast;\n };\n const writeDeep = (scope, cast, entry) => {\n const segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n const composeList = (scope, entries) => {\n const cast = foldl(entries, (cast, entry) => {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n }, []);\n return head(cast).map(segment => segment.list);\n };\n\n const isList = el => is(el, 'OL,UL');\n const hasFirstChildList = el => firstChild(el).exists(isList);\n const hasLastChildList = el => lastChild(el).exists(isList);\n\n const isIndented = entry => entry.depth > 0;\n const isSelected = entry => entry.isSelected;\n const cloneItemContent = li => {\n const children$1 = children(li);\n const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({\n depth,\n dirty: false,\n isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone$1(li),\n listAttributes: clone$1(list),\n listType: name(list)\n }));\n\n const indentEntry = (indentation, entry) => {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n entry.dirty = true;\n };\n\n const cloneListProperties = (target, source) => {\n target.listType = source.listType;\n target.listAttributes = { ...source.listAttributes };\n };\n const cleanListProperties = entry => {\n entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');\n };\n const closestSiblingEntry = (entries, start) => {\n const depth = entries[start].depth;\n const matches = entry => entry.depth === depth && !entry.dirty;\n const until = entry => entry.depth < depth;\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n };\n const normalizeEntries = entries => {\n each$1(entries, (entry, i) => {\n closestSiblingEntry(entries, i).fold(() => {\n if (entry.dirty) {\n cleanListProperties(entry);\n }\n }, matchingEntry => cloneListProperties(entry, matchingEntry));\n });\n return entries;\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => {\n itemSelection.each(selection => {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n const currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(selection => {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, list => parseList(depth, itemSelection, selectionState, list));\n const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {\n const parser = isList(element) ? parseList : parseItem;\n const newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n const parseLists = (lists, itemSelection) => {\n const selectionState = Cell(false);\n const initialDepth = 0;\n return map(lists, list => ({\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n }));\n };\n\n const outdentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, entry => {\n const content = fromElements(entry.content);\n return SugarElement.fromDom(createTextBlock(editor, content.dom));\n });\n };\n const indentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), entries => {\n const groupIsIndented = head(entries).exists(isIndented);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n const indentSelectedEntries = (entries, indentation) => {\n each$1(filter$1(entries, isSelected), entry => indentEntry(indentation, entry));\n };\n const getItemSelection = editor => {\n const selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n start,\n end\n }));\n };\n const listIndentation = (editor, lists, indentation) => {\n const entrySets = parseLists(lists, getItemSelection(editor));\n each$1(entrySets, entrySet => {\n indentSelectedEntries(entrySet.entries, indentation);\n const composedLists = composeEntries(editor, entrySet.entries);\n each$1(composedLists, composedList => {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n const selectionIndentation = (editor, indentation) => {\n const lists = fromDom(getSelectedListRoots(editor));\n const dlItems = fromDom(getSelectedDlItems(editor));\n let isHandled = false;\n if (lists.length || dlItems.length) {\n const bookmark = editor.selection.getBookmark();\n listIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n const handleIndentation = (editor, indentation) => !selectionIsWithinNonEditableList(editor) && selectionIndentation(editor, indentation);\n const indentListSelection = editor => handleIndentation(editor, 'Indent');\n const outdentListSelection = editor => handleIndentation(editor, 'Outdent');\n const flattenListSelection = editor => handleIndentation(editor, 'Flatten');\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n const DOM$1 = global$2.DOM;\n const createBookmark = rng => {\n const bookmark = {};\n const setupEndPoint = start => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n const offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n const resolveBookmark = bookmark => {\n const restoreEndPoint = start => {\n const nodeIndex = container => {\n var _a;\n let node = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild;\n let idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (!isElement(node) || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n let container = bookmark[start ? 'startContainer' : 'endContainer'];\n let offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (isElement(container) && container.parentNode) {\n const node = container;\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM$1.remove(node);\n if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n container.appendChild(DOM$1.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n restoreEndPoint(true);\n restoreEndPoint();\n const rng = DOM$1.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return normalizeRange(rng);\n };\n\n const listToggleActionFromListName = listName => {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\n };\n\n const updateListStyle = (dom, el, detail) => {\n const type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n const setAttribs = (elm, attrs) => {\n global$1.each(attrs, (value, key) => {\n elm.setAttribute(key, value);\n });\n };\n const updateListAttrs = (dom, el, detail) => {\n setAttribs(el, detail['list-attributes']);\n global$1.each(dom.select('li', el), li => {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n const updateListWithDetails = (dom, el, detail) => {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n const removeStyles = (dom, element, styles) => {\n global$1.each(styles, style => dom.setStyle(element, style, ''));\n };\n const getEndPointNode = (editor, rng, start, root) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n const offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n const parent = container.parentNode;\n if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(parent.nodeName)) {\n return container;\n }\n container = parent;\n }\n return container;\n };\n const getSelectedTextBlocks = (editor, rng, root) => {\n const textBlocks = [];\n const dom = editor.dom;\n const startNode = getEndPointNode(editor, rng, true, root);\n const endNode = getEndPointNode(editor, rng, false, root);\n let block;\n const siblings = [];\n for (let node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$1.each(siblings, node => {\n var _a;\n if (isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || isBr(node)) {\n if (isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n const nextSibling = node.nextSibling;\n if (global.isBookmarkNode(node)) {\n if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n const hasCompatibleStyle = (dom, sib, detail) => {\n const sibStyle = dom.getStyle(sib, 'list-style-type');\n let detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n const applyList = (editor, listName, detail) => {\n const rng = editor.selection.getRng();\n let listItemName = 'LI';\n const root = getClosestListHost(editor, editor.selection.getStart(true));\n const dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n const bookmark = createBookmark(rng);\n const selectedTextBlocks = getSelectedTextBlocks(editor, rng, root);\n global$1.each(selectedTextBlocks, block => {\n let listBlock;\n const sibling = block.previousSibling;\n const parent = block.parentNode;\n if (!isListItemNode(parent)) {\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n parent.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n }\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n const isValidLists = (list1, list2) => {\n return isListNode(list1) && list1.nodeName === (list2 === null || list2 === void 0 ? void 0 : list2.nodeName);\n };\n const hasSameListStyle = (dom, list1, list2) => {\n const targetStyle = dom.getStyle(list1, 'list-style-type', true);\n const style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n const hasSameClasses = (elm1, elm2) => {\n return elm1.className === elm2.className;\n };\n const shouldMerge = (dom, list1, list2) => {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n const mergeWithAdjacentLists = (dom, listBlock) => {\n let node;\n let sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(liSibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(liSibling);\n }\n };\n const updateList$1 = (editor, list, listName, detail) => {\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n const parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n const bookmark = createBookmark(editor.selection.getRng());\n const allLists = parentIsList ? [\n parentList,\n ...lists\n ] : lists;\n global$1.each(allLists, elm => {\n updateList$1(editor, elm, listName, detail);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const hasListStyleDetail = detail => {\n return 'list-style-type' in detail;\n };\n const toggleSingleList = (editor, parentList, listName, detail) => {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n const bookmark = createBookmark(editor.selection.getRng());\n updateListWithDetails(editor.dom, parentList, detail);\n const newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n const toggleList = (editor, listName, _detail) => {\n const parentList = getParentList(editor);\n if (isWithinNonEditableList(editor, parentList)) {\n return;\n }\n const selectedSubLists = getSelectedSubLists(editor);\n const detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n const DOM = global$2.DOM;\n const normalizeList = (dom, list) => {\n const parentNode = list.parentElement;\n if (parentNode && parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n if (isEmpty$1(dom, parentNode)) {\n DOM.remove(parentNode);\n }\n } else {\n DOM.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n }\n }\n };\n const normalizeLists = (dom, element) => {\n const lists = global$1.grep(dom.select('ol,ul', element));\n global$1.each(lists, list => {\n normalizeList(dom, list);\n });\n };\n\n const findNextCaretContainer = (editor, rng, isForward, root) => {\n let node = rng.startContainer;\n const offset = rng.startOffset;\n if (isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (isElement(node)) {\n node = global$5.getNode(node, offset);\n }\n const walker = new global$4(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n const walkFn = isForward ? walker.next.bind(walker) : walker.prev2.bind(walker);\n while (node = walkFn()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (isTextNode(node) && node.data.length > 0) {\n return node;\n }\n }\n return null;\n };\n const hasOnlyOneBlockChild = (dom, elm) => {\n const childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n const unwrapSingleBlockChild = (dom, elm) => {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n const moveChildren = (dom, fromElm, toElm) => {\n let node;\n const targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty$1(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n const mergeLiElements = (dom, fromElm, toElm) => {\n let listNode;\n const ul = fromElm.parentNode;\n if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n return;\n }\n if (isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n const node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty$1(dom, toElm, true)) {\n empty(SugarElement.fromDom(toElm));\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n const contains$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n const nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each$1(nestedLists, list => {\n if (isEmpty$1(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n empty(SugarElement.fromDom(toLi));\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n const mergeForward = (editor, rng, fromLi, toLi) => {\n const dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n const bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const mergeBackward = (editor, rng, fromLi, toLi) => {\n const bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n const dom = editor.dom, selection = editor.selection;\n const selectionStartElm = selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n const ul = li.parentElement;\n if (ul === editor.getBody() && isEmpty$1(dom, ul)) {\n return true;\n }\n const rng = normalizeRange(selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi && otherLi !== li) {\n editor.undoManager.transact(() => {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n }\n });\n return true;\n } else if (!otherLi) {\n if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n editor.undoManager.transact(() => {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n const removeBlock = (dom, block, root) => {\n const parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n const backspaceDeleteIntoListCaret = (editor, isForward) => {\n const dom = editor.dom;\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n const rng = normalizeRange(editor.selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi) {\n const findValidElement = element => contains$1([\n 'td',\n 'th',\n 'caption'\n ], name(element));\n const findRoot = node => node.dom === root;\n const otherLiCell = closest(SugarElement.fromDom(otherLi), findValidElement, findRoot);\n const caretCell = closest(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);\n if (!equals(otherLiCell, caretCell, eq)) {\n return false;\n }\n editor.undoManager.transact(() => {\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, otherLi.parentNode);\n editor.selection.select(otherLi, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n const backspaceDeleteCaret = (editor, isForward) => {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n const hasListSelection = editor => {\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n return startListParent || getSelectedListItems(editor).length > 0;\n };\n const backspaceDeleteRange = editor => {\n if (hasListSelection(editor)) {\n editor.undoManager.transact(() => {\n editor.execCommand('Delete');\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n const backspaceDelete = (editor, isForward) => {\n const selection = editor.selection;\n return !isWithinNonEditableList(editor, selection.getNode()) && (selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor));\n };\n const setup$1 = editor => {\n editor.on('ExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if ((cmd === 'delete' || cmd === 'forwarddelete') && hasListSelection(editor)) {\n normalizeLists(editor.dom, editor.getBody());\n }\n });\n editor.on('keydown', e => {\n if (e.keyCode === global$3.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$3.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n\n const get = editor => ({\n backspaceDelete: isForward => {\n backspaceDelete(editor, isForward);\n }\n });\n\n const updateList = (editor, update) => {\n const parentList = getParentList(editor);\n if (parentList === null || isWithinNonEditableList(editor, parentList)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each(update.attrs, (v, k) => editor.dom.setAttrib(parentList, k, v));\n }\n });\n };\n\n const parseAlphabeticBase26 = str => {\n const chars = reverse(trim(str).split(''));\n const values = map(chars, (char, i) => {\n const charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, (sum, v) => sum + v, 0);\n };\n const composeAlphabeticBase26 = value => {\n value--;\n if (value < 0) {\n return '';\n } else {\n const remainder = value % 26;\n const quotient = Math.floor(value / 26);\n const rest = composeAlphabeticBase26(quotient);\n const char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n const isUppercase = str => /^[A-Z]+$/.test(str);\n const isLowercase = str => /^[a-z]+$/.test(str);\n const isNumeric = str => /^[0-9]+$/.test(str);\n const deduceListType = start => {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n const parseStartValue = start => {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n const parseDetail = detail => {\n const start = parseInt(detail.start, 10);\n if (is$2(detail.listStyleType, 'upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (is$2(detail.listStyleType, 'lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n const open = editor => {\n const currentList = getParentList(editor);\n if (!isOlNode(currentList) || isWithinNonEditableList(editor, currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.from(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const data = api.getData();\n parseStartValue(data.start).each(detail => {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n const queryListCommandState = (editor, listName) => () => {\n const parentList = getParentList(editor);\n return isNonNullable(parentList) && parentList.nodeName === listName;\n };\n const registerDialog = editor => {\n editor.addCommand('mceListProps', () => {\n open(editor);\n });\n };\n const register$2 = editor => {\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', (ui, detail) => {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', (ui, detail) => {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', (ui, detail) => {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', () => {\n flattenListSelection(editor);\n });\n registerDialog(editor);\n editor.addCommand('mceListUpdate', (ui, detail) => {\n if (isObject(detail)) {\n updateList(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n const setupTabKey = editor => {\n editor.on('keydown', e => {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n const setup = editor => {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup$1(editor);\n };\n\n const setupToggleButtonHandler = (editor, listName) => api => {\n const toggleButtonHandler = e => {\n api.setActive(inList(e.parents, listName));\n api.setEnabled(!isWithinNonEditableList(editor, e.element));\n };\n return setNodeChangeHandler(editor, toggleButtonHandler);\n };\n const register$1 = editor => {\n const exec = command => () => editor.execCommand(command);\n if (!editor.hasPlugin('advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: setupToggleButtonHandler(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: setupToggleButtonHandler(editor, 'UL')\n });\n }\n };\n\n const setupMenuButtonHandler = (editor, listName) => api => {\n const menuButtonHandler = e => api.setEnabled(inList(e.parents, listName) && !isWithinNonEditableList(editor, e.element));\n return setNodeChangeHandler(editor, menuButtonHandler);\n };\n const register = editor => {\n const listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: () => editor.execCommand('mceListProps'),\n onSetup: setupMenuButtonHandler(editor, 'OL')\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: node => {\n const parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n var Plugin = () => {\n global$6.add('lists', editor => {\n register$3(editor);\n if (!editor.hasPlugin('rtc', true)) {\n setup(editor);\n register$2(editor);\n } else {\n registerDialog(editor);\n }\n register$1(editor);\n register(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const link = () => /(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)[A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?/g;\n\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('autolink_pattern', {\n processor: 'regexp',\n default: new RegExp('^' + link().source + '$', 'i')\n });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n };\n const getAutoLinkPattern = option('autolink_pattern');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n const not = f => t => !f(t);\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n const isTextNode = node => node.nodeType === 3;\n const isElement = node => node.nodeType === 1;\n const isBracketOrSpace = char => /^[(\\[{ \\u00a0]$/.test(char);\n const hasProtocol = url => /^([A-Za-z][A-Za-z\\d.+-]*:\\/\\/)|mailto:/.test(url);\n const isPunctuation = char => /[?!,.;:]/.test(char);\n const findChar = (text, index, predicate) => {\n for (let i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (!isZwsp(char) && predicate(char)) {\n return i;\n }\n }\n return -1;\n };\n const freefallRtl = (container, offset) => {\n let tempNode = container;\n let tempOffset = offset;\n while (isElement(tempNode) && tempNode.childNodes[tempOffset]) {\n tempNode = tempNode.childNodes[tempOffset];\n tempOffset = isTextNode(tempNode) ? tempNode.data.length : tempNode.childNodes.length;\n }\n return {\n container: tempNode,\n offset: tempOffset\n };\n };\n\n const parseCurrentLine = (editor, offset) => {\n var _a;\n const voidElements = editor.schema.getVoidElements();\n const autoLinkPattern = getAutoLinkPattern(editor);\n const {dom, selection} = editor;\n if (dom.getParent(selection.getNode(), 'a[href]') !== null) {\n return null;\n }\n const rng = selection.getRng();\n const textSeeker = global(dom, node => {\n return dom.isBlock(node) || has(voidElements, node.nodeName.toLowerCase()) || dom.getContentEditable(node) === 'false';\n });\n const {\n container: endContainer,\n offset: endOffset\n } = freefallRtl(rng.endContainer, rng.endOffset);\n const root = (_a = dom.getParent(endContainer, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const endSpot = textSeeker.backwards(endContainer, endOffset + offset, (node, offset) => {\n const text = node.data;\n const idx = findChar(text, offset, not(isBracketOrSpace));\n return idx === -1 || isPunctuation(text[idx]) ? idx : idx + 1;\n }, root);\n if (!endSpot) {\n return null;\n }\n let lastTextNode = endSpot.container;\n const startSpot = textSeeker.backwards(endSpot.container, endSpot.offset, (node, offset) => {\n lastTextNode = node;\n const idx = findChar(node.data, offset, isBracketOrSpace);\n return idx === -1 ? idx : idx + 1;\n }, root);\n const newRng = dom.createRng();\n if (!startSpot) {\n newRng.setStart(lastTextNode, 0);\n } else {\n newRng.setStart(startSpot.container, startSpot.offset);\n }\n newRng.setEnd(endSpot.container, endSpot.offset);\n const rngText = removeZwsp(newRng.toString());\n const matches = rngText.match(autoLinkPattern);\n if (matches) {\n let url = matches[0];\n if (startsWith(url, 'www.')) {\n const protocol = getDefaultLinkProtocol(editor);\n url = protocol + '://' + url;\n } else if (contains(url, '@') && !hasProtocol(url)) {\n url = 'mailto:' + url;\n }\n return {\n rng: newRng,\n url\n };\n } else {\n return null;\n }\n };\n const convertToLink = (editor, result) => {\n const {dom, selection} = editor;\n const {rng, url} = result;\n const bookmark = selection.getBookmark();\n selection.setRng(rng);\n const command = 'createlink';\n const args = {\n command,\n ui: false,\n value: url\n };\n const beforeExecEvent = editor.dispatch('BeforeExecCommand', args);\n if (!beforeExecEvent.isDefaultPrevented()) {\n editor.getDoc().execCommand(command, false, url);\n editor.dispatch('ExecCommand', args);\n const defaultLinkTarget = getDefaultLinkTarget(editor);\n if (isString(defaultLinkTarget)) {\n const anchor = selection.getNode();\n dom.setAttrib(anchor, 'target', defaultLinkTarget);\n if (defaultLinkTarget === '_blank' && !allowUnsafeLinkTarget(editor)) {\n dom.setAttrib(anchor, 'rel', 'noopener');\n }\n }\n }\n selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n };\n const handleSpacebar = editor => {\n const result = parseCurrentLine(editor, -1);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const handleBracket = handleSpacebar;\n const handleEnter = editor => {\n const result = parseCurrentLine(editor, 0);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const setup = editor => {\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !e.isDefaultPrevented()) {\n handleEnter(editor);\n }\n });\n editor.on('keyup', e => {\n if (e.keyCode === 32) {\n handleSpacebar(editor);\n } else if (e.keyCode === 48 && e.shiftKey || e.keyCode === 221) {\n handleBracket(editor);\n }\n });\n };\n\n var Plugin = () => {\n global$1.add('autolink', editor => {\n register(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType$1('string');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const always = constant(true);\n\n const punctuationStr = '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]';\n\n const punctuation$1 = constant(punctuationStr);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const punctuation = punctuation$1;\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const nativeSlice = Array.prototype.slice;\n const nativePush = Array.prototype.push;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isText$1 = isType(TEXT);\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const before = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const append = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap = (element, wrapper) => {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText$1, 'text');\n const get$1 = element => api.get(element);\n\n const compareDocumentPosition = (a, b, match) => {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n const documentPositionPreceding = (a, b) => {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n const isSimpleBoundary = (dom, node) => dom.isBlock(node) || has(dom.schema.getVoidElements(), node.nodeName);\n const isContentEditableFalse = (dom, node) => dom.getContentEditable(node) === 'false';\n const isContentEditableTrueInCef = (dom, node) => dom.getContentEditable(node) === 'true' && node.parentNode && dom.getContentEditableParent(node.parentNode) === 'false';\n const isHidden = (dom, node) => !dom.isBlock(node) && has(dom.schema.getWhitespaceElements(), node.nodeName);\n const isBoundary = (dom, node) => isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);\n const isText = node => node.nodeType === 3;\n const nuSection = () => ({\n sOffset: 0,\n fOffset: 0,\n elements: []\n });\n const toLeaf = (node, offset) => leaf(SugarElement.fromDom(node), offset);\n const walk = (dom, walkerFn, startNode, callbacks, endNode, skipStart = true) => {\n let next = skipStart ? walkerFn(false) : startNode;\n while (next) {\n const isCefNode = isContentEditableFalse(dom, next);\n if (isCefNode || isHidden(dom, next)) {\n const stopWalking = isCefNode ? callbacks.cef(next) : callbacks.boundary(next);\n if (stopWalking) {\n break;\n } else {\n next = walkerFn(true);\n continue;\n }\n } else if (isSimpleBoundary(dom, next)) {\n if (callbacks.boundary(next)) {\n break;\n }\n } else if (isText(next)) {\n callbacks.text(next);\n }\n if (next === endNode) {\n break;\n } else {\n next = walkerFn(false);\n }\n }\n };\n const collectTextToBoundary = (dom, section, node, rootNode, forwards) => {\n var _a;\n if (isBoundary(dom, node)) {\n return;\n }\n const rootBlock = (_a = dom.getParent(rootNode, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const walker = new global(node, rootBlock);\n const walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);\n walk(dom, walkerFn, node, {\n boundary: always,\n cef: always,\n text: next => {\n if (forwards) {\n section.fOffset += next.length;\n } else {\n section.sOffset += next.length;\n }\n section.elements.push(SugarElement.fromDom(next));\n }\n });\n };\n const collect = (dom, rootNode, startNode, endNode, callbacks, skipStart = true) => {\n const walker = new global(startNode, rootNode);\n const sections = [];\n let current = nuSection();\n collectTextToBoundary(dom, current, startNode, rootNode, false);\n const finishSection = () => {\n if (current.elements.length > 0) {\n sections.push(current);\n current = nuSection();\n }\n return false;\n };\n walk(dom, walker.next.bind(walker), startNode, {\n boundary: finishSection,\n cef: node => {\n finishSection();\n if (callbacks) {\n sections.push(...callbacks.cef(node));\n }\n return false;\n },\n text: next => {\n current.elements.push(SugarElement.fromDom(next));\n if (callbacks) {\n callbacks.text(next, current);\n }\n }\n }, endNode, skipStart);\n if (endNode) {\n collectTextToBoundary(dom, current, endNode, rootNode, true);\n }\n finishSection();\n return sections;\n };\n const collectRangeSections = (dom, rng) => {\n const start = toLeaf(rng.startContainer, rng.startOffset);\n const startNode = start.element.dom;\n const end = toLeaf(rng.endContainer, rng.endOffset);\n const endNode = end.element.dom;\n return collect(dom, rng.commonAncestorContainer, startNode, endNode, {\n text: (node, section) => {\n if (node === endNode) {\n section.fOffset += node.length - end.offset;\n } else if (node === startNode) {\n section.sOffset += start.offset;\n }\n },\n cef: node => {\n const sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), e => {\n const ceTrueNode = e.dom;\n return collect(dom, ceTrueNode, ceTrueNode);\n });\n return sort(sections, (a, b) => documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1);\n }\n }, false);\n };\n const fromRng = (dom, rng) => rng.collapsed ? [] : collectRangeSections(dom, rng);\n const fromNode = (dom, node) => {\n const rng = dom.createRng();\n rng.selectNode(node);\n return fromRng(dom, rng);\n };\n const fromNodes = (dom, nodes) => bind(nodes, node => fromNode(dom, node));\n\n const find$2 = (text, pattern, start = 0, finish = text.length) => {\n const regex = pattern.regex;\n regex.lastIndex = start;\n const results = [];\n let match;\n while (match = regex.exec(text)) {\n const matchedText = match[pattern.matchIndex];\n const matchStart = match.index + match[0].indexOf(matchedText);\n const matchFinish = matchStart + matchedText.length;\n if (matchFinish > finish) {\n break;\n }\n results.push({\n start: matchStart,\n finish: matchFinish\n });\n regex.lastIndex = matchFinish;\n }\n return results;\n };\n const extract = (elements, matches) => {\n const nodePositions = foldl(elements, (acc, element) => {\n const content = get$1(element);\n const start = acc.last;\n const finish = start + content.length;\n const positions = bind(matches, (match, matchIdx) => {\n if (match.start < finish && match.finish > start) {\n return [{\n element,\n start: Math.max(start, match.start) - start,\n finish: Math.min(finish, match.finish) - start,\n matchId: matchIdx\n }];\n } else {\n return [];\n }\n });\n return {\n results: acc.results.concat(positions),\n last: finish\n };\n }, {\n results: [],\n last: 0\n }).results;\n return groupBy(nodePositions, position => position.matchId);\n };\n\n const find$1 = (pattern, sections) => bind(sections, section => {\n const elements = section.elements;\n const content = map(elements, get$1).join('');\n const positions = find$2(content, pattern, section.sOffset, content.length - section.fOffset);\n return extract(elements, positions);\n });\n const mark = (matches, replacementNode) => {\n eachr(matches, (match, idx) => {\n eachr(match, pos => {\n const wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));\n set(wrapper, 'data-mce-index', idx);\n const textNode = pos.element.dom;\n if (textNode.length === pos.finish && pos.start === 0) {\n wrap(pos.element, wrapper);\n } else {\n if (textNode.length !== pos.finish) {\n textNode.splitText(pos.finish);\n }\n const matchNode = textNode.splitText(pos.start);\n wrap(SugarElement.fromDom(matchNode), wrapper);\n }\n });\n });\n };\n const findAndMark = (dom, pattern, node, replacementNode) => {\n const textSections = fromNode(dom, node);\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n return matches.length;\n };\n const findAndMarkInSelection = (dom, pattern, selection, replacementNode) => {\n const bookmark = selection.getBookmark();\n const nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n const textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n selection.moveToBookmark(bookmark);\n return matches.length;\n };\n\n const getElmIndex = elm => {\n return elm.getAttribute('data-mce-index');\n };\n const markAllMatches = (editor, currentSearchState, pattern, inSelection) => {\n const marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n const node = editor.getBody();\n done(editor, currentSearchState, false);\n if (inSelection) {\n return findAndMarkInSelection(editor.dom, pattern, editor.selection, marker);\n } else {\n return findAndMark(editor.dom, pattern, node, marker);\n }\n };\n const unwrap = node => {\n var _a;\n const parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n };\n const findSpansByIndex = (editor, index) => {\n const spans = [];\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n const moveSelection = (editor, currentSearchState, forward) => {\n const searchState = currentSearchState.get();\n let testIndex = searchState.index;\n const dom = editor.dom;\n if (forward) {\n if (testIndex + 1 === searchState.count) {\n testIndex = 0;\n } else {\n testIndex++;\n }\n } else {\n if (testIndex - 1 === -1) {\n testIndex = searchState.count - 1;\n } else {\n testIndex--;\n }\n }\n dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');\n const spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n const removeNode = (dom, node) => {\n const parent = node.parentNode;\n dom.remove(node);\n if (parent && dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n const escapeSearchText = (text, wholeWord) => {\n const escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n\\\\uFEFF]');\n const wordRegex = '(' + escapedText + ')';\n return wholeWord ? `(?:^|\\\\s|${ punctuation() })` + wordRegex + `(?=$|\\\\s|${ punctuation() })` : wordRegex;\n };\n const find = (editor, currentSearchState, text, matchCase, wholeWord, inSelection) => {\n const selection = editor.selection;\n const escapedText = escapeSearchText(text, wholeWord);\n const isForwardSelection = selection.isForward();\n const pattern = {\n regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),\n matchIndex: 1\n };\n const count = markAllMatches(editor, currentSearchState, pattern, inSelection);\n if (global$2.browser.isSafari()) {\n selection.setRng(selection.getRng(), isForwardSelection);\n }\n if (count) {\n const newIndex = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n index: newIndex,\n count,\n text,\n matchCase,\n wholeWord,\n inSelection\n });\n }\n return count;\n };\n const next = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const prev = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, false);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const isMatchSpan = node => {\n const matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n const replace = (editor, currentSearchState, text, forward, all) => {\n const searchState = currentSearchState.get();\n const currentIndex = searchState.index;\n let currentMatchIndex, nextIndex = currentIndex;\n forward = forward !== false;\n const node = editor.getBody();\n const nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n let matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === searchState.index) {\n if (text.length) {\n nodes[i].innerText = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndex) {\n nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));\n }\n }\n currentSearchState.set({\n ...searchState,\n count: all ? 0 : searchState.count - 1,\n index: nextIndex\n });\n if (forward) {\n next(editor, currentSearchState);\n } else {\n prev(editor, currentSearchState);\n }\n return !all && currentSearchState.get().count > 0;\n };\n const done = (editor, currentSearchState, keepEditorSelection) => {\n let startContainer;\n let endContainer;\n const searchState = currentSearchState.get();\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === searchState.index.toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n currentSearchState.set({\n ...searchState,\n index: -1,\n count: 0,\n text: ''\n });\n if (startContainer && endContainer) {\n const rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n } else {\n return undefined;\n }\n };\n const hasNext = (editor, currentSearchState) => currentSearchState.get().count > 1;\n const hasPrev = (editor, currentSearchState) => currentSearchState.get().count > 1;\n\n const get = (editor, currentState) => {\n const done$1 = keepEditorSelection => {\n return done(editor, currentState, keepEditorSelection);\n };\n const find$1 = (text, matchCase, wholeWord, inSelection = false) => {\n return find(editor, currentState, text, matchCase, wholeWord, inSelection);\n };\n const next$1 = () => {\n return next(editor, currentState);\n };\n const prev$1 = () => {\n return prev(editor, currentState);\n };\n const replace$1 = (text, forward, all) => {\n return replace(editor, currentState, text, forward, all);\n };\n return {\n done: done$1,\n find: find$1,\n next: next$1,\n prev: prev$1,\n replace: replace$1\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const open = (editor, currentSearchState) => {\n const dialogApi = value();\n editor.undoManager.add();\n const selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n const updateButtonStates = api => {\n api.setEnabled('next', hasNext(editor, currentSearchState));\n api.setEnabled('prev', hasPrev(editor, currentSearchState));\n };\n const updateSearchState = api => {\n const data = api.getData();\n const current = currentSearchState.get();\n currentSearchState.set({\n ...current,\n matchCase: data.matchcase,\n wholeWord: data.wholewords,\n inSelection: data.inselection\n });\n };\n const disableAll = (api, disable) => {\n const buttons = [\n 'replace',\n 'replaceall',\n 'prev',\n 'next'\n ];\n const toggle = name => api.setEnabled(name, !disable);\n each(buttons, toggle);\n };\n const notFoundAlert = api => {\n editor.windowManager.alert('Could not find the specified string.', () => {\n api.focus('findtext');\n });\n };\n const focusButtonIfRequired = (api, name) => {\n if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n api.focus(name);\n }\n };\n const reset = api => {\n done(editor, currentSearchState, false);\n disableAll(api, true);\n updateButtonStates(api);\n };\n const doFind = api => {\n const data = api.getData();\n const last = currentSearchState.get();\n if (!data.findtext.length) {\n reset(api);\n return;\n }\n if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {\n next(editor, currentSearchState);\n } else {\n const count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords, data.inselection);\n if (count <= 0) {\n notFoundAlert(api);\n }\n disableAll(api, count === 0);\n }\n updateButtonStates(api);\n };\n const initialState = currentSearchState.get();\n const initialData = {\n findtext: selectedText,\n replacetext: '',\n wholewords: initialState.wholeWord,\n matchcase: initialState.matchCase,\n inselection: initialState.inSelection\n };\n const spec = {\n title: 'Find and Replace',\n size: 'normal',\n body: {\n type: 'panel',\n items: [\n {\n type: 'bar',\n items: [\n {\n type: 'input',\n name: 'findtext',\n placeholder: 'Find',\n maximized: true,\n inputMode: 'search'\n },\n {\n type: 'button',\n name: 'prev',\n text: 'Previous',\n icon: 'action-prev',\n enabled: false,\n borderless: true\n },\n {\n type: 'button',\n name: 'next',\n text: 'Next',\n icon: 'action-next',\n enabled: false,\n borderless: true\n }\n ]\n },\n {\n type: 'input',\n name: 'replacetext',\n placeholder: 'Replace with',\n inputMode: 'search'\n }\n ]\n },\n buttons: [\n {\n type: 'menu',\n name: 'options',\n icon: 'preferences',\n tooltip: 'Preferences',\n align: 'start',\n items: [\n {\n type: 'togglemenuitem',\n name: 'matchcase',\n text: 'Match case'\n },\n {\n type: 'togglemenuitem',\n name: 'wholewords',\n text: 'Find whole words only'\n },\n {\n type: 'togglemenuitem',\n name: 'inselection',\n text: 'Find in selection'\n }\n ]\n },\n {\n type: 'custom',\n name: 'find',\n text: 'Find',\n primary: true\n },\n {\n type: 'custom',\n name: 'replace',\n text: 'Replace',\n enabled: false\n },\n {\n type: 'custom',\n name: 'replaceall',\n text: 'Replace all',\n enabled: false\n }\n ],\n initialData,\n onChange: (api, details) => {\n if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n reset(api);\n }\n },\n onAction: (api, details) => {\n const data = api.getData();\n switch (details.name) {\n case 'find':\n doFind(api);\n break;\n case 'replace':\n if (!replace(editor, currentSearchState, data.replacetext)) {\n reset(api);\n } else {\n updateButtonStates(api);\n }\n break;\n case 'replaceall':\n replace(editor, currentSearchState, data.replacetext, true, true);\n reset(api);\n break;\n case 'prev':\n prev(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'next':\n next(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'matchcase':\n case 'wholewords':\n case 'inselection':\n updateSearchState(api);\n reset(api);\n break;\n }\n focusButtonIfRequired(api, details.name);\n },\n onSubmit: api => {\n doFind(api);\n focusButtonIfRequired(api, 'find');\n },\n onClose: () => {\n editor.focus();\n done(editor, currentSearchState);\n editor.undoManager.add();\n }\n };\n dialogApi.set(editor.windowManager.open(spec, { inline: 'toolbar' }));\n };\n\n const register$1 = (editor, currentSearchState) => {\n editor.addCommand('SearchReplace', () => {\n open(editor, currentSearchState);\n });\n };\n\n const showDialog = (editor, currentSearchState) => () => {\n open(editor, currentSearchState);\n };\n const register = (editor, currentSearchState) => {\n editor.ui.registry.addMenuItem('searchreplace', {\n text: 'Find and replace...',\n shortcut: 'Meta+F',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.ui.registry.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));\n };\n\n var Plugin = () => {\n global$3.add('searchreplace', editor => {\n const currentSearchState = Cell({\n index: -1,\n count: 0,\n text: '',\n matchCase: false,\n wholeWord: false,\n inSelection: false\n });\n register$1(editor, currentSearchState);\n register(editor, currentSearchState);\n return get(editor, currentSearchState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativePush = Array.prototype.push;\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const get$1 = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('audio_template_callback', { processor: 'function' });\n registerOption('video_template_callback', { processor: 'function' });\n registerOption('iframe_template_callback', { processor: 'function' });\n registerOption('media_live_embeds', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_filter_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_url_resolver', { processor: 'function' });\n registerOption('media_alt_source', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_poster', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_dimensions', {\n processor: 'boolean',\n default: true\n });\n };\n const getAudioTemplateCallback = option('audio_template_callback');\n const getVideoTemplateCallback = option('video_template_callback');\n const getIframeTemplateCallback = option('iframe_template_callback');\n const hasLiveEmbeds = option('media_live_embeds');\n const shouldFilterHtml = option('media_filter_html');\n const getUrlResolver = option('media_url_resolver');\n const hasAltSource = option('media_alt_source');\n const hasPoster = option('media_poster');\n const hasDimensions = option('media_dimensions');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n const DOM$1 = global$4.DOM;\n const trimPx = value => value.replace(/px$/, '');\n const getEphoxEmbedData = node => {\n const style = node.attr('style');\n const styles = style ? DOM$1.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: node.attr('data-ephox-embed-iri'),\n altsource: '',\n poster: '',\n width: get$1(styles, 'max-width').map(trimPx).getOr(''),\n height: get$1(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n const htmlToData = (html, schema) => {\n let data = {};\n const parser = global$3({\n validate: false,\n forced_root_block: false\n }, schema);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n data = getEphoxEmbedData(node);\n break;\n } else {\n if (!data.source && name === 'param') {\n data.source = node.attr('movie');\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$5.extend(node.attributes.map, data);\n }\n if (name === 'script') {\n data = {\n type: 'script',\n source: node.attr('src')\n };\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = node.attr('src');\n } else if (!data.altsource) {\n data.altsource = node.attr('src');\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = node.attr('src');\n }\n }\n }\n }\n data.source = data.source || data.src || '';\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n const guess = url => {\n var _a;\n const mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n const fileEnd = (_a = url.toLowerCase().split('.').pop()) !== null && _a !== void 0 ? _a : '';\n return get$1(mimes, fileEnd).getOr('');\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n const Parser = (schema, settings = {}) => global$3({\n forced_root_block: false,\n validate: false,\n allow_conditional_comments: true,\n ...settings\n }, schema);\n\n const DOM = global$4.DOM;\n const addPx = value => /^[0-9.]+$/.test(value) ? value + 'px' : value;\n const updateEphoxEmbed = (data, node) => {\n const style = node.attr('style');\n const styleMap = style ? DOM.parseStyle(style) : {};\n if (isNonNullable(data.width)) {\n styleMap['max-width'] = addPx(data.width);\n }\n if (isNonNullable(data.height)) {\n styleMap['max-height'] = addPx(data.height);\n }\n node.attr('style', DOM.serializeStyle(styleMap));\n };\n const sources = [\n 'source',\n 'altsource'\n ];\n const updateHtml = (html, data, updateAll, schema) => {\n let numSources = 0;\n let sourceCount = 0;\n const parser = Parser(schema);\n parser.addNodeFilter('source', nodes => numSources = nodes.length);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n updateEphoxEmbed(data, node);\n break;\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n node.attr('width', data.width);\n node.attr('height', data.height);\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n node.attr('poster', data.poster);\n node.attr('src', null);\n for (let index = numSources; index < 2; index++) {\n if (data[sources[index]]) {\n const source = new global$2('source', 1);\n source.attr('src', data[sources[index]]);\n source.attr('type', data[sources[index] + 'mime'] || null);\n node.append(source);\n }\n }\n break;\n case 'iframe':\n node.attr('src', data.source);\n break;\n case 'object':\n const hasImage = node.getAll('img').length > 0;\n if (data.poster && !hasImage) {\n node.attr('src', data.poster);\n const img = new global$2('img', 1);\n img.attr('src', data.poster);\n img.attr('width', data.width);\n img.attr('height', data.height);\n node.append(img);\n }\n break;\n case 'source':\n if (sourceCount < 2) {\n node.attr('src', data[sources[sourceCount]]);\n node.attr('type', data[sources[sourceCount] + 'mime'] || null);\n if (!data[sources[sourceCount]]) {\n node.remove();\n continue;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n node.remove();\n }\n break;\n }\n }\n }\n }\n }\n return global$1({}, schema).serialize(rootNode);\n };\n\n const urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n const getProtocol = url => {\n const protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n if (protocolMatches && protocolMatches.length > 1) {\n return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n } else {\n return 'https://';\n }\n };\n const getUrl = (pattern, url) => {\n const protocol = getProtocol(url);\n const match = pattern.regex.exec(url);\n let newUrl = protocol + pattern.url;\n if (isNonNullable(match)) {\n for (let i = 0; i < match.length; i++) {\n newUrl = newUrl.replace('$' + i, () => match[i] ? match[i] : '');\n }\n }\n return newUrl.replace(/\\?$/, '');\n };\n const matchPattern = url => {\n const patterns = urlPatterns.filter(pattern => pattern.regex.test(url));\n if (patterns.length > 0) {\n return global$5.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n const getIframeHtml = (data, iframeTemplateCallback) => {\n if (iframeTemplateCallback) {\n return iframeTemplateCallback(data);\n } else {\n const allowFullscreen = data.allowfullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n }\n };\n const getFlashHtml = data => {\n let html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n const getAudioHtml = (data, audioTemplateCallback) => {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n const getVideoHtml = (data, videoTemplateCallback) => {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n const getScriptHtml = data => {\n return '';\n };\n const dataToHtml = (editor, dataIn) => {\n var _a;\n const data = global$5.extend({}, dataIn);\n if (!data.source) {\n global$5.extend(data, htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = guess(data.source);\n data.altsourcemime = guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n const pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowfullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return updateHtml(data.embed, data, true, editor.schema);\n } else {\n const audioTemplateCallback = getAudioTemplateCallback(editor);\n const videoTemplateCallback = getVideoTemplateCallback(editor);\n const iframeTemplateCallback = getIframeTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$5.each(data, (value, key) => {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data, iframeTemplateCallback);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri');\n const setup$2 = editor => {\n editor.on('click keyup touchend', () => {\n const selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', e => {\n const objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('ObjectResized', e => {\n const target = e.target;\n if (target.getAttribute('data-mce-object')) {\n let html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(updateHtml(html, {\n width: String(e.width),\n height: String(e.height)\n }, false, editor.schema)));\n }\n }\n });\n };\n\n const cache = {};\n const embedPromise = (data, dataToHtml, handler) => {\n return new Promise((res, rej) => {\n const wrappedResolve = response => {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }, wrappedResolve, rej);\n }\n });\n };\n const defaultPromise = (data, dataToHtml) => Promise.resolve({\n html: dataToHtml(data),\n url: data.source\n });\n const loadedData = editor => data => dataToHtml(editor, data);\n const getEmbedHtml = (editor, data) => {\n const embedHandler = getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n const isCached = url => has(cache, url);\n\n const extractMeta = (sourceInput, data) => get$1(data, sourceInput).bind(mainData => get$1(mainData, 'meta'));\n const getValue = (data, metaData, sourceInput) => prop => {\n const getFromData = () => get$1(data, prop);\n const getFromMetaData = () => get$1(metaData, prop);\n const getNonEmptyValue = c => get$1(c, 'value').bind(v => v.length > 0 ? Optional.some(v) : Optional.none());\n const getFromValueFirst = () => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(() => Optional.from(child)));\n const getFromMetaFirst = () => getFromMetaData().orThunk(() => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child) : Optional.from(child)));\n return { [prop]: (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr('') };\n };\n const getDimensions = (data, metaData) => {\n const dimensions = {};\n get$1(data, 'dimensions').each(dims => {\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(metaData, prop).orThunk(() => get$1(dims, prop)).each(value => dimensions[prop] = value);\n });\n });\n return dimensions;\n };\n const unwrap = (data, sourceInput) => {\n const metaData = sourceInput && sourceInput !== 'dimensions' ? extractMeta(sourceInput, data).getOr({}) : {};\n const get = getValue(data, metaData, sourceInput);\n return {\n ...get('source'),\n ...get('altsource'),\n ...get('poster'),\n ...get('embed'),\n ...getDimensions(data, metaData)\n };\n };\n const wrap = data => {\n const wrapped = {\n ...data,\n source: { value: get$1(data, 'source').getOr('') },\n altsource: { value: get$1(data, 'altsource').getOr('') },\n poster: { value: get$1(data, 'poster').getOr('') }\n };\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(data, prop).each(value => {\n const dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n const handleError = editor => error => {\n const errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n const getEditorData = editor => {\n const element = editor.selection.getNode();\n const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n return {\n embed: snippet,\n ...htmlToData(snippet, editor.schema)\n };\n };\n const addEmbedHtml = (api, editor) => response => {\n if (isString(response.url) && response.url.trim().length > 0) {\n const html = response.html;\n const snippetData = htmlToData(html, editor.schema);\n const nuData = {\n ...snippetData,\n source: response.url,\n embed: html\n };\n api.setData(wrap(nuData));\n }\n };\n const selectPlaceholder = (editor, beforeObjects) => {\n const afterObjects = editor.dom.select('*[data-mce-object]');\n for (let i = 0; i < beforeObjects.length; i++) {\n for (let y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n const handleInsert = (editor, html) => {\n const beforeObjects = editor.dom.select('*[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n const submitForm = (prevData, newData, editor) => {\n var _a;\n newData.embed = updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);\n if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n getEmbedHtml(editor, newData).then(response => {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n const showDialog = editor => {\n const editorData = getEditorData(editor);\n const currentData = Cell(editorData);\n const initialData = wrap(editorData);\n const handleSource = (prevData, api) => {\n const serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n const handleEmbed = api => {\n var _a;\n const data = unwrap(api.getData());\n const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema);\n api.setData(wrap(dataFromEmbed));\n };\n const handleUpdate = (api, sourceInput) => {\n const data = unwrap(api.getData(), sourceInput);\n const embed = dataToHtml(editor, data);\n api.setData(wrap({\n ...data,\n embed\n }));\n };\n const mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source'\n }];\n const sizeInput = !hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n const generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n const embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n const embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n const advancedFormItems = [];\n if (hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n const advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n const tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n const body = {\n type: 'tabpanel',\n tabs\n };\n const win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: (api, detail) => {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name);\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData\n });\n };\n\n const get = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n return { showDialog: showDialog$1 };\n };\n\n const register$1 = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog$1);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const isLiveEmbedNode = node => {\n const name = node.name;\n return name === 'iframe' || name === 'video' || name === 'audio';\n };\n const getDimension = (node, styles, dimension, defaultValue = null) => {\n const value = node.attr(dimension);\n if (isNonNullable(value)) {\n return value;\n } else if (!has(styles, dimension)) {\n return defaultValue;\n } else {\n return null;\n }\n };\n const setDimensions = (node, previewNode, styles) => {\n const useDefaults = previewNode.name === 'img' || node.name === 'video';\n const defaultWidth = useDefaults ? '300' : null;\n const fallbackHeight = node.name === 'audio' ? '30' : '150';\n const defaultHeight = useDefaults ? fallbackHeight : null;\n previewNode.attr({\n width: getDimension(node, styles, 'width', defaultWidth),\n height: getDimension(node, styles, 'height', defaultHeight)\n });\n };\n const appendNodeContent = (editor, nodeName, previewNode, html) => {\n const newNode = Parser(editor.schema).parse(html, { context: nodeName });\n while (newNode.firstChild) {\n previewNode.append(newNode.firstChild);\n }\n };\n const createPlaceholderNode = (editor, node) => {\n const name = node.name;\n const placeHolder = new global$2('img', 1);\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n setDimensions(node, placeHolder, {});\n placeHolder.attr({\n 'style': node.attr('style'),\n 'src': global.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n const createPreviewNode = (editor, node) => {\n var _a;\n const name = node.name;\n const previewWrapper = new global$2('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n const styles = editor.dom.parseStyle((_a = node.attr('style')) !== null && _a !== void 0 ? _a : '');\n const previewNode = new global$2(name, 1);\n setDimensions(node, previewNode, styles);\n previewNode.attr({\n src: node.attr('src'),\n style: node.attr('style'),\n class: node.attr('class')\n });\n if (name === 'iframe') {\n previewNode.attr({\n allowfullscreen: node.attr('allowfullscreen'),\n frameborder: '0'\n });\n } else {\n const attrs = [\n 'controls',\n 'crossorigin',\n 'currentTime',\n 'loop',\n 'muted',\n 'poster',\n 'preload'\n ];\n each$1(attrs, attrName => {\n previewNode.attr(attrName, node.attr(attrName));\n });\n const sanitizedHtml = previewWrapper.attr('data-mce-html');\n if (isNonNullable(sanitizedHtml)) {\n appendNodeContent(editor, name, previewNode, unescape(sanitizedHtml));\n }\n }\n const shimNode = new global$2('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n const retainAttributesAndInnerHtml = (editor, sourceNode, targetNode) => {\n var _a;\n const attribs = (_a = sourceNode.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n let attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style' && !startsWith(attrName, 'data-mce-')) {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n const serializer = global$1({ inner: true }, editor.schema);\n const tempNode = new global$2('div', 1);\n each$1(sourceNode.children(), child => tempNode.append(child));\n const innerHtml = serializer.serialize(tempNode);\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(innerHtml));\n targetNode.empty();\n }\n };\n const isPageEmbedWrapper = node => {\n const nodeClass = node.attr('class');\n return isString(nodeClass) && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n const isWithinEmbedWrapper = node => {\n let tempNode = node;\n while (tempNode = tempNode.parent) {\n if (tempNode.attr('data-ephox-embed-iri') || isPageEmbedWrapper(tempNode)) {\n return true;\n }\n }\n return false;\n };\n const placeHolderConverter = editor => nodes => {\n let i = nodes.length;\n let node;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (isLiveEmbedNode(node) && hasLiveEmbeds(editor)) {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPreviewNode(editor, node));\n }\n } else {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n\n const parseAndSanitize = (editor, context, html) => {\n const validate = shouldFilterHtml(editor);\n return Parser(editor.schema, { validate }).parse(html, { context });\n };\n\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {schema, serializer, parser} = editor;\n const boolAttrs = schema.getBoolAttrs();\n each$1('webkitallowfullscreen mozallowfullscreen'.split(' '), name => {\n boolAttrs[name] = {};\n });\n each({ embed: ['wmode'] }, (attrs, name) => {\n const rule = schema.getElementRule(name);\n if (rule) {\n each$1(attrs, attr => {\n rule.attributes[attr] = {};\n rule.attributesOrder.push(attr);\n });\n }\n });\n parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor));\n serializer.addAttributeFilter('data-mce-object', (nodes, name) => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!node.parent) {\n continue;\n }\n const realElmName = node.attr(name);\n const realElm = new global$2(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n const className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n const attribs = (_a = node.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n const innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml));\n each$1(fragment.children(), child => realElm.append(child));\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', () => {\n const dom = editor.dom;\n each$1(dom.select('span.mce-preview-object'), elm => {\n if (dom.select('span.mce-shim', elm).length === 0) {\n dom.add(elm, 'span', { class: 'mce-shim' });\n }\n });\n });\n };\n\n const setup = editor => {\n editor.on('ResolveName', e => {\n let name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceMedia');\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction,\n onSetup: buttonApi => {\n const selection = editor.selection;\n buttonApi.setActive(isMediaElement(selection.getNode()));\n return selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction\n });\n };\n\n var Plugin = () => {\n global$6.add('media', editor => {\n register$2(editor);\n register$1(editor);\n register(editor);\n setup(editor);\n setup$1(editor);\n setup$2(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n let unique = 0;\n const generate = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n const get$1 = customTabs => {\n const addTab = spec => {\n var _a;\n const name = (_a = spec.name) !== null && _a !== void 0 ? _a : generate('tab-name');\n const currentCustomTabs = customTabs.get();\n currentCustomTabs[name] = spec;\n customTabs.set(currentCustomTabs);\n };\n return { addTab };\n };\n\n const register$2 = (editor, dialogOpener) => {\n editor.addCommand('mceHelp', dialogOpener);\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('help_tabs', { processor: 'array' });\n };\n const getHelpTabs = option('help_tabs');\n const getForcedPlugins = option('forced_plugins');\n\n const register = (editor, dialogOpener) => {\n editor.ui.registry.addButton('help', {\n icon: 'help',\n tooltip: 'Help',\n onAction: dialogOpener\n });\n editor.ui.registry.addMenuItem('help', {\n text: 'Help',\n icon: 'help',\n shortcut: 'Alt+0',\n onAction: dialogOpener\n });\n };\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const filter = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const get = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n\n const description = `

Editor UI keyboard navigation

\n\n

Activating keyboard navigation

\n\n

The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

\n
    \n
  • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
  • \n
  • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
  • \n
  • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
  • \n
\n\n

Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

\n\n

Moving between UI sections

\n\n

When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

\n
    \n
  • the menubar
  • \n
  • each group of the toolbar
  • \n
  • the sidebar
  • \n
  • the element path in the footer
  • \n
  • the wordcount toggle button in the footer
  • \n
  • the branding link in the footer
  • \n
  • the editor resize handle in the footer
  • \n
\n\n

Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

\n\n

Moving within UI sections

\n\n

Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

\n
    \n
  • moving between menus in the menubar
  • \n
  • moving between buttons in a toolbar group
  • \n
  • moving between items in the element path
  • \n
\n\n

In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

\n\n

Executing buttons

\n\n

To execute a button, navigate the selection to the desired button and hit space or enter.

\n\n

Opening, navigating and closing menus

\n\n

When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

\n\n

To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

\n\n

Context toolbars and menus

\n\n

To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

\n\n

Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

\n\n

Dialog navigation

\n\n

There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

\n\n

When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

\n\n

When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

`;\n const tab$3 = () => {\n const body = {\n type: 'htmlpanel',\n presets: 'document',\n html: description\n };\n return {\n name: 'keyboardnav',\n title: 'Keyboard Navigation',\n items: [body]\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n const convertText = source => {\n const isMac = global$2.os.isMacOS() || global$2.os.isiOS();\n const mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n const other = {\n meta: 'Ctrl ',\n access: 'Shift + Alt '\n };\n const replace = isMac ? mac : other;\n const shortcut = source.split('+');\n const updated = map(shortcut, segment => {\n const search = segment.toLowerCase().trim();\n return has(replace, search) ? replace[search] : segment;\n });\n return isMac ? updated.join('').replace(/\\s/, '') : updated.join('+');\n };\n\n const shortcuts = [\n {\n shortcuts: ['Meta + B'],\n action: 'Bold'\n },\n {\n shortcuts: ['Meta + I'],\n action: 'Italic'\n },\n {\n shortcuts: ['Meta + U'],\n action: 'Underline'\n },\n {\n shortcuts: ['Meta + A'],\n action: 'Select all'\n },\n {\n shortcuts: [\n 'Meta + Y',\n 'Meta + Shift + Z'\n ],\n action: 'Redo'\n },\n {\n shortcuts: ['Meta + Z'],\n action: 'Undo'\n },\n {\n shortcuts: ['Access + 1'],\n action: 'Heading 1'\n },\n {\n shortcuts: ['Access + 2'],\n action: 'Heading 2'\n },\n {\n shortcuts: ['Access + 3'],\n action: 'Heading 3'\n },\n {\n shortcuts: ['Access + 4'],\n action: 'Heading 4'\n },\n {\n shortcuts: ['Access + 5'],\n action: 'Heading 5'\n },\n {\n shortcuts: ['Access + 6'],\n action: 'Heading 6'\n },\n {\n shortcuts: ['Access + 7'],\n action: 'Paragraph'\n },\n {\n shortcuts: ['Access + 8'],\n action: 'Div'\n },\n {\n shortcuts: ['Access + 9'],\n action: 'Address'\n },\n {\n shortcuts: ['Alt + 0'],\n action: 'Open help dialog'\n },\n {\n shortcuts: ['Alt + F9'],\n action: 'Focus to menubar'\n },\n {\n shortcuts: ['Alt + F10'],\n action: 'Focus to toolbar'\n },\n {\n shortcuts: ['Alt + F11'],\n action: 'Focus to element path'\n },\n {\n shortcuts: ['Ctrl + F9'],\n action: 'Focus to contextual toolbar'\n },\n {\n shortcuts: ['Shift + Enter'],\n action: 'Open popup menu for split buttons'\n },\n {\n shortcuts: ['Meta + K'],\n action: 'Insert link (if link plugin activated)'\n },\n {\n shortcuts: ['Meta + S'],\n action: 'Save (if save plugin activated)'\n },\n {\n shortcuts: ['Meta + F'],\n action: 'Find (if searchreplace plugin activated)'\n },\n {\n shortcuts: ['Meta + Shift + F'],\n action: 'Switch to or from fullscreen mode'\n }\n ];\n\n const tab$2 = () => {\n const shortcutList = map(shortcuts, shortcut => {\n const shortcutText = map(shortcut.shortcuts, convertText).join(' or ');\n return [\n shortcut.action,\n shortcutText\n ];\n });\n const tablePanel = {\n type: 'table',\n header: [\n 'Action',\n 'Shortcut'\n ],\n cells: shortcutList\n };\n return {\n name: 'shortcuts',\n title: 'Handy Shortcuts',\n items: [tablePanel]\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n const urls = map([\n {\n key: 'advlist',\n name: 'Advanced List'\n },\n {\n key: 'anchor',\n name: 'Anchor'\n },\n {\n key: 'autolink',\n name: 'Autolink'\n },\n {\n key: 'autoresize',\n name: 'Autoresize'\n },\n {\n key: 'autosave',\n name: 'Autosave'\n },\n {\n key: 'charmap',\n name: 'Character Map'\n },\n {\n key: 'code',\n name: 'Code'\n },\n {\n key: 'codesample',\n name: 'Code Sample'\n },\n {\n key: 'colorpicker',\n name: 'Color Picker'\n },\n {\n key: 'directionality',\n name: 'Directionality'\n },\n {\n key: 'emoticons',\n name: 'Emoticons'\n },\n {\n key: 'fullscreen',\n name: 'Full Screen'\n },\n {\n key: 'help',\n name: 'Help'\n },\n {\n key: 'image',\n name: 'Image'\n },\n {\n key: 'importcss',\n name: 'Import CSS'\n },\n {\n key: 'insertdatetime',\n name: 'Insert Date/Time'\n },\n {\n key: 'link',\n name: 'Link'\n },\n {\n key: 'lists',\n name: 'Lists'\n },\n {\n key: 'media',\n name: 'Media'\n },\n {\n key: 'nonbreaking',\n name: 'Nonbreaking'\n },\n {\n key: 'pagebreak',\n name: 'Page Break'\n },\n {\n key: 'preview',\n name: 'Preview'\n },\n {\n key: 'quickbars',\n name: 'Quick Toolbars'\n },\n {\n key: 'save',\n name: 'Save'\n },\n {\n key: 'searchreplace',\n name: 'Search and Replace'\n },\n {\n key: 'table',\n name: 'Table'\n },\n {\n key: 'template',\n name: 'Template'\n },\n {\n key: 'textcolor',\n name: 'Text Color'\n },\n {\n key: 'visualblocks',\n name: 'Visual Blocks'\n },\n {\n key: 'visualchars',\n name: 'Visual Characters'\n },\n {\n key: 'wordcount',\n name: 'Word Count'\n },\n {\n key: 'a11ychecker',\n name: 'Accessibility Checker',\n type: 'premium'\n },\n {\n key: 'advcode',\n name: 'Advanced Code Editor',\n type: 'premium'\n },\n {\n key: 'advtable',\n name: 'Advanced Tables',\n type: 'premium'\n },\n {\n key: 'casechange',\n name: 'Case Change',\n type: 'premium'\n },\n {\n key: 'checklist',\n name: 'Checklist',\n type: 'premium'\n },\n {\n key: 'editimage',\n name: 'Enhanced Image Editing',\n type: 'premium'\n },\n {\n key: 'footnotes',\n name: 'Footnotes',\n type: 'premium'\n },\n {\n key: 'mediaembed',\n name: 'Enhanced Media Embed',\n type: 'premium',\n slug: 'introduction-to-mediaembed'\n },\n {\n key: 'export',\n name: 'Export',\n type: 'premium'\n },\n {\n key: 'formatpainter',\n name: 'Format Painter',\n type: 'premium'\n },\n {\n key: 'linkchecker',\n name: 'Link Checker',\n type: 'premium'\n },\n {\n key: 'mentions',\n name: 'Mentions',\n type: 'premium'\n },\n {\n key: 'mergetags',\n name: 'Merge Tags',\n type: 'premium'\n },\n {\n key: 'pageembed',\n name: 'Page Embed',\n type: 'premium'\n },\n {\n key: 'permanentpen',\n name: 'Permanent Pen',\n type: 'premium'\n },\n {\n key: 'powerpaste',\n name: 'PowerPaste',\n type: 'premium',\n slug: 'introduction-to-powerpaste'\n },\n {\n key: 'rtc',\n name: 'Real-Time Collaboration',\n type: 'premium',\n slug: 'rtc-introduction'\n },\n {\n key: 'tinymcespellchecker',\n name: 'Spell Checker Pro',\n type: 'premium',\n slug: 'introduction-to-tiny-spellchecker'\n },\n {\n key: 'autocorrect',\n name: 'Spelling Autocorrect',\n type: 'premium'\n },\n {\n key: 'tinycomments',\n name: 'Tiny Comments',\n type: 'premium',\n slug: 'introduction-to-tiny-comments'\n },\n {\n key: 'tinydrive',\n name: 'Tiny Drive',\n type: 'premium',\n slug: 'tinydrive-introduction'\n },\n {\n key: 'tableofcontents',\n name: 'Table of Contents',\n type: 'premium'\n }\n ], item => ({\n ...item,\n type: item.type || 'opensource',\n slug: item.slug || item.key\n }));\n\n const tab$1 = editor => {\n const availablePlugins = () => {\n const premiumPlugins = filter(urls, ({type}) => {\n return type === 'premium';\n });\n const sortedPremiumPlugins = sort(map(premiumPlugins, p => p.name), (s1, s2) => s1.localeCompare(s2));\n const premiumPluginList = map(sortedPremiumPlugins, pluginName => `
  • ${ pluginName }
  • `).join('');\n return '
    ' + '

    ' + global$1.translate('Premium plugins:') + '

    ' + '' + '
    ';\n };\n const makeLink = p => `${ p.name }`;\n const identifyUnknownPlugin = (editor, key) => {\n const getMetadata = editor.plugins[key].getMetadata;\n if (isFunction(getMetadata)) {\n const metadata = getMetadata();\n return {\n name: metadata.name,\n html: makeLink(metadata)\n };\n } else {\n return {\n name: key,\n html: key\n };\n }\n };\n const getPluginData = (editor, key) => find(urls, x => {\n return x.key === key;\n }).fold(() => {\n return identifyUnknownPlugin(editor, key);\n }, x => {\n const name = x.type === 'premium' ? `${ x.name }*` : x.name;\n const html = makeLink({\n name,\n url: `https://www.tiny.cloud/docs/tinymce/6/${ x.slug }/`\n });\n return {\n name,\n html\n };\n });\n const getPluginKeys = editor => {\n const keys$1 = keys(editor.plugins);\n const forcedPlugins = getForcedPlugins(editor);\n return isUndefined(forcedPlugins) ? keys$1 : filter(keys$1, k => !contains(forcedPlugins, k));\n };\n const pluginLister = editor => {\n const pluginKeys = getPluginKeys(editor);\n const sortedPluginData = sort(map(pluginKeys, k => getPluginData(editor, k)), (pd1, pd2) => pd1.name.localeCompare(pd2.name));\n const pluginLis = map(sortedPluginData, key => {\n return '
  • ' + key.html + '
  • ';\n });\n const count = pluginLis.length;\n const pluginsString = pluginLis.join('');\n const html = '

    ' + global$1.translate([\n 'Plugins installed ({0}):',\n count\n ]) + '

    ' + '
      ' + pluginsString + '
    ';\n return html;\n };\n const installedPlugins = editor => {\n if (editor == null) {\n return '';\n }\n return '
    ' + pluginLister(editor) + '
    ';\n };\n const htmlPanel = {\n type: 'htmlpanel',\n presets: 'document',\n html: [\n installedPlugins(editor),\n availablePlugins()\n ].join('')\n };\n return {\n name: 'plugins',\n title: 'Plugins',\n items: [htmlPanel]\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n const tab = () => {\n const getVersion = (major, minor) => major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;\n const version = getVersion(global.majorVersion, global.minorVersion);\n const changeLogLink = 'TinyMCE ' + version + '';\n const htmlPanel = {\n type: 'htmlpanel',\n html: '

    ' + global$1.translate([\n 'You are using {0}',\n changeLogLink\n ]) + '

    ',\n presets: 'document'\n };\n return {\n name: 'versions',\n title: 'Version',\n items: [htmlPanel]\n };\n };\n\n const parseHelpTabsSetting = (tabsFromSettings, tabs) => {\n const newTabs = {};\n const names = map(tabsFromSettings, t => {\n var _a;\n if (isString(t)) {\n if (has(tabs, t)) {\n newTabs[t] = tabs[t];\n }\n return t;\n } else {\n const name = (_a = t.name) !== null && _a !== void 0 ? _a : generate('tab-name');\n newTabs[name] = t;\n return name;\n }\n });\n return {\n tabs: newTabs,\n names\n };\n };\n const getNamesFromTabs = tabs => {\n const names = keys(tabs);\n const idx = names.indexOf('versions');\n if (idx !== -1) {\n names.splice(idx, 1);\n names.push('versions');\n }\n return {\n tabs,\n names\n };\n };\n const parseCustomTabs = (editor, customTabs) => {\n const shortcuts = tab$2();\n const nav = tab$3();\n const plugins = tab$1(editor);\n const versions = tab();\n const tabs = {\n [shortcuts.name]: shortcuts,\n [nav.name]: nav,\n [plugins.name]: plugins,\n [versions.name]: versions,\n ...customTabs.get()\n };\n return Optional.from(getHelpTabs(editor)).fold(() => getNamesFromTabs(tabs), tabsFromSettings => parseHelpTabsSetting(tabsFromSettings, tabs));\n };\n const init = (editor, customTabs) => () => {\n const {tabs, names} = parseCustomTabs(editor, customTabs);\n const foundTabs = map(names, name => get(tabs, name));\n const dialogTabs = cat(foundTabs);\n const body = {\n type: 'tabpanel',\n tabs: dialogTabs\n };\n editor.windowManager.open({\n title: 'Help',\n size: 'medium',\n body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: {}\n });\n };\n\n var Plugin = () => {\n global$3.add('help', editor => {\n const customTabs = Cell({});\n const api = get$1(customTabs);\n register$1(editor);\n const dialogOpener = init(editor, customTabs);\n register(editor, dialogOpener);\n register$2(editor, dialogOpener);\n editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');\n return api;\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","// Exports the \"insertdatetime\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/insertdatetime')\n// ES2015:\n// import 'tinymce/plugins/insertdatetime'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireVisualBlocks = (editor, state) => {\n editor.dispatch('VisualBlocks', { state });\n };\n\n const toggleVisualBlocks = (editor, pluginUrl, enabledState) => {\n const dom = editor.dom;\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n fireVisualBlocks(editor, enabledState.get());\n };\n\n const register$2 = (editor, pluginUrl, enabledState) => {\n editor.addCommand('mceVisualBlocks', () => {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('visualblocks_default_state', {\n processor: 'boolean',\n default: false\n });\n };\n const isEnabledByDefault = option('visualblocks_default_state');\n\n const setup = (editor, pluginUrl, enabledState) => {\n editor.on('PreviewFormats AfterPreviewFormats', e => {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', () => {\n if (isEnabledByDefault(editor)) {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n };\n\n const toggleActiveState = (editor, enabledState) => api => {\n api.setActive(enabledState.get());\n const editorEventCallback = e => api.setActive(e.state);\n editor.on('VisualBlocks', editorEventCallback);\n return () => editor.off('VisualBlocks', editorEventCallback);\n };\n const register = (editor, enabledState) => {\n const onAction = () => editor.execCommand('mceVisualBlocks');\n editor.ui.registry.addToggleButton('visualblocks', {\n icon: 'visualblocks',\n tooltip: 'Show blocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState)\n });\n editor.ui.registry.addToggleMenuItem('visualblocks', {\n text: 'Show blocks',\n icon: 'visualblocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState)\n });\n };\n\n var Plugin = () => {\n global.add('visualblocks', (editor, pluginUrl) => {\n register$1(editor);\n const enabledState = Cell(false);\n register$2(editor, pluginUrl, enabledState);\n register(editor, enabledState);\n setup(editor, pluginUrl, enabledState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"image\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/image')\n// ES2015:\n// import 'tinymce/plugins/image'\nrequire('./plugin.js');","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const getContentStyle = option('content_style');\n const shouldUseContentCssCors = option('content_css_cors');\n const getBodyClass = option('body_class');\n const getBodyId = option('body_id');\n\n const getPreviewHtml = editor => {\n var _a;\n let headHtml = '';\n const encode = editor.dom.encode;\n const contentStyle = (_a = getContentStyle(editor)) !== null && _a !== void 0 ? _a : '';\n headHtml += '';\n const cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global.each(editor.contentCSS, url => {\n headHtml += '';\n });\n if (contentStyle) {\n headHtml += '';\n }\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const isMetaKeyPressed = global$1.os.isMacOS() || global$1.os.isiOS() ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n const preventClicksOnLinksScript = ' ';\n const directionality = editor.getBody().dir;\n const dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n const previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';\n return previewHtml;\n };\n\n const open = editor => {\n const content = getPreviewHtml(editor);\n const dataApi = editor.windowManager.open({\n title: 'Preview',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n name: 'preview',\n type: 'iframe',\n sandboxed: true,\n transparent: false\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: { preview: content }\n });\n dataApi.focus('close');\n };\n\n const register$1 = editor => {\n editor.addCommand('mcePreview', () => {\n open(editor);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mcePreview');\n editor.ui.registry.addButton('preview', {\n icon: 'preview',\n tooltip: 'Preview',\n onAction\n });\n editor.ui.registry.addMenuItem('preview', {\n icon: 'preview',\n text: 'Preview',\n onAction\n });\n };\n\n var Plugin = () => {\n global$2.add('preview', editor => {\n register$1(editor);\n register(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const applyListFormat = (editor, listName, styleValue) => {\n const cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n const register$2 = editor => {\n editor.addCommand('ApplyUnorderedListStyle', (ui, value) => {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', (ui, value) => {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('advlist_number_styles', {\n processor: 'string[]',\n default: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'.split(',')\n });\n registerOption('advlist_bullet_styles', {\n processor: 'string[]',\n default: 'default,circle,square'.split(',')\n });\n };\n const getNumberStyles = option('advlist_number_styles');\n const getBulletStyles = option('advlist_bullet_styles');\n\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const isChildOfBody = (editor, elm) => {\n return editor.dom.isChildOf(elm, editor.getBody());\n };\n const isTableCellNode = node => {\n return isNonNullable(node) && /^(TH|TD)$/.test(node.nodeName);\n };\n const isListNode = editor => node => {\n return isNonNullable(node) && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n const getSelectedStyleType = editor => {\n const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n const style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n const isWithinNonEditable = (editor, element) => element !== null && editor.dom.getContentEditableParent(element) === 'false';\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList);\n };\n\n const findIndex = (list, predicate) => {\n for (let index = 0; index < list.length; index++) {\n const element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n const styleValueToText = styleValue => {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, chr => {\n return chr.toUpperCase();\n });\n };\n const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;\n const isWithinList = (editor, e, nodeName) => {\n const tableCellIndex = findIndex(e.parents, isTableCellNode);\n const parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n const lists = global.grep(parents, isListNode(editor));\n return lists.length > 0 && lists[0].nodeName === nodeName;\n };\n const makeSetupHandler = (editor, nodeName) => api => {\n const nodeChangeHandler = e => {\n api.setActive(isWithinList(editor, e, nodeName));\n api.setEnabled(!isWithinNonEditableList(editor, e.element));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {\n editor.ui.registry.addSplitButton(id, {\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: callback => {\n const items = global.map(styles, styleValue => {\n const iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n const iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n const itemValue = normalizeStyleValue(styleValue);\n const displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: () => editor.execCommand(cmd),\n onItemAction: (_splitButtonApi, value) => {\n applyListFormat(editor, nodeName, value);\n },\n select: value => {\n const listStyleType = getSelectedStyleType(editor);\n return listStyleType.map(listStyle => value === listStyle).getOr(false);\n },\n onSetup: makeSetupHandler(editor, nodeName)\n });\n };\n const addButton = (editor, id, tooltip, cmd, nodeName, styleValue) => {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: makeSetupHandler(editor, nodeName),\n onAction: () => editor.queryCommandState(cmd) || styleValue === '' ? editor.execCommand(cmd) : applyListFormat(editor, nodeName, styleValue)\n });\n };\n const addControl = (editor, id, tooltip, cmd, nodeName, styles) => {\n if (styles.length > 1) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName, normalizeStyleValue(styles[0]));\n }\n };\n const register = editor => {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n var Plugin = () => {\n global$1.add('advlist', editor => {\n if (editor.hasPlugin('lists')) {\n register$1(editor);\n register(editor);\n register$2(editor);\n } else {\n console.error('Please use the Lists plugin together with the Advanced List plugin.');\n }\n });\n };\n\n Plugin();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const isString = isType$1('string');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const call = f => {\n f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const size = obj => {\n return keys(obj).length;\n };\n const get$4 = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten$1 = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten$1(map(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const get$3 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$3(xs, 0);\n const last = xs => get$3(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$3 = element => map(element.dom.childNodes, SugarElement.fromDom);\n const child$3 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$3(element, 0);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n const children$2 = (scope, predicate) => filter(children$3(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each(children$3(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const children$1 = (scope, selector) => children$2(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$1 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const child$2 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n\n const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is$2(e, selector), isRoot);\n const child$1 = (scope, selector) => child$2(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor, scope, selector, isRoot);\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$2 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$2(element, key));\n const remove$2 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const flatten = oot => oot.bind(identity);\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n const toInt = (value, radix = 10) => {\n const num = parseInt(value, radix);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const get$1 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$1 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$2(element, 'style');\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind(children$3(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells = ancestor => firstLayer(ancestor, 'th,td');\n const columns = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children$1(ancestor, 'col');\n } else {\n return bind(columnGroups(ancestor), columnGroup => children$1(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest(element, 'table', isRoot);\n const rows = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children$1(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map(columns(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells$1 = map(cells(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells$1, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows$1 = rows(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows$1\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind(warehouse.all, r => {\n return r.cells;\n });\n return filter(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each(rowData.cells, column => {\n const colspan = column.colspan;\n range(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$1 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each(rows, rowData => {\n const currentRow = [];\n each(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$1(list);\n };\n const justCells = warehouse => bind(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$1,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const getTDTHOverallStyle = (dom, elm, name) => {\n const cells = dom.select('td,th', elm);\n let firstChildStyle;\n for (let i = 0; i < cells.length; i++) {\n const currentStyle = dom.getStyle(cells[i], name);\n if (isUndefined(firstChildStyle)) {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n const setAlign = (editor, elm, name) => {\n global$2.each('left center right'.split(' '), align => {\n if (align !== name) {\n editor.formatter.remove('align' + align, {}, elm);\n }\n });\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n const setVAlign = (editor, elm, name) => {\n global$2.each('top middle bottom'.split(' '), align => {\n if (align !== name) {\n editor.formatter.remove('valign' + align, {}, elm);\n }\n });\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$1(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const getInner = getInnerWidth;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n const defaultTableToolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol';\n const defaultCellBorderWidths = range(5, i => {\n const size = `${ i + 1 }px`;\n return {\n title: size,\n value: size\n };\n });\n const defaultCellBorderStyles = map([\n 'Solid',\n 'Dotted',\n 'Dashed',\n 'Double',\n 'Groove',\n 'Ridge',\n 'Inset',\n 'Outset',\n 'None',\n 'Hidden'\n ], type => {\n return {\n title: type,\n value: type.toLowerCase()\n };\n });\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultStyles = (editor, defaultStyles) => {\n if (isResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isPixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultAttributes = (editor, defaultAttributes) => {\n if (isResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isPixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_border_widths', {\n processor: 'object[]',\n default: defaultCellBorderWidths\n });\n registerOption('table_border_styles', {\n processor: 'object[]',\n default: defaultCellBorderStyles\n });\n registerOption('table_cell_advtab', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_row_advtab', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_advtab', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_appearance_options', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_grid', {\n processor: 'boolean',\n default: !global$1.deviceType.isTouch()\n });\n registerOption('table_cell_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('table_row_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('table_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('table_toolbar', {\n processor: 'string',\n default: defaultTableToolbar\n });\n registerOption('table_background_color_map', {\n processor: 'object[]',\n default: []\n });\n registerOption('table_border_color_map', {\n processor: 'object[]',\n default: []\n });\n };\n const getTableSizingMode = option('table_sizing_mode');\n const getTableBorderWidths = option('table_border_widths');\n const getTableBorderStyles = option('table_border_styles');\n const hasAdvancedCellTab = option('table_cell_advtab');\n const hasAdvancedRowTab = option('table_row_advtab');\n const hasAdvancedTableTab = option('table_advtab');\n const hasAppearanceOptions = option('table_appearance_options');\n const hasTableGrid = option('table_grid');\n const shouldStyleWithCss = option('table_style_by_css');\n const getCellClassList = option('table_cell_class_list');\n const getRowClassList = option('table_row_class_list');\n const getTableClassList = option('table_class_list');\n const getToolbar = option('table_toolbar');\n const getTableBackgroundColorMap = option('table_background_color_map');\n const getTableBorderColorMap = option('table_border_color_map');\n const isPixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const getDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultStyles(editor, defaultStyles);\n };\n const getDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultAttributes(editor, defaultAttributes);\n };\n\n const getNodeName = elm => elm.nodeName.toLowerCase();\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq(element, getBody(editor));\n const removePxSuffix = size => size ? size.replace(/px$/, '') : '';\n const addPxSuffix = size => /^\\d+(\\.\\d+)?$/.test(size) ? size + 'px' : size;\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getSelectionEnd = editor => SugarElement.fromDom(editor.selection.getEnd());\n\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n const before = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$1 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap = (element, wrapper) => {\n before(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after = (marker, elements) => {\n each(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$1(e, x);\n });\n };\n const append = (parent, elements) => {\n each(elements, x => {\n append$1(parent, x);\n });\n };\n\n const remove = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$3(wrapper);\n if (children.length > 0) {\n after(wrapper, children);\n }\n remove(wrapper);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get = element => api.get(element);\n const set = (element, value) => api.set(element, value);\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone$1 = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$2(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone(source);\n setAll(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor,\n closest: closest,\n predicate: ancestor$1,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$1,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get$2,\n set: set$2,\n remove: remove$2,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after$1,\n afterAll: after,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone: clone$1,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$3,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const sharedOne$1 = oneAll;\n\n const universe = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe, (_universe, element) => {\n return look(element);\n }, elements);\n };\n\n const lookupTable = container => {\n return ancestor(container, 'table');\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getRowsFromSelection = (selected, selector) => {\n const cellOpt = getSelectionCell(selected);\n const rowsOpt = cellOpt.bind(cell => table(cell)).map(table => rows(table));\n return lift2(cellOpt, rowsOpt, (cell, rows) => filter(rows, row => exists(fromDom(row.dom.cells), rowCell => get$2(rowCell, selector) === '1' || eq(rowCell, cell)))).getOr([]);\n };\n\n const verticalAlignValues = [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ];\n\n const hexColour = value => ({ value });\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n\n const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n const canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n const canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n const r = rgba[0];\n const g = rgba[1];\n const b = rgba[2];\n const a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const unbindable = () => singleton(s => s.unbind());\n\n const onSetupToggle = (editor, formatName, formatValue) => {\n return api => {\n const boundCallback = unbindable();\n const isNone = isEmpty(formatValue);\n const init = () => {\n const selectedCells = getCellsFromSelection(editor);\n const checkNode = cell => editor.formatter.match(formatName, { value: formatValue }, cell.dom, isNone);\n if (isNone) {\n api.setActive(!exists(selectedCells, checkNode));\n boundCallback.set(editor.formatter.formatChanged(formatName, match => api.setActive(!match), true));\n } else {\n api.setActive(forall(selectedCells, checkNode));\n boundCallback.set(editor.formatter.formatChanged(formatName, api.setActive, false, { value: formatValue }));\n }\n };\n editor.initialized ? init() : editor.on('init', init);\n return boundCallback.clear;\n };\n };\n const isListGroup = item => hasNonNullableKey(item, 'menu');\n const buildListItems = items => map(items, item => {\n const text = item.text || item.title || '';\n if (isListGroup(item)) {\n return {\n text,\n items: buildListItems(item.menu)\n };\n } else {\n return {\n text,\n value: item.value\n };\n }\n });\n const buildMenuItems = (editor, items, format, onAction) => map(items, item => {\n const text = item.text || item.title;\n if (isListGroup(item)) {\n return {\n type: 'nestedmenuitem',\n text,\n getSubmenuItems: () => buildMenuItems(editor, item.menu, format, onAction)\n };\n } else {\n return {\n text,\n type: 'togglemenuitem',\n onAction: () => onAction(item.value),\n onSetup: onSetupToggle(editor, format, item.value)\n };\n }\n });\n const applyTableCellStyle = (editor, style) => value => {\n editor.execCommand('mceTableApplyCellStyle', false, { [style]: value });\n };\n const filterNoneItem = list => bind(list, item => {\n if (isListGroup(item)) {\n return [{\n ...item,\n menu: filterNoneItem(item.menu)\n }];\n } else {\n return isNotEmpty(item.value) ? [item] : [];\n }\n });\n const generateMenuItemsCallback = (editor, items, format, onAction) => callback => callback(buildMenuItems(editor, items, format, onAction));\n const buildColorMenu = (editor, colorList, style) => {\n const colorMap = map(colorList, entry => ({\n text: entry.title,\n value: '#' + anyToHex(entry.value).value,\n type: 'choiceitem'\n }));\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n initData: {\n colors: colorMap.length > 0 ? colorMap : undefined,\n allowCustomColors: false\n },\n onAction: data => {\n const value = data.value === 'remove' ? '' : data.value;\n editor.execCommand('mceTableApplyCellStyle', false, { [style]: value });\n }\n }];\n };\n const changeRowHeader = editor => () => {\n const currentType = editor.queryCommandValue('mceTableRowType');\n const newType = currentType === 'header' ? 'body' : 'header';\n editor.execCommand('mceTableRowType', false, { type: newType });\n };\n const changeColumnHeader = editor => () => {\n const currentType = editor.queryCommandValue('mceTableColType');\n const newType = currentType === 'th' ? 'td' : 'th';\n editor.execCommand('mceTableColType', false, { type: newType });\n };\n\n const getClassList$1 = editor => {\n const classes = buildListItems(getCellClassList(editor));\n if (classes.length > 0) {\n return Optional.some({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n items: classes\n });\n }\n return Optional.none();\n };\n const children = [\n {\n name: 'width',\n type: 'input',\n label: 'Width'\n },\n {\n name: 'height',\n type: 'input',\n label: 'Height'\n },\n {\n name: 'celltype',\n type: 'listbox',\n label: 'Cell type',\n items: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n name: 'scope',\n type: 'listbox',\n label: 'Scope',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n name: 'halign',\n type: 'listbox',\n label: 'Horizontal align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n name: 'valign',\n type: 'listbox',\n label: 'Vertical align',\n items: verticalAlignValues\n }\n ];\n const getItems$2 = editor => children.concat(getClassList$1(editor).toArray());\n\n const getAdvancedTab = (editor, dialogName) => {\n const emptyBorderStyle = [{\n text: 'Select...',\n value: ''\n }];\n const advTabItems = [\n {\n name: 'borderstyle',\n type: 'listbox',\n label: 'Border style',\n items: emptyBorderStyle.concat(buildListItems(getTableBorderStyles(editor)))\n },\n {\n name: 'bordercolor',\n type: 'colorinput',\n label: 'Border color'\n },\n {\n name: 'backgroundcolor',\n type: 'colorinput',\n label: 'Background color'\n }\n ];\n const borderWidth = {\n name: 'borderwidth',\n type: 'input',\n label: 'Border width'\n };\n const items = dialogName === 'cell' ? [borderWidth].concat(advTabItems) : advTabItems;\n return {\n title: 'Advanced',\n name: 'advanced',\n items\n };\n };\n\n const normal = (editor, element) => {\n const dom = editor.dom;\n const setAttrib = (attr, value) => {\n dom.setAttrib(element, attr, value);\n };\n const setStyle = (prop, value) => {\n dom.setStyle(element, prop, value);\n };\n const setFormat = (formatName, value) => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, element, true);\n } else {\n editor.formatter.apply(formatName, { value }, element);\n }\n };\n return {\n setAttrib,\n setStyle,\n setFormat\n };\n };\n const DomModifier = { normal };\n\n const isHeaderCell = isTag('th');\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType$1 = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map(rows, row => getRowType$1(row).type);\n const hasHeader = contains(rowTypes, 'header');\n const hasFooter = contains(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find(r.cells, e => eq(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const generate = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n const adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n ({ ...adt });\n\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const getRowsType = opGetRowsType;\n\n const rgbToHex = value => startsWith(value, 'rgb') ? rgbaToHexString(value) : value;\n const extractAdvancedStyles = elm => {\n const element = SugarElement.fromDom(elm);\n return {\n borderwidth: getRaw(element, 'border-width').getOr(''),\n borderstyle: getRaw(element, 'border-style').getOr(''),\n bordercolor: getRaw(element, 'border-color').map(rgbToHex).getOr(''),\n backgroundcolor: getRaw(element, 'background-color').map(rgbToHex).getOr('')\n };\n };\n const getSharedValues = data => {\n const baseData = data[0];\n const comparisonData = data.slice(1);\n each(comparisonData, items => {\n each(keys(baseData), key => {\n each$1(items, (itemValue, itemKey) => {\n const comparisonValue = baseData[key];\n if (comparisonValue !== '' && key === itemKey) {\n if (comparisonValue !== itemValue) {\n baseData[key] = '';\n }\n }\n });\n });\n });\n return baseData;\n };\n const getAlignment = (formats, formatName, editor, elm) => find(formats, name => !isUndefined(editor.formatter.matchNode(elm, formatName + name))).getOr('');\n const getHAlignment = curry(getAlignment, [\n 'left',\n 'center',\n 'right'\n ], 'align');\n const getVAlignment = curry(getAlignment, [\n 'top',\n 'middle',\n 'bottom'\n ], 'valign');\n const extractDataFromSettings = (editor, hasAdvTableTab) => {\n const style = getDefaultStyles(editor);\n const attrs = getDefaultAttributes(editor);\n const extractAdvancedStyleData = () => ({\n borderstyle: get$4(style, 'border-style').getOr(''),\n bordercolor: rgbToHex(get$4(style, 'border-color').getOr('')),\n backgroundcolor: rgbToHex(get$4(style, 'background-color').getOr(''))\n });\n const defaultData = {\n height: '',\n width: '100%',\n cellspacing: '',\n cellpadding: '',\n caption: false,\n class: '',\n align: '',\n border: ''\n };\n const getBorder = () => {\n const borderWidth = style['border-width'];\n if (shouldStyleWithCss(editor) && borderWidth) {\n return { border: borderWidth };\n }\n return get$4(attrs, 'border').fold(() => ({}), border => ({ border }));\n };\n const advStyle = hasAdvTableTab ? extractAdvancedStyleData() : {};\n const getCellPaddingCellSpacing = () => {\n const spacing = get$4(style, 'border-spacing').or(get$4(attrs, 'cellspacing')).fold(() => ({}), cellspacing => ({ cellspacing }));\n const padding = get$4(style, 'border-padding').or(get$4(attrs, 'cellpadding')).fold(() => ({}), cellpadding => ({ cellpadding }));\n return {\n ...spacing,\n ...padding\n };\n };\n const data = {\n ...defaultData,\n ...style,\n ...attrs,\n ...advStyle,\n ...getBorder(),\n ...getCellPaddingCellSpacing()\n };\n return data;\n };\n const getRowType = elm => table(SugarElement.fromDom(elm)).map(table => {\n const target = { selection: fromDom(elm.cells) };\n return getRowsType(table, target);\n }).getOr('');\n const extractDataFromTableElement = (editor, elm, hasAdvTableTab) => {\n const getBorder = (dom, elm) => {\n const optBorderWidth = getRaw(SugarElement.fromDom(elm), 'border-width');\n if (shouldStyleWithCss(editor) && optBorderWidth.isSome()) {\n return optBorderWidth.getOr('');\n }\n return dom.getAttrib(elm, 'border') || getTDTHOverallStyle(editor.dom, elm, 'border-width') || getTDTHOverallStyle(editor.dom, elm, 'border') || '';\n };\n const dom = editor.dom;\n const cellspacing = shouldStyleWithCss(editor) ? dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing') : dom.getAttrib(elm, 'cellspacing') || dom.getStyle(elm, 'border-spacing');\n const cellpadding = shouldStyleWithCss(editor) ? getTDTHOverallStyle(dom, elm, 'padding') || dom.getAttrib(elm, 'cellpadding') : dom.getAttrib(elm, 'cellpadding') || getTDTHOverallStyle(dom, elm, 'padding');\n return {\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n cellspacing: cellspacing !== null && cellspacing !== void 0 ? cellspacing : '',\n cellpadding: cellpadding !== null && cellpadding !== void 0 ? cellpadding : '',\n border: getBorder(dom, elm),\n caption: !!dom.select('caption', elm)[0],\n class: dom.getAttrib(elm, 'class', ''),\n align: getHAlignment(editor, elm),\n ...hasAdvTableTab ? extractAdvancedStyles(elm) : {}\n };\n };\n const extractDataFromRowElement = (editor, elm, hasAdvancedRowTab) => {\n const dom = editor.dom;\n return {\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n class: dom.getAttrib(elm, 'class', ''),\n type: getRowType(elm),\n align: getHAlignment(editor, elm),\n ...hasAdvancedRowTab ? extractAdvancedStyles(elm) : {}\n };\n };\n const extractDataFromCellElement = (editor, cell, hasAdvancedCellTab, column) => {\n const dom = editor.dom;\n const colElm = column.getOr(cell);\n const getStyle = (element, style) => dom.getStyle(element, style) || dom.getAttrib(element, style);\n return {\n width: getStyle(colElm, 'width'),\n height: getStyle(cell, 'height'),\n scope: dom.getAttrib(cell, 'scope'),\n celltype: getNodeName(cell),\n class: dom.getAttrib(cell, 'class', ''),\n halign: getHAlignment(editor, cell),\n valign: getVAlignment(editor, cell),\n ...hasAdvancedCellTab ? extractAdvancedStyles(cell) : {}\n };\n };\n\n const getSelectedCells = (table, cells) => {\n const warehouse = Warehouse.fromTable(table);\n const allCells = Warehouse.justCells(warehouse);\n const filtered = filter(allCells, cellA => exists(cells, cellB => eq(cellA.element, cellB)));\n return map(filtered, cell => ({\n element: cell.element.dom,\n column: Warehouse.getColumnAt(warehouse, cell.column).map(col => col.element.dom)\n }));\n };\n const updateSimpleProps$1 = (modifier, colModifier, data, shouldUpdate) => {\n if (shouldUpdate('scope')) {\n modifier.setAttrib('scope', data.scope);\n }\n if (shouldUpdate('class')) {\n modifier.setAttrib('class', data.class);\n }\n if (shouldUpdate('height')) {\n modifier.setStyle('height', addPxSuffix(data.height));\n }\n if (shouldUpdate('width')) {\n colModifier.setStyle('width', addPxSuffix(data.width));\n }\n };\n const updateAdvancedProps$1 = (modifier, data, shouldUpdate) => {\n if (shouldUpdate('backgroundcolor')) {\n modifier.setFormat('tablecellbackgroundcolor', data.backgroundcolor);\n }\n if (shouldUpdate('bordercolor')) {\n modifier.setFormat('tablecellbordercolor', data.bordercolor);\n }\n if (shouldUpdate('borderstyle')) {\n modifier.setFormat('tablecellborderstyle', data.borderstyle);\n }\n if (shouldUpdate('borderwidth')) {\n modifier.setFormat('tablecellborderwidth', addPxSuffix(data.borderwidth));\n }\n };\n const applyStyleData$1 = (editor, cells, data, wasChanged) => {\n const isSingleCell = cells.length === 1;\n each(cells, item => {\n const cellElm = item.element;\n const shouldOverrideCurrentValue = isSingleCell ? always : wasChanged;\n const modifier = DomModifier.normal(editor, cellElm);\n const colModifier = item.column.map(col => DomModifier.normal(editor, col)).getOr(modifier);\n updateSimpleProps$1(modifier, colModifier, data, shouldOverrideCurrentValue);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps$1(modifier, data, shouldOverrideCurrentValue);\n }\n if (wasChanged('halign')) {\n setAlign(editor, cellElm, data.halign);\n }\n if (wasChanged('valign')) {\n setVAlign(editor, cellElm, data.valign);\n }\n });\n };\n const applyStructureData$1 = (editor, data) => {\n editor.execCommand('mceTableCellType', false, {\n type: data.celltype,\n no_events: true\n });\n };\n const applyCellData = (editor, cells, oldData, data) => {\n const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n if (size(modifiedData) > 0 && cells.length >= 1) {\n table(cells[0]).each(table => {\n const selectedCells = getSelectedCells(table, cells);\n const styleModified = size(filter$1(modifiedData, (_value, key) => key !== 'scope' && key !== 'celltype')) > 0;\n const structureModified = has(modifiedData, 'celltype');\n if (styleModified || has(modifiedData, 'scope')) {\n applyStyleData$1(editor, selectedCells, data, curry(has, modifiedData));\n }\n if (structureModified) {\n applyStructureData$1(editor, data);\n }\n fireTableModified(editor, table.dom, {\n structure: structureModified,\n style: styleModified\n });\n });\n }\n };\n const onSubmitCellForm = (editor, cells, oldData, api) => {\n const data = api.getData();\n api.close();\n editor.undoManager.transact(() => {\n applyCellData(editor, cells, oldData, data);\n editor.focus();\n });\n };\n const getData$1 = (editor, cells) => {\n const cellsData = table(cells[0]).map(table => map(getSelectedCells(table, cells), item => extractDataFromCellElement(editor, item.element, hasAdvancedCellTab(editor), item.column)));\n return getSharedValues(cellsData.getOrDie());\n };\n const open$2 = editor => {\n const cells = getCellsFromSelection(editor);\n if (cells.length === 0) {\n return;\n }\n const data = getData$1(editor, cells);\n const dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$2(editor)\n },\n getAdvancedTab(editor, 'cell')\n ]\n };\n const dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems$2(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Cell Properties',\n size: 'normal',\n body: hasAdvancedCellTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitCellForm, editor, cells, data)\n });\n };\n\n const getClassList = editor => {\n const classes = buildListItems(getRowClassList(editor));\n if (classes.length > 0) {\n return Optional.some({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n items: classes\n });\n }\n return Optional.none();\n };\n const formChildren = [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n items: [\n {\n text: 'Header',\n value: 'header'\n },\n {\n text: 'Body',\n value: 'body'\n },\n {\n text: 'Footer',\n value: 'footer'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height',\n type: 'input'\n }\n ];\n const getItems$1 = editor => formChildren.concat(getClassList(editor).toArray());\n\n const updateSimpleProps = (modifier, data, shouldUpdate) => {\n if (shouldUpdate('class')) {\n modifier.setAttrib('class', data.class);\n }\n if (shouldUpdate('height')) {\n modifier.setStyle('height', addPxSuffix(data.height));\n }\n };\n const updateAdvancedProps = (modifier, data, shouldUpdate) => {\n if (shouldUpdate('backgroundcolor')) {\n modifier.setStyle('background-color', data.backgroundcolor);\n }\n if (shouldUpdate('bordercolor')) {\n modifier.setStyle('border-color', data.bordercolor);\n }\n if (shouldUpdate('borderstyle')) {\n modifier.setStyle('border-style', data.borderstyle);\n }\n };\n const applyStyleData = (editor, rows, data, wasChanged) => {\n const isSingleRow = rows.length === 1;\n const shouldOverrideCurrentValue = isSingleRow ? always : wasChanged;\n each(rows, rowElm => {\n const modifier = DomModifier.normal(editor, rowElm);\n updateSimpleProps(modifier, data, shouldOverrideCurrentValue);\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps(modifier, data, shouldOverrideCurrentValue);\n }\n if (wasChanged('align')) {\n setAlign(editor, rowElm, data.align);\n }\n });\n };\n const applyStructureData = (editor, data) => {\n editor.execCommand('mceTableRowType', false, {\n type: data.type,\n no_events: true\n });\n };\n const applyRowData = (editor, rows, oldData, data) => {\n const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n if (size(modifiedData) > 0) {\n const typeModified = has(modifiedData, 'type');\n const styleModified = typeModified ? size(modifiedData) > 1 : true;\n if (styleModified) {\n applyStyleData(editor, rows, data, curry(has, modifiedData));\n }\n if (typeModified) {\n applyStructureData(editor, data);\n }\n table(SugarElement.fromDom(rows[0])).each(table => fireTableModified(editor, table.dom, {\n structure: typeModified,\n style: styleModified\n }));\n }\n };\n const onSubmitRowForm = (editor, rows, oldData, api) => {\n const data = api.getData();\n api.close();\n editor.undoManager.transact(() => {\n applyRowData(editor, rows, oldData, data);\n editor.focus();\n });\n };\n const open$1 = editor => {\n const rows = getRowsFromSelection(getSelectionStart(editor), ephemera.selected);\n if (rows.length === 0) {\n return;\n }\n const rowsData = map(rows, rowElm => extractDataFromRowElement(editor, rowElm.dom, hasAdvancedRowTab(editor)));\n const data = getSharedValues(rowsData);\n const dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$1(editor)\n },\n getAdvancedTab(editor, 'row')\n ]\n };\n const dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems$1(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Row Properties',\n size: 'normal',\n body: hasAdvancedRowTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitRowForm, editor, map(rows, r => r.dom), data)\n });\n };\n\n const getItems = (editor, classes, insertNewTable) => {\n const rowColCountItems = !insertNewTable ? [] : [\n {\n type: 'input',\n name: 'cols',\n label: 'Cols',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'rows',\n label: 'Rows',\n inputMode: 'numeric'\n }\n ];\n const alwaysItems = [\n {\n type: 'input',\n name: 'width',\n label: 'Width'\n },\n {\n type: 'input',\n name: 'height',\n label: 'Height'\n }\n ];\n const appearanceItems = hasAppearanceOptions(editor) ? [\n {\n type: 'input',\n name: 'cellspacing',\n label: 'Cell spacing',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'cellpadding',\n label: 'Cell padding',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'border',\n label: 'Border width'\n },\n {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n }\n ] : [];\n const alignmentItem = [{\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n }];\n const classListItem = classes.length > 0 ? [{\n type: 'listbox',\n name: 'class',\n label: 'Class',\n items: classes\n }] : [];\n return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n };\n\n const styleTDTH = (dom, elm, name, value) => {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n if (isString(name) && isNonNullable(value)) {\n dom.setStyle(elm, name, value);\n } else {\n dom.setStyles(elm, name);\n }\n } else {\n if (elm.children) {\n for (let i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n };\n const applyDataToElement = (editor, tableElm, data) => {\n const dom = editor.dom;\n const attrs = {};\n const styles = {};\n if (!isUndefined(data.class)) {\n attrs.class = data.class;\n }\n styles.height = addPxSuffix(data.height);\n if (shouldStyleWithCss(editor)) {\n styles.width = addPxSuffix(data.width);\n } else if (dom.getAttrib(tableElm, 'width')) {\n attrs.width = removePxSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addPxSuffix(data.border);\n styles['border-spacing'] = addPxSuffix(data.cellspacing);\n } else {\n attrs.border = data.border;\n attrs.cellpadding = data.cellpadding;\n attrs.cellspacing = data.cellspacing;\n }\n if (shouldStyleWithCss(editor) && tableElm.children) {\n for (let i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addPxSuffix(data.border),\n 'padding': addPxSuffix(data.cellpadding)\n });\n if (hasAdvancedTableTab(editor)) {\n styleTDTH(dom, tableElm.children[i], { 'border-color': data.bordercolor });\n }\n }\n }\n if (hasAdvancedTableTab(editor)) {\n const advData = data;\n styles['background-color'] = advData.backgroundcolor;\n styles['border-color'] = advData.bordercolor;\n styles['border-style'] = advData.borderstyle;\n }\n attrs.style = dom.serializeStyle({\n ...getDefaultStyles(editor),\n ...styles\n });\n dom.setAttribs(tableElm, {\n ...getDefaultAttributes(editor),\n ...attrs\n });\n };\n const onSubmitTableForm = (editor, tableElm, oldData, api) => {\n const dom = editor.dom;\n const data = api.getData();\n const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n api.close();\n if (data.class === '') {\n delete data.class;\n }\n editor.undoManager.transact(() => {\n if (!tableElm) {\n const cols = toInt(data.cols).getOr(1);\n const rows = toInt(data.rows).getOr(1);\n editor.execCommand('mceInsertTable', false, {\n rows,\n columns: cols\n });\n tableElm = getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).bind(cell => table(cell, getIsRoot(editor))).map(table => table.dom).getOrDie();\n }\n if (size(modifiedData) > 0) {\n applyDataToElement(editor, tableElm, data);\n const captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption || !captionElm && data.caption) {\n editor.execCommand('mceTableToggleCaption');\n }\n setAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n if (size(modifiedData) > 0) {\n const captionModified = has(modifiedData, 'caption');\n const styleModified = captionModified ? size(modifiedData) > 1 : true;\n fireTableModified(editor, tableElm, {\n structure: captionModified,\n style: styleModified\n });\n }\n });\n };\n const open = (editor, insertNewTable) => {\n const dom = editor.dom;\n let tableElm;\n let data = extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable) {\n data.cols = '1';\n data.rows = '1';\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n } else {\n tableElm = dom.getParent(editor.selection.getStart(), 'table', editor.getBody());\n if (tableElm) {\n data = extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n } else {\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n }\n const classes = buildListItems(getTableClassList(editor));\n if (classes.length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n }\n const generalPanel = {\n type: 'grid',\n columns: 2,\n items: getItems(editor, classes, insertNewTable)\n };\n const nonAdvancedForm = () => ({\n type: 'panel',\n items: [generalPanel]\n });\n const advancedForm = () => ({\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: [generalPanel]\n },\n getAdvancedTab(editor, 'table')\n ]\n });\n const dialogBody = hasAdvancedTableTab(editor) ? advancedForm() : nonAdvancedForm();\n editor.windowManager.open({\n title: 'Table Properties',\n size: 'normal',\n body: dialogBody,\n onSubmit: curry(onSubmitTableForm, editor, tableElm, data),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data\n });\n };\n\n const registerCommands = editor => {\n each$1({\n mceTableProps: curry(open, editor, false),\n mceTableRowProps: curry(open$1, editor),\n mceTableCellProps: curry(open$2, editor)\n }, (func, name) => editor.addCommand(name, () => func()));\n editor.addCommand('mceInsertTableDialog', _ui => {\n open(editor, true);\n });\n };\n\n const child = (scope, selector) => child$1(scope, selector).isSome();\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const noMenu = cell => ({\n element: cell,\n mergable: Optional.none(),\n unmergable: Optional.none(),\n selection: [cell]\n });\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n\n const getSelectionTargets = editor => {\n const targets = Cell(Optional.none());\n const changeHandlers = Cell([]);\n let selectionDetails = Optional.none();\n const isCaption = isTag('caption');\n const isDisabledForSelection = key => selectionDetails.forall(details => !details[key]);\n const getStart = () => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n const getEnd = () => getSelectionCellOrCaption(getSelectionEnd(editor), getIsRoot(editor));\n const findTargets = () => getStart().bind(startCellOrCaption => flatten(lift2(table(startCellOrCaption), getEnd().bind(table), (startTable, endTable) => {\n if (eq(startTable, endTable)) {\n if (isCaption(startCellOrCaption)) {\n return Optional.some(noMenu(startCellOrCaption));\n } else {\n return Optional.some(forMenu(getCellsFromSelection(editor), startTable, startCellOrCaption));\n }\n }\n return Optional.none();\n })));\n const getExtractedDetails = targets => {\n const tableOpt = table(targets.element);\n return tableOpt.map(table => {\n const warehouse = Warehouse.fromTable(table);\n const selectedCells = onCells(warehouse, targets).getOr([]);\n const locked = foldl(selectedCells, (acc, cell) => {\n if (cell.isLocked) {\n acc.onAny = true;\n if (cell.column === 0) {\n acc.onFirst = true;\n } else if (cell.column + cell.colspan >= warehouse.grid.columns) {\n acc.onLast = true;\n }\n }\n return acc;\n }, {\n onAny: false,\n onFirst: false,\n onLast: false\n });\n return {\n mergeable: onUnlockedMergable(warehouse, targets).isSome(),\n unmergeable: onUnlockedUnmergable(warehouse, targets).isSome(),\n locked\n };\n });\n };\n const resetTargets = () => {\n targets.set(cached(findTargets)());\n selectionDetails = targets.get().bind(getExtractedDetails);\n each(changeHandlers.get(), call);\n };\n const setupHandler = handler => {\n handler();\n changeHandlers.set(changeHandlers.get().concat([handler]));\n return () => {\n changeHandlers.set(filter(changeHandlers.get(), h => h !== handler));\n };\n };\n const onSetup = (api, isDisabled) => setupHandler(() => targets.get().fold(() => {\n api.setEnabled(false);\n }, targets => {\n api.setEnabled(!isDisabled(targets));\n }));\n const onSetupWithToggle = (api, isDisabled, isActive) => setupHandler(() => targets.get().fold(() => {\n api.setEnabled(false);\n api.setActive(false);\n }, targets => {\n api.setEnabled(!isDisabled(targets));\n api.setActive(isActive(targets));\n }));\n const isDisabledFromLocked = lockedDisable => selectionDetails.exists(details => details.locked[lockedDisable]);\n const onSetupTable = api => onSetup(api, _ => false);\n const onSetupCellOrRow = api => onSetup(api, targets => isCaption(targets.element));\n const onSetupColumn = lockedDisable => api => onSetup(api, targets => isCaption(targets.element) || isDisabledFromLocked(lockedDisable));\n const onSetupPasteable = getClipboardData => api => onSetup(api, targets => isCaption(targets.element) || getClipboardData().isNone());\n const onSetupPasteableColumn = (getClipboardData, lockedDisable) => api => onSetup(api, targets => isCaption(targets.element) || getClipboardData().isNone() || isDisabledFromLocked(lockedDisable));\n const onSetupMergeable = api => onSetup(api, _targets => isDisabledForSelection('mergeable'));\n const onSetupUnmergeable = api => onSetup(api, _targets => isDisabledForSelection('unmergeable'));\n const onSetupTableWithCaption = api => {\n return onSetupWithToggle(api, never, targets => {\n const tableOpt = table(targets.element, getIsRoot(editor));\n return tableOpt.exists(table => child(table, 'caption'));\n });\n };\n const onSetupTableHeaders = (command, headerType) => api => {\n return onSetupWithToggle(api, targets => isCaption(targets.element), () => editor.queryCommandValue(command) === headerType);\n };\n const onSetupTableRowHeaders = onSetupTableHeaders('mceTableRowType', 'header');\n const onSetupTableColumnHeaders = onSetupTableHeaders('mceTableColType', 'th');\n editor.on('NodeChange ExecCommand TableSelectorChange', resetTargets);\n return {\n onSetupTable,\n onSetupCellOrRow,\n onSetupColumn,\n onSetupPasteable,\n onSetupPasteableColumn,\n onSetupMergeable,\n onSetupUnmergeable,\n resetTargets,\n onSetupTableWithCaption,\n onSetupTableRowHeaders,\n onSetupTableColumnHeaders,\n targets: targets.get\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const getRows = () => getData(tableTypeRow);\n const getColumns = () => getData(tableTypeColumn);\n\n const addButtons = (editor, selectionTargets) => {\n editor.ui.registry.addMenuButton('table', {\n tooltip: 'Table',\n icon: 'table',\n fetch: callback => callback('inserttable | cell row column | advtablesort | tableprops deletetable')\n });\n const cmd = command => () => editor.execCommand(command);\n const addButtonIfRegistered = (name, spec) => {\n if (editor.queryCommandSupported(spec.command)) {\n editor.ui.registry.addButton(name, {\n ...spec,\n onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n });\n }\n };\n const addToggleButtonIfRegistered = (name, spec) => {\n if (editor.queryCommandSupported(spec.command)) {\n editor.ui.registry.addToggleButton(name, {\n ...spec,\n onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n });\n }\n };\n addButtonIfRegistered('tableprops', {\n tooltip: 'Table properties',\n command: 'mceTableProps',\n icon: 'table',\n onSetup: selectionTargets.onSetupTable\n });\n addButtonIfRegistered('tabledelete', {\n tooltip: 'Delete table',\n command: 'mceTableDelete',\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable\n });\n addButtonIfRegistered('tablecellprops', {\n tooltip: 'Cell properties',\n command: 'mceTableCellProps',\n icon: 'table-cell-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tablemergecells', {\n tooltip: 'Merge cells',\n command: 'mceTableMergeCells',\n icon: 'table-merge-cells',\n onSetup: selectionTargets.onSetupMergeable\n });\n addButtonIfRegistered('tablesplitcells', {\n tooltip: 'Split cell',\n command: 'mceTableSplitCells',\n icon: 'table-split-cells',\n onSetup: selectionTargets.onSetupUnmergeable\n });\n addButtonIfRegistered('tableinsertrowbefore', {\n tooltip: 'Insert row before',\n command: 'mceTableInsertRowBefore',\n icon: 'table-insert-row-above',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tableinsertrowafter', {\n tooltip: 'Insert row after',\n command: 'mceTableInsertRowAfter',\n icon: 'table-insert-row-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tabledeleterow', {\n tooltip: 'Delete row',\n command: 'mceTableDeleteRow',\n icon: 'table-delete-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tablerowprops', {\n tooltip: 'Row properties',\n command: 'mceTableRowProps',\n icon: 'table-row-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tableinsertcolbefore', {\n tooltip: 'Insert column before',\n command: 'mceTableInsertColBefore',\n icon: 'table-insert-column-before',\n onSetup: selectionTargets.onSetupColumn('onFirst')\n });\n addButtonIfRegistered('tableinsertcolafter', {\n tooltip: 'Insert column after',\n command: 'mceTableInsertColAfter',\n icon: 'table-insert-column-after',\n onSetup: selectionTargets.onSetupColumn('onLast')\n });\n addButtonIfRegistered('tabledeletecol', {\n tooltip: 'Delete column',\n command: 'mceTableDeleteCol',\n icon: 'table-delete-column',\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n addButtonIfRegistered('tablecutrow', {\n tooltip: 'Cut row',\n command: 'mceTableCutRow',\n icon: 'cut-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tablecopyrow', {\n tooltip: 'Copy row',\n command: 'mceTableCopyRow',\n icon: 'duplicate-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n addButtonIfRegistered('tablepasterowbefore', {\n tooltip: 'Paste row before',\n command: 'mceTablePasteRowBefore',\n icon: 'paste-row-before',\n onSetup: selectionTargets.onSetupPasteable(getRows)\n });\n addButtonIfRegistered('tablepasterowafter', {\n tooltip: 'Paste row after',\n command: 'mceTablePasteRowAfter',\n icon: 'paste-row-after',\n onSetup: selectionTargets.onSetupPasteable(getRows)\n });\n addButtonIfRegistered('tablecutcol', {\n tooltip: 'Cut column',\n command: 'mceTableCutCol',\n icon: 'cut-column',\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n addButtonIfRegistered('tablecopycol', {\n tooltip: 'Copy column',\n command: 'mceTableCopyCol',\n icon: 'duplicate-column',\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n addButtonIfRegistered('tablepastecolbefore', {\n tooltip: 'Paste column before',\n command: 'mceTablePasteColBefore',\n icon: 'paste-column-before',\n onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onFirst')\n });\n addButtonIfRegistered('tablepastecolafter', {\n tooltip: 'Paste column after',\n command: 'mceTablePasteColAfter',\n icon: 'paste-column-after',\n onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onLast')\n });\n addButtonIfRegistered('tableinsertdialog', {\n tooltip: 'Insert table',\n command: 'mceInsertTableDialog',\n icon: 'table'\n });\n const tableClassList = filterNoneItem(getTableClassList(editor));\n if (tableClassList.length !== 0 && editor.queryCommandSupported('mceTableToggleClass')) {\n editor.ui.registry.addMenuButton('tableclass', {\n icon: 'table-classes',\n tooltip: 'Table styles',\n fetch: generateMenuItemsCallback(editor, tableClassList, 'tableclass', value => editor.execCommand('mceTableToggleClass', false, value)),\n onSetup: selectionTargets.onSetupTable\n });\n }\n const tableCellClassList = filterNoneItem(getCellClassList(editor));\n if (tableCellClassList.length !== 0 && editor.queryCommandSupported('mceTableCellToggleClass')) {\n editor.ui.registry.addMenuButton('tablecellclass', {\n icon: 'table-cell-classes',\n tooltip: 'Cell styles',\n fetch: generateMenuItemsCallback(editor, tableCellClassList, 'tablecellclass', value => editor.execCommand('mceTableCellToggleClass', false, value)),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n if (editor.queryCommandSupported('mceTableApplyCellStyle')) {\n editor.ui.registry.addMenuButton('tablecellvalign', {\n icon: 'vertical-align',\n tooltip: 'Vertical align',\n fetch: generateMenuItemsCallback(editor, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellborderwidth', {\n icon: 'border-width',\n tooltip: 'Border width',\n fetch: generateMenuItemsCallback(editor, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellborderstyle', {\n icon: 'border-style',\n tooltip: 'Border style',\n fetch: generateMenuItemsCallback(editor, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellbackgroundcolor', {\n icon: 'cell-background-color',\n tooltip: 'Background color',\n fetch: callback => callback(buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellbordercolor', {\n icon: 'cell-border-color',\n tooltip: 'Border color',\n fetch: callback => callback(buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n addToggleButtonIfRegistered('tablecaption', {\n tooltip: 'Table caption',\n icon: 'table-caption',\n command: 'mceTableToggleCaption',\n onSetup: selectionTargets.onSetupTableWithCaption\n });\n addToggleButtonIfRegistered('tablerowheader', {\n tooltip: 'Row header',\n icon: 'table-top-header',\n command: 'mceTableRowType',\n onAction: changeRowHeader(editor),\n onSetup: selectionTargets.onSetupTableRowHeaders\n });\n addToggleButtonIfRegistered('tablecolheader', {\n tooltip: 'Column header',\n icon: 'table-left-header',\n command: 'mceTableColType',\n onAction: changeColumnHeader(editor),\n onSetup: selectionTargets.onSetupTableColumnHeaders\n });\n };\n const addToolbars = editor => {\n const isTable = table => editor.dom.is(table, 'table') && editor.getBody().contains(table);\n const toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.ui.registry.addContextToolbar('table', {\n predicate: isTable,\n items: toolbar,\n scope: 'node',\n position: 'node'\n });\n }\n };\n\n const addMenuItems = (editor, selectionTargets) => {\n const cmd = command => () => editor.execCommand(command);\n const addMenuIfRegistered = (name, spec) => {\n if (editor.queryCommandSupported(spec.command)) {\n editor.ui.registry.addMenuItem(name, {\n ...spec,\n onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n });\n return true;\n } else {\n return false;\n }\n };\n const addToggleMenuIfRegistered = (name, spec) => {\n if (editor.queryCommandSupported(spec.command)) {\n editor.ui.registry.addToggleMenuItem(name, {\n ...spec,\n onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n });\n }\n };\n const insertTableAction = data => {\n editor.execCommand('mceInsertTable', false, {\n rows: data.numRows,\n columns: data.numColumns\n });\n };\n const hasRowMenuItems = [\n addMenuIfRegistered('tableinsertrowbefore', {\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n command: 'mceTableInsertRowBefore',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tableinsertrowafter', {\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n command: 'mceTableInsertRowAfter',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tabledeleterow', {\n text: 'Delete row',\n icon: 'table-delete-row',\n command: 'mceTableDeleteRow',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tablerowprops', {\n text: 'Row properties',\n icon: 'table-row-properties',\n command: 'mceTableRowProps',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tablecutrow', {\n text: 'Cut row',\n icon: 'cut-row',\n command: 'mceTableCutRow',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tablecopyrow', {\n text: 'Copy row',\n icon: 'duplicate-row',\n command: 'mceTableCopyRow',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tablepasterowbefore', {\n text: 'Paste row before',\n icon: 'paste-row-before',\n command: 'mceTablePasteRowBefore',\n onSetup: selectionTargets.onSetupPasteable(getRows)\n }),\n addMenuIfRegistered('tablepasterowafter', {\n text: 'Paste row after',\n icon: 'paste-row-after',\n command: 'mceTablePasteRowAfter',\n onSetup: selectionTargets.onSetupPasteable(getRows)\n })\n ];\n const hasColumnMenuItems = [\n addMenuIfRegistered('tableinsertcolumnbefore', {\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n command: 'mceTableInsertColBefore',\n onSetup: selectionTargets.onSetupColumn('onFirst')\n }),\n addMenuIfRegistered('tableinsertcolumnafter', {\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n command: 'mceTableInsertColAfter',\n onSetup: selectionTargets.onSetupColumn('onLast')\n }),\n addMenuIfRegistered('tabledeletecolumn', {\n text: 'Delete column',\n icon: 'table-delete-column',\n command: 'mceTableDeleteCol',\n onSetup: selectionTargets.onSetupColumn('onAny')\n }),\n addMenuIfRegistered('tablecutcolumn', {\n text: 'Cut column',\n icon: 'cut-column',\n command: 'mceTableCutCol',\n onSetup: selectionTargets.onSetupColumn('onAny')\n }),\n addMenuIfRegistered('tablecopycolumn', {\n text: 'Copy column',\n icon: 'duplicate-column',\n command: 'mceTableCopyCol',\n onSetup: selectionTargets.onSetupColumn('onAny')\n }),\n addMenuIfRegistered('tablepastecolumnbefore', {\n text: 'Paste column before',\n icon: 'paste-column-before',\n command: 'mceTablePasteColBefore',\n onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onFirst')\n }),\n addMenuIfRegistered('tablepastecolumnafter', {\n text: 'Paste column after',\n icon: 'paste-column-after',\n command: 'mceTablePasteColAfter',\n onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onLast')\n })\n ];\n const hasCellMenuItems = [\n addMenuIfRegistered('tablecellprops', {\n text: 'Cell properties',\n icon: 'table-cell-properties',\n command: 'mceTableCellProps',\n onSetup: selectionTargets.onSetupCellOrRow\n }),\n addMenuIfRegistered('tablemergecells', {\n text: 'Merge cells',\n icon: 'table-merge-cells',\n command: 'mceTableMergeCells',\n onSetup: selectionTargets.onSetupMergeable\n }),\n addMenuIfRegistered('tablesplitcells', {\n text: 'Split cell',\n icon: 'table-split-cells',\n command: 'mceTableSplitCells',\n onSetup: selectionTargets.onSetupUnmergeable\n })\n ];\n if (!hasTableGrid(editor)) {\n editor.ui.registry.addMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n onAction: cmd('mceInsertTableDialog')\n });\n } else {\n editor.ui.registry.addNestedMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n getSubmenuItems: () => [{\n type: 'fancymenuitem',\n fancytype: 'inserttable',\n onAction: insertTableAction\n }]\n });\n }\n editor.ui.registry.addMenuItem('inserttabledialog', {\n text: 'Insert table',\n icon: 'table',\n onAction: cmd('mceInsertTableDialog')\n });\n addMenuIfRegistered('tableprops', {\n text: 'Table properties',\n onSetup: selectionTargets.onSetupTable,\n command: 'mceTableProps'\n });\n addMenuIfRegistered('deletetable', {\n text: 'Delete table',\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable,\n command: 'mceTableDelete'\n });\n if (contains(hasRowMenuItems, true)) {\n editor.ui.registry.addNestedMenuItem('row', {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: constant('tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter')\n });\n }\n if (contains(hasColumnMenuItems, true)) {\n editor.ui.registry.addNestedMenuItem('column', {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: constant('tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter')\n });\n }\n if (contains(hasCellMenuItems, true)) {\n editor.ui.registry.addNestedMenuItem('cell', {\n type: 'nestedmenuitem',\n text: 'Cell',\n getSubmenuItems: constant('tablecellprops tablemergecells tablesplitcells')\n });\n }\n editor.ui.registry.addContextMenu('table', {\n update: () => {\n selectionTargets.resetTargets();\n return selectionTargets.targets().fold(constant(''), targets => {\n if (name(targets.element) === 'caption') {\n return 'tableprops deletetable';\n } else {\n return 'cell row column | advtablesort | tableprops deletetable';\n }\n });\n }\n });\n const tableClassList = filterNoneItem(getTableClassList(editor));\n if (tableClassList.length !== 0 && editor.queryCommandSupported('mceTableToggleClass')) {\n editor.ui.registry.addNestedMenuItem('tableclass', {\n icon: 'table-classes',\n text: 'Table styles',\n getSubmenuItems: () => buildMenuItems(editor, tableClassList, 'tableclass', value => editor.execCommand('mceTableToggleClass', false, value)),\n onSetup: selectionTargets.onSetupTable\n });\n }\n const tableCellClassList = filterNoneItem(getCellClassList(editor));\n if (tableCellClassList.length !== 0 && editor.queryCommandSupported('mceTableCellToggleClass')) {\n editor.ui.registry.addNestedMenuItem('tablecellclass', {\n icon: 'table-cell-classes',\n text: 'Cell styles',\n getSubmenuItems: () => buildMenuItems(editor, tableCellClassList, 'tablecellclass', value => editor.execCommand('mceTableCellToggleClass', false, value)),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n if (editor.queryCommandSupported('mceTableApplyCellStyle')) {\n editor.ui.registry.addNestedMenuItem('tablecellvalign', {\n icon: 'vertical-align',\n text: 'Vertical align',\n getSubmenuItems: () => buildMenuItems(editor, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellborderwidth', {\n icon: 'border-width',\n text: 'Border width',\n getSubmenuItems: () => buildMenuItems(editor, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellborderstyle', {\n icon: 'border-style',\n text: 'Border style',\n getSubmenuItems: () => buildMenuItems(editor, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellbackgroundcolor', {\n icon: 'cell-background-color',\n text: 'Background color',\n getSubmenuItems: () => buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellbordercolor', {\n icon: 'cell-border-color',\n text: 'Border color',\n getSubmenuItems: () => buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n addToggleMenuIfRegistered('tablecaption', {\n icon: 'table-caption',\n text: 'Table caption',\n command: 'mceTableToggleCaption',\n onSetup: selectionTargets.onSetupTableWithCaption\n });\n addToggleMenuIfRegistered('tablerowheader', {\n text: 'Row header',\n icon: 'table-top-header',\n command: 'mceTableRowType',\n onAction: changeRowHeader(editor),\n onSetup: selectionTargets.onSetupTableRowHeaders\n });\n addToggleMenuIfRegistered('tablecolheader', {\n text: 'Column header',\n icon: 'table-left-header',\n command: 'mceTableColType',\n onAction: changeColumnHeader(editor),\n onSetup: selectionTargets.onSetupTableRowHeaders\n });\n };\n\n const Plugin = editor => {\n const selectionTargets = getSelectionTargets(editor);\n register(editor);\n registerCommands(editor);\n addMenuItems(editor, selectionTargets);\n addButtons(editor, selectionTargets);\n addToolbars(editor);\n };\n var Plugin$1 = () => {\n global$3.add('table', Plugin);\n };\n\n Plugin$1();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$2 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$2 = (xs, f) => flatten(map$1(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$1(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$5 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported$1 = constant(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported$1() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$2 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$a(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$a(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$1 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$1(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$1,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {\n const rows$1 = rows(warehouse);\n const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n });\n };\n const getPixelHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem));\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n remove$7(clonedFormat, 'contenteditable');\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawWidth = (editor, elm) => {\n const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Optional.from(raw).filter(isNotEmpty);\n };\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(elements => {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const recalculateHeightForCells = (warehouse, heights) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const height = total(cell.row, cell.row + cell.rowspan, heights);\n return {\n element: cell.element,\n height,\n rowspan: cell.rowspan\n };\n });\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index, direction) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table, direction);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(newCellSizes, cell => {\n setHeight(cell.element, cell.height);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells, unit) => {\n each$2(cells, cell => {\n const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n const h = sum(heights, minHeight());\n set$1(cell.element, 'height', h + unit);\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const hUnit = getUnit(newHeight);\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table, height);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n };\n const convertToPercentSize = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSize = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSize = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSize(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSize(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor));\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSize(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSize(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSize(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = getCellsFromSelection(editor);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n bridge.selectContents(singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n };\n const availableSearch = (() => {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return Optional.none;\n }\n })();\n const fromPoint = (win, x, y) => {\n const doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCells = getOtherCells(table, { selection: selectedCells }, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row, hdirection);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body\n };\n\n const createContainer = () => {\n const container = SugarElement.fromTag('div');\n setAll(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append$1(body$1(), container);\n return container;\n };\n const get = (editor, isResizable) => {\n return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const afterCornerResize = (table, origin, width) => {\n const isRightEdgeResize = endsWith(origin, 'e');\n if (startRawW === '') {\n convertToPercentSize(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncPixels(table);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n sz.on();\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSize(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSize(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (startsWith(origin, 'corner-')) {\n afterCornerResize(table, origin, e.width);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', () => {\n tableResize.on(resize => {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('insertdatetime_dateformat', {\n processor: 'string',\n default: editor.translate('%Y-%m-%d')\n });\n registerOption('insertdatetime_timeformat', {\n processor: 'string',\n default: editor.translate('%H:%M:%S')\n });\n registerOption('insertdatetime_formats', {\n processor: 'string[]',\n default: [\n '%H:%M:%S',\n '%Y-%m-%d',\n '%I:%M:%S %p',\n '%D'\n ]\n });\n registerOption('insertdatetime_element', {\n processor: 'boolean',\n default: false\n });\n };\n const getDateFormat = option('insertdatetime_dateformat');\n const getTimeFormat = option('insertdatetime_timeformat');\n const getFormats = option('insertdatetime_formats');\n const shouldInsertTimeElement = option('insertdatetime_element');\n const getDefaultDateTime = editor => {\n const formats = getFormats(editor);\n return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n };\n\n const daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n const daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n const monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n const monthsLong = 'January February March April May June July August September October November December'.split(' ');\n const addZeros = (value, len) => {\n value = '' + value;\n if (value.length < len) {\n for (let i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n const getDateTime = (editor, fmt, date = new Date()) => {\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n const updateElement = (editor, timeElm, computerTime, userTime) => {\n const newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n editor.dom.replace(newTimeElm, timeElm);\n editor.selection.select(newTimeElm, true);\n editor.selection.collapse(false);\n };\n const insertDateTime = (editor, format) => {\n if (shouldInsertTimeElement(editor)) {\n const userTime = getDateTime(editor, format);\n let computerTime;\n if (/%[HMSIp]/.test(format)) {\n computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');\n } else {\n computerTime = getDateTime(editor, '%Y-%m-%d');\n }\n const timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');\n if (timeElm) {\n updateElement(editor, timeElm, computerTime, userTime);\n } else {\n editor.insertContent('');\n }\n } else {\n editor.insertContent(getDateTime(editor, format));\n }\n };\n\n const register$1 = editor => {\n editor.addCommand('mceInsertDate', (_ui, value) => {\n insertDateTime(editor, value !== null && value !== void 0 ? value : getDateFormat(editor));\n });\n editor.addCommand('mceInsertTime', (_ui, value) => {\n insertDateTime(editor, value !== null && value !== void 0 ? value : getTimeFormat(editor));\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const register = editor => {\n const formats = getFormats(editor);\n const defaultFormat = Cell(getDefaultDateTime(editor));\n const insertDateTime = format => editor.execCommand('mceInsertDate', false, format);\n editor.ui.registry.addSplitButton('insertdatetime', {\n icon: 'insert-time',\n tooltip: 'Insert date/time',\n select: value => value === defaultFormat.get(),\n fetch: done => {\n done(global.map(formats, format => ({\n type: 'choiceitem',\n text: getDateTime(editor, format),\n value: format\n })));\n },\n onAction: _api => {\n insertDateTime(defaultFormat.get());\n },\n onItemAction: (_api, value) => {\n defaultFormat.set(value);\n insertDateTime(value);\n }\n });\n const makeMenuItemHandler = format => () => {\n defaultFormat.set(format);\n insertDateTime(format);\n };\n editor.ui.registry.addNestedMenuItem('insertdatetime', {\n icon: 'insert-time',\n text: 'Date/time',\n getSubmenuItems: () => global.map(formats, format => ({\n type: 'menuitem',\n text: getDateTime(editor, format),\n onAction: makeMenuItemHandler(format)\n }))\n });\n };\n\n var Plugin = () => {\n global$1.add('insertdatetime', editor => {\n register$2(editor);\n register$1(editor);\n register(editor);\n });\n };\n\n Plugin();\n\n})();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('editor',{attrs:{\"init\":_vm.tinyConfig},model:{value:(_vm.local),callback:function ($$v) {_vm.local=$$v},expression:\"local\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar validEvents = [\n 'onActivate',\n 'onAddUndo',\n 'onBeforeAddUndo',\n 'onBeforeExecCommand',\n 'onBeforeGetContent',\n 'onBeforeRenderUI',\n 'onBeforeSetContent',\n 'onBeforePaste',\n 'onBlur',\n 'onChange',\n 'onClearUndos',\n 'onClick',\n 'onContextMenu',\n 'onCopy',\n 'onCut',\n 'onDblclick',\n 'onDeactivate',\n 'onDirty',\n 'onDrag',\n 'onDragDrop',\n 'onDragEnd',\n 'onDragGesture',\n 'onDragOver',\n 'onDrop',\n 'onExecCommand',\n 'onFocus',\n 'onFocusIn',\n 'onFocusOut',\n 'onGetContent',\n 'onHide',\n 'onInit',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onLoadContent',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onNodeChange',\n 'onObjectResizeStart',\n 'onObjectResized',\n 'onObjectSelected',\n 'onPaste',\n 'onPostProcess',\n 'onPostRender',\n 'onPreProcess',\n 'onProgressState',\n 'onRedo',\n 'onRemove',\n 'onReset',\n 'onSaveContent',\n 'onSelectionChange',\n 'onSetAttrib',\n 'onSetContent',\n 'onShow',\n 'onSubmit',\n 'onUndo',\n 'onVisualAid'\n];\nvar isValidKey = function (key) { return validEvents.map(function (event) { return event.toLowerCase(); }).indexOf(key.toLowerCase()) !== -1; };\nvar bindHandlers = function (initEvent, listeners, editor) {\n Object.keys(listeners)\n .filter(isValidKey)\n .forEach(function (key) {\n var handler = listeners[key];\n if (typeof handler === 'function') {\n if (key === 'onInit') {\n handler(initEvent, editor);\n }\n else {\n editor.on(key.substring(2), function (e) { return handler(e, editor); });\n }\n }\n });\n};\nvar bindModelHandlers = function (ctx, editor) {\n var modelEvents = ctx.$props.modelEvents ? ctx.$props.modelEvents : null;\n var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;\n editor.on(normalizedEvents ? normalizedEvents : 'change input undo redo', function () {\n ctx.$emit('input', editor.getContent({ format: ctx.$props.outputFormat }));\n });\n};\nvar initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || (ctx.initialized ? ctx.cache : initialValue));\n // Always bind the value listener in case users use :value instead of v-model\n ctx.$watch('value', function (val, prevVal) {\n if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent({ format: ctx.$props.outputFormat })) {\n editor.setContent(val);\n }\n });\n // checks if the v-model shorthand is used (which sets an v-on:input listener) and then binds either\n // specified the events or defaults to \"change keyup\" event and emits the editor content on that event\n if (ctx.$listeners.input) {\n bindModelHandlers(ctx, editor);\n }\n bindHandlers(initEvent, ctx.$listeners, editor);\n ctx.initialized = true;\n};\nvar unique = 0;\nvar uuid = function (prefix) {\n var time = Date.now();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n};\nvar isTextarea = function (element) {\n return element !== null && element.tagName.toLowerCase() === 'textarea';\n};\nvar normalizePluginArray = function (plugins) {\n if (typeof plugins === 'undefined' || plugins === '') {\n return [];\n }\n return Array.isArray(plugins) ? plugins : plugins.split(' ');\n};\nvar mergePlugins = function (initPlugins, inputPlugins) {\n return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));\n};\nvar isNullOrUndefined = function (value) { return value === null || value === undefined; };\nexport { bindHandlers, bindModelHandlers, initEditor, isValidKey, uuid, isTextarea, mergePlugins, isNullOrUndefined };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { uuid } from './Utils';\nvar createState = function () {\n return {\n listeners: [],\n scriptId: uuid('tiny-script'),\n scriptLoaded: false\n };\n};\nvar CreateScriptLoader = function () {\n var state = createState();\n var injectScriptTag = function (scriptId, doc, url, callback) {\n var scriptTag = doc.createElement('script');\n scriptTag.referrerPolicy = 'origin';\n scriptTag.type = 'application/javascript';\n scriptTag.id = scriptId;\n scriptTag.src = url;\n var handler = function () {\n scriptTag.removeEventListener('load', handler);\n callback();\n };\n scriptTag.addEventListener('load', handler);\n if (doc.head) {\n doc.head.appendChild(scriptTag);\n }\n };\n var load = function (doc, url, callback) {\n if (state.scriptLoaded) {\n callback();\n }\n else {\n state.listeners.push(callback);\n if (!doc.getElementById(state.scriptId)) {\n injectScriptTag(state.scriptId, doc, url, function () {\n state.listeners.forEach(function (fn) { return fn(); });\n state.scriptLoaded = true;\n });\n }\n }\n };\n // Only to be used by tests.\n var reinitialize = function () {\n state = createState();\n };\n return {\n load: load,\n reinitialize: reinitialize\n };\n};\nvar ScriptLoader = CreateScriptLoader();\nexport { ScriptLoader };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport var editorProps = {\n apiKey: String,\n cloudChannel: String,\n id: String,\n init: Object,\n initialValue: String,\n inline: Boolean,\n modelEvents: [String, Array],\n plugins: [String, Array],\n tagName: String,\n toolbar: [String, Array],\n value: String,\n disabled: Boolean,\n tinymceScriptSrc: String,\n outputFormat: {\n type: String,\n validator: function (prop) { return prop === 'html' || prop === 'text'; }\n },\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ScriptLoader } from '../ScriptLoader';\nimport { getTinymce } from '../TinyMCE';\nimport { initEditor, isTextarea, mergePlugins, uuid, isNullOrUndefined } from '../Utils';\nimport { editorProps } from './EditorPropTypes';\nvar renderInline = function (h, id, tagName) {\n return h(tagName ? tagName : 'div', {\n attrs: { id: id }\n });\n};\nvar renderIframe = function (h, id) {\n return h('textarea', {\n attrs: { id: id },\n style: { visibility: 'hidden' }\n });\n};\nvar initialise = function (ctx) { return function () {\n var finalInit = __assign(__assign({}, ctx.$props.init), { readonly: ctx.$props.disabled, selector: \"#\" + ctx.elementId, plugins: mergePlugins(ctx.$props.init && ctx.$props.init.plugins, ctx.$props.plugins), toolbar: ctx.$props.toolbar || (ctx.$props.init && ctx.$props.init.toolbar), inline: ctx.inlineEditor, setup: function (editor) {\n ctx.editor = editor;\n editor.on('init', function (e) { return initEditor(e, ctx, editor); });\n if (ctx.$props.init && typeof ctx.$props.init.setup === 'function') {\n ctx.$props.init.setup(editor);\n }\n } });\n if (isTextarea(ctx.element)) {\n ctx.element.style.visibility = '';\n ctx.element.style.display = '';\n }\n getTinymce().init(finalInit);\n}; };\nexport var Editor = {\n props: editorProps,\n created: function () {\n this.elementId = this.$props.id || uuid('tiny-vue');\n this.inlineEditor = (this.$props.init && this.$props.init.inline) || this.$props.inline;\n this.initialized = false;\n },\n watch: {\n disabled: function () {\n this.editor.setMode(this.disabled ? 'readonly' : 'design');\n }\n },\n mounted: function () {\n this.element = this.$el;\n if (getTinymce() !== null) {\n initialise(this)();\n }\n else if (this.element && this.element.ownerDocument) {\n var channel = this.$props.cloudChannel ? this.$props.cloudChannel : '5';\n var apiKey = this.$props.apiKey ? this.$props.apiKey : 'no-api-key';\n var scriptSrc = isNullOrUndefined(this.$props.tinymceScriptSrc) ?\n \"https://cdn.tiny.cloud/1/\" + apiKey + \"/tinymce/\" + channel + \"/tinymce.min.js\" :\n this.$props.tinymceScriptSrc;\n ScriptLoader.load(this.element.ownerDocument, scriptSrc, initialise(this));\n }\n },\n beforeDestroy: function () {\n if (getTinymce() !== null) {\n getTinymce().remove(this.editor);\n }\n },\n deactivated: function () {\n var _a;\n if (!this.inlineEditor) {\n this.cache = this.editor.getContent();\n (_a = getTinymce()) === null || _a === void 0 ? void 0 : _a.remove(this.editor);\n }\n },\n activated: function () {\n if (!this.inlineEditor && this.initialized) {\n initialise(this)();\n }\n },\n render: function (h) {\n return this.inlineEditor ? renderInline(h, this.elementId, this.$props.tagName) : renderIframe(h, this.elementId);\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Editor } from './components/Editor';\nexport default Editor;\n","\n\n\n","import mod from \"-!../../../../../../cache-loader/dist/cjs.js??ref--13-0!../../../../../../babel-loader/lib/index.js!../../../../../../cache-loader/dist/cjs.js??ref--1-0!../../../../../../vue-loader/lib/index.js??vue-loader-options!./TinyMCE.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../cache-loader/dist/cjs.js??ref--13-0!../../../../../../babel-loader/lib/index.js!../../../../../../cache-loader/dist/cjs.js??ref--1-0!../../../../../../vue-loader/lib/index.js??vue-loader-options!./TinyMCE.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TinyMCE.vue?vue&type=template&id=30a55458&\"\nimport script from \"./TinyMCE.vue?vue&type=script&lang=js&\"\nexport * from \"./TinyMCE.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNull = eq(null);\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('link_assume_external_targets', {\n processor: value => {\n const valid = isString(value) || isBoolean(value);\n if (valid) {\n if (value === true) {\n return {\n value: 1,\n valid\n };\n } else if (value === 'http' || value === 'https') {\n return {\n value,\n valid\n };\n } else {\n return {\n value: 0,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string or a boolean.'\n };\n }\n },\n default: false\n });\n registerOption('link_context_toolbar', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_list', { processor: value => isString(value) || isFunction(value) || isArrayOf(value, isObject) });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n registerOption('link_target_list', {\n processor: value => isBoolean(value) || isArrayOf(value, isObject),\n default: true\n });\n registerOption('link_rel_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_title', {\n processor: 'boolean',\n default: true\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_quicklink', {\n processor: 'boolean',\n default: false\n });\n };\n const assumeExternalTargets = option('link_assume_external_targets');\n const hasContextToolbar = option('link_context_toolbar');\n const getLinkList = option('link_list');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const getTargetList = option('link_target_list');\n const getRelList = option('link_rel_list');\n const getLinkClassList = option('link_class_list');\n const shouldShowLinkTitle = option('link_title');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n const useQuickLink = option('link_quicklink');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const getValue = item => isString(item.value) ? item.value : '';\n const getText = item => {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n const sanitizeList = (list, extractValue) => {\n const out = [];\n global$4.each(list, item => {\n const text = getText(item);\n if (item.menu !== undefined) {\n const items = sanitizeList(item.menu, extractValue);\n out.push({\n text,\n items\n });\n } else {\n const value = extractValue(item);\n out.push({\n text,\n value\n });\n }\n });\n return out;\n };\n const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));\n const sanitize = list => sanitizeWith(getValue)(list);\n const createUi = (name, label) => items => ({\n name,\n type: 'listbox',\n label,\n items\n });\n const ListOptions = {\n sanitize,\n sanitizeWith,\n createUi,\n getValue\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';\n const isLink = elm => isAnchor(elm) && !!getHref(elm);\n const collectNodesInRange = (rng, predicate) => {\n if (rng.collapsed) {\n return [];\n } else {\n const contents = rng.cloneContents();\n const firstChild = contents.firstChild;\n const walker = new global$3(firstChild, contents);\n const elements = [];\n let current = firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n const hasProtocol = url => /^\\w+:/i.test(url);\n const getHref = elm => {\n var _a, _b;\n return (_b = (_a = elm.getAttribute('data-mce-href')) !== null && _a !== void 0 ? _a : elm.getAttribute('href')) !== null && _b !== void 0 ? _b : '';\n };\n const applyRelTargetRules = (rel, isUnsafe) => {\n const rules = ['noopener'];\n const rels = rel ? rel.split(/\\s+/) : [];\n const toString = rels => global$4.trim(rels.sort().join(' '));\n const addTargetRules = rels => {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n const removeTargetRules = rels => rels.filter(val => global$4.inArray(rules, val) === -1);\n const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n const trimCaretContainers = text => text.replace(/\\uFEFF/g, '');\n const getAnchorElement = (editor, selectedElm) => {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return Optional.from(editor.dom.select('a[href]', selectedElm)[0]);\n } else {\n return Optional.from(editor.dom.getParent(selectedElm, 'a[href]'));\n }\n };\n const isInAnchor = (editor, selectedElm) => getAnchorElement(editor, selectedElm).isSome();\n const getAnchorText = (selection, anchorElm) => {\n const text = anchorElm.fold(() => selection.getContent({ format: 'text' }), anchorElm => anchorElm.innerText || anchorElm.textContent || '');\n return trimCaretContainers(text);\n };\n const hasLinks = elements => global$4.grep(elements, isLink).length > 0;\n const hasLinksInSelection = rng => collectNodesInRange(rng, isLink).length > 0;\n const isOnlyTextSelected = editor => {\n const inlineTextElements = editor.schema.getTextInlineElements();\n const isElement = elm => elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n const elements = collectNodesInRange(editor.selection.getRng(), isElement);\n return elements.length === 0;\n };\n const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n const getLinkAttrs = data => {\n const attrs = [\n 'title',\n 'rel',\n 'class',\n 'target'\n ];\n return foldl(attrs, (acc, key) => {\n data[key].each(value => {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n const handleExternalTargets = (href, assumeExternalTargets) => {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n const applyLinkOverrides = (editor, linkAttrs) => {\n const newLinkAttrs = { ...linkAttrs };\n if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n newLinkAttrs.target = getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n const updateLink = (editor, anchorElm, text, linkAttrs) => {\n text.each(text => {\n if (has(anchorElm, 'innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n };\n const createLink = (editor, selectedElm, text, linkAttrs) => {\n const dom = editor.dom;\n if (isImageFigure(selectedElm)) {\n linkImageFigure(dom, selectedElm, linkAttrs);\n } else {\n text.fold(() => {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }, text => {\n editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(text)));\n });\n }\n };\n const linkDomMutation = (editor, attachState, data) => {\n const selectedElm = editor.selection.getNode();\n const anchorElm = getAnchorElement(editor, selectedElm);\n const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n editor.undoManager.transact(() => {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n anchorElm.fold(() => {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }, elm => {\n editor.focus();\n updateLink(editor, elm, data.text, linkAttrs);\n });\n });\n };\n const unlinkSelection = editor => {\n const dom = editor.dom, selection = editor.selection;\n const bookmark = selection.getBookmark();\n const rng = selection.getRng().cloneRange();\n const startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n const endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n if (startAnchorElm) {\n rng.setStartBefore(startAnchorElm);\n }\n if (endAnchorElm) {\n rng.setEndAfter(endAnchorElm);\n }\n selection.setRng(rng);\n editor.execCommand('unlink');\n selection.moveToBookmark(bookmark);\n };\n const unlinkDomMutation = editor => {\n editor.undoManager.transact(() => {\n const node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n const unwrapOptions = data => {\n const {\n class: cls,\n href,\n rel,\n target,\n text,\n title\n } = data;\n return filter({\n class: cls.getOrNull(),\n href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, (v, _k) => isNull(v) === false);\n };\n const sanitizeData = (editor, data) => {\n const getOption = editor.options.get;\n const uriOptions = {\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls')\n };\n const href = data.href;\n return {\n ...data,\n href: global$2.isDomSafe(href, 'a', uriOptions) ? href : ''\n };\n };\n const link = (editor, attachState, data) => {\n const sanitizedData = sanitizeData(editor, data);\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n };\n const unlink = editor => {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n const unlinkImageFigure = (editor, fig) => {\n var _a;\n const img = editor.dom.select('img', fig)[0];\n if (img) {\n const a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n const linkImageFigure = (dom, fig, attrs) => {\n var _a;\n const img = dom.select('img', fig)[0];\n if (img) {\n const a = dom.create('a', attrs);\n (_a = img.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n const isListGroup = item => hasNonNullableKey(item, 'items');\n const findTextByValue = (value, catalog) => findMap(catalog, item => {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const getDelta = (persistentText, fieldName, catalog, data) => {\n const value = data[fieldName];\n const hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(i => ({\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n })) : Optional.none();\n };\n const findCatalog = (catalogs, fieldName) => {\n if (fieldName === 'link') {\n return catalogs.link;\n } else if (fieldName === 'anchor') {\n return catalogs.anchor;\n } else {\n return Optional.none();\n }\n };\n const init = (initialData, linkCatalog) => {\n const persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n const getTitleFromUrlChange = url => {\n var _a;\n return someIf(persistentData.title.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.title).getOr(''));\n };\n const getTextFromUrlChange = url => {\n var _a;\n return someIf(persistentData.text.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.text).getOr(url.value));\n };\n const onUrlChange = data => {\n const text = getTextFromUrlChange(data.url);\n const title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some({\n ...text.map(text => ({ text })).getOr({}),\n ...title.map(title => ({ title })).getOr({})\n });\n } else {\n return Optional.none();\n }\n };\n const onCatalogChange = (data, change) => {\n const catalog = findCatalog(linkCatalog, change).getOr([]);\n return getDelta(persistentData.text, change, catalog, data);\n };\n const onChange = (getData, change) => {\n const name = change.name;\n if (name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], name)) {\n return onCatalogChange(getData(), name);\n } else if (name === 'text' || name === 'title') {\n persistentData[name] = getData()[name];\n return Optional.none();\n } else {\n return Optional.none();\n }\n };\n return { onChange };\n };\n const DialogChanges = {\n init,\n getDelta\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const delayedConfirm = (editor, message, callback) => {\n const rng = editor.selection.getRng();\n global$1.setEditorTimeout(editor, () => {\n editor.windowManager.confirm(message, state => {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n const tryEmailTransform = data => {\n const url = data.href;\n const suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Optional.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: oldData => ({\n ...oldData,\n href: 'mailto:' + url\n })\n }) : Optional.none();\n };\n const tryProtocolTransform = (assumeExternalTargets, defaultLinkProtocol) => data => {\n const url = data.href;\n const suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n return suggestProtocol ? Optional.some({\n message: `The URL you entered seems to be an external link. Do you want to add the required ${ defaultLinkProtocol }:// prefix?`,\n preprocess: oldData => ({\n ...oldData,\n href: defaultLinkProtocol + '://' + url\n })\n }) : Optional.none();\n };\n const preprocess = (editor, data) => findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], f => f(data)).fold(() => Promise.resolve(data), transform => new Promise(callback => {\n delayedConfirm(editor, transform.message, state => {\n callback(state ? transform.preprocess(data) : data);\n });\n }));\n const DialogConfirms = { preprocess };\n\n const getAnchors = editor => {\n const anchorNodes = editor.dom.select('a:not([href])');\n const anchors = bind(anchorNodes, anchor => {\n const id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Optional.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Optional.none();\n };\n const AnchorListOptions = { getAnchors };\n\n const getClasses = editor => {\n const list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n const ClassListOptions = { getClasses };\n\n const parseJson = text => {\n try {\n return Optional.some(JSON.parse(text));\n } catch (err) {\n return Optional.none();\n }\n };\n const getLinks = editor => {\n const extractor = item => editor.convertURL(item.value || item.url || '', 'href');\n const linkList = getLinkList(editor);\n return new Promise(resolve => {\n if (isString(linkList)) {\n fetch(linkList).then(res => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n } else if (isFunction(linkList)) {\n linkList(output => resolve(Optional.some(output)));\n } else {\n resolve(Optional.from(linkList));\n }\n }).then(optItems => optItems.bind(ListOptions.sanitizeWith(extractor)).map(items => {\n if (items.length > 0) {\n const noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n }));\n };\n const LinkListOptions = { getLinks };\n\n const getRels = (editor, initialTarget) => {\n const list = getRelList(editor);\n if (list.length > 0) {\n const isTargetBlank = is(initialTarget, '_blank');\n const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n const safeRelExtractor = item => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n const RelOptions = { getRels };\n\n const fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n const getTargets = editor => {\n const list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(() => Optional.some(fallbacks));\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n const TargetOptions = { getTargets };\n\n const nonEmptyAttr = (dom, elem, name) => {\n const val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n const extractFromAnchor = (editor, anchor) => {\n const dom = editor.dom;\n const onlyText = isOnlyTextSelected(editor);\n const text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n const url = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'href')));\n const target = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'target')));\n const rel = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'rel'));\n const linkClass = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'class'));\n const title = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'title'));\n return {\n url,\n text,\n title,\n target,\n rel,\n linkClass\n };\n };\n const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then(links => {\n const anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: linkNode,\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n const DialogInfo = { collect };\n\n const handleSubmit = (editor, info) => api => {\n const data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n const getChangedValue = key => Optional.from(data[key]).filter(value => !is(info.anchor[key], value));\n const changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n const attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n };\n DialogConfirms.preprocess(editor, changedData).then(pData => {\n link(editor, attachState, pData);\n });\n api.close();\n };\n const collectData = editor => {\n const anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n const getInitialData = (info, defaultTarget) => {\n const anchor = info.anchor;\n const url = anchor.url.getOr('');\n return {\n url: {\n value: url,\n meta: { original: { value: url } }\n },\n text: anchor.text.getOr(''),\n title: anchor.title.getOr(''),\n anchor: url,\n link: url,\n rel: anchor.rel.getOr(''),\n target: anchor.target.or(defaultTarget).getOr(''),\n linkClass: anchor.linkClass.getOr('')\n };\n };\n const makeDialog = (settings, onSubmit, editor) => {\n const urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL'\n }];\n const displayText = settings.anchor.text.map(() => ({\n name: 'text',\n type: 'input',\n label: 'Text to display'\n })).toArray();\n const titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n const initialData = getInitialData(settings, defaultTarget);\n const catalogs = settings.catalogs;\n const dialogDelta = DialogChanges.init(initialData, catalogs);\n const body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onChange: (api, {name}) => {\n dialogDelta.onChange(api.getData, { name }).each(newData => {\n api.setData(newData);\n });\n },\n onSubmit\n };\n };\n const open$1 = editor => {\n const data = collectData(editor);\n data.then(info => {\n const onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(spec => {\n editor.windowManager.open(spec);\n });\n };\n\n const register = editor => {\n editor.addCommand('mceLink', (_ui, value) => {\n if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {\n open$1(editor);\n } else {\n editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });\n }\n });\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const appendClickRemove = (link, evt) => {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n const open = url => {\n const link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n const evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n };\n\n const getLink = (editor, elm) => editor.dom.getParent(elm, 'a[href]');\n const getSelectedLink = editor => getLink(editor, editor.selection.getStart());\n const hasOnlyAltModifier = e => {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n const gotoLink = (editor, a) => {\n if (a) {\n const href = getHref(a);\n if (/^#/.test(href)) {\n const targetEl = editor.dom.select(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n open(a.href);\n }\n }\n };\n const openDialog = editor => () => {\n editor.execCommand('mceLink', false, { dialog: true });\n };\n const gotoSelectedLink = editor => () => {\n gotoLink(editor, getSelectedLink(editor));\n };\n const setupGotoLinks = editor => {\n editor.on('click', e => {\n const link = getLink(editor, e.target);\n if (link && global.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', e => {\n if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n const link = getSelectedLink(editor);\n if (link) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n }\n });\n };\n const toggleState = (editor, toggler) => {\n editor.on('NodeChange', toggler);\n return () => editor.off('NodeChange', toggler);\n };\n const toggleActiveState = editor => api => {\n const updateState = () => api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleEnabledState = editor => api => {\n const updateState = () => api.setEnabled(isInAnchor(editor, editor.selection.getNode()));\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleUnlinkState = editor => api => {\n const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n const parents = editor.dom.getParents(editor.selection.getStart());\n api.setEnabled(hasLinks$1(parents));\n return toggleState(editor, e => api.setEnabled(hasLinks$1(e.parents)));\n };\n\n const setup = editor => {\n editor.addShortcut('Meta+K', '', () => {\n editor.execCommand('mceLink');\n });\n };\n\n const setupButtons = editor => {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: gotoSelectedLink(editor),\n onSetup: toggleEnabledState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleUnlinkState(editor)\n });\n };\n const setupMenuItems = editor => {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: gotoSelectedLink(editor),\n onSetup: toggleEnabledState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: openDialog(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleUnlinkState(editor)\n });\n };\n const setupContextMenu = editor => {\n const inLink = 'link unlink openlink';\n const noLink = 'link';\n editor.ui.registry.addContextMenu('link', { update: element => hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink });\n };\n const setupContextToolbars = editor => {\n const collapseSelectionToEnd = editor => {\n editor.selection.collapse(false);\n };\n const onSetupLink = buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setEnabled(isInAnchor(editor, node));\n return noop;\n };\n const getLinkText = value => {\n const anchor = getAnchorElement(editor);\n const onlyText = isOnlyTextSelected(editor);\n if (anchor.isNone() && onlyText) {\n const text = getAnchorText(editor.selection, anchor);\n return Optional.some(text.length > 0 ? text : value);\n } else {\n return Optional.none();\n }\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: toggleActiveState(editor)\n },\n label: 'Link',\n predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),\n initValue: () => {\n const elm = getAnchorElement(editor);\n return elm.fold(constant(''), getHref);\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setActive(isInAnchor(editor, node));\n return toggleActiveState(editor)(buttonApi);\n },\n onAction: formApi => {\n const value = formApi.getValue();\n const text = getLinkText(value);\n const attachState = {\n href: value,\n attach: noop\n };\n link(editor, attachState, {\n href: value,\n text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.none(),\n class: Optional.none()\n });\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: formApi => {\n unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: formApi => {\n gotoSelectedLink(editor)();\n formApi.hide();\n }\n }\n ]\n });\n };\n\n var Plugin = () => {\n global$5.add('link', editor => {\n register$1(editor);\n setupButtons(editor);\n setupMenuItems(editor);\n setupContextMenu(editor);\n setupContextToolbars(editor);\n setupGotoLinks(editor);\n register(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar getGlobal = function () { return (typeof window !== 'undefined' ? window : global); };\nvar getTinymce = function () {\n var global = getGlobal();\n return global && global.tinymce ? global.tinymce : null;\n};\nexport { getTinymce };\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const getPrototypeOf = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const is = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf(o) === proto);\n const isString = isType('string');\n const isObject = isType('object');\n const isPlainObject = value => is(value, Object);\n const isArray = isType('array');\n const isNull = eq(null);\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const nativePush = Array.prototype.push;\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const get = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get(xs, 0);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const remove = (element, key) => {\n element.dom.removeAttribute(key);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n const isNotEmpty = s => s.length > 0;\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('image_dimensions', {\n processor: 'boolean',\n default: true\n });\n registerOption('image_advtab', {\n processor: 'boolean',\n default: false\n });\n registerOption('image_uploadtab', {\n processor: 'boolean',\n default: true\n });\n registerOption('image_prepend_url', {\n processor: 'string',\n default: ''\n });\n registerOption('image_class_list', { processor: 'object[]' });\n registerOption('image_description', {\n processor: 'boolean',\n default: true\n });\n registerOption('image_title', {\n processor: 'boolean',\n default: false\n });\n registerOption('image_caption', {\n processor: 'boolean',\n default: false\n });\n registerOption('image_list', {\n processor: value => {\n const valid = value === false || isString(value) || isArrayOf(value, isObject) || isFunction(value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be false, a string, an array or a function.'\n };\n },\n default: false\n });\n };\n const hasDimensions = option('image_dimensions');\n const hasAdvTab = option('image_advtab');\n const hasUploadTab = option('image_uploadtab');\n const getPrependUrl = option('image_prepend_url');\n const getClassList = option('image_class_list');\n const hasDescription = option('image_description');\n const hasImageTitle = option('image_title');\n const hasImageCaption = option('image_caption');\n const getImageList = option('image_list');\n const showAccessibilityOptions = option('a11y_advanced_options');\n const isAutomaticUploadsEnabled = option('automatic_uploads');\n const hasUploadUrl = editor => isNotEmpty(editor.options.get('images_upload_url'));\n const hasUploadHandler = editor => isNonNullable(editor.options.get('images_upload_handler'));\n\n const parseIntAndGetMax = (val1, val2) => Math.max(parseInt(val1, 10), parseInt(val2, 10));\n const getImageSize = url => new Promise(callback => {\n const img = document.createElement('img');\n const done = dimensions => {\n img.onload = img.onerror = null;\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback(dimensions);\n };\n img.onload = () => {\n const width = parseIntAndGetMax(img.width, img.clientWidth);\n const height = parseIntAndGetMax(img.height, img.clientHeight);\n const dimensions = {\n width,\n height\n };\n done(Promise.resolve(dimensions));\n };\n img.onerror = () => {\n done(Promise.reject(`Failed to get image dimensions for: ${ url }`));\n };\n const style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n document.body.appendChild(img);\n img.src = url;\n });\n const removePixelSuffix = value => {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n const addPixelSuffix = value => {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n const mergeMargins = css => {\n if (css.margin) {\n const splitMargin = String(css.margin).split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n const createImageList = (editor, callback) => {\n const imageList = getImageList(editor);\n if (isString(imageList)) {\n fetch(imageList).then(res => {\n if (res.ok) {\n res.json().then(callback);\n }\n });\n } else if (isFunction(imageList)) {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n const waitLoadImage = (editor, data, imgElm) => {\n const selectImage = () => {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n };\n imgElm.onload = () => {\n if (!data.width && !data.height && hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: String(imgElm.clientWidth),\n height: String(imgElm.clientHeight)\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n const blobToDataUri = blob => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result);\n };\n reader.onerror = () => {\n var _a;\n reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n };\n reader.readAsDataURL(blob);\n });\n const isPlaceholderImage = imgElm => imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));\n const isSafeImageUrl = (editor, src) => {\n const getOption = editor.options.get;\n return global$2.isDomSafe(src, 'img', {\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls')\n });\n };\n\n const DOM = global$3.DOM;\n const getHspace = image => {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n const getVspace = image => {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n const getBorder = image => {\n if (image.style.borderWidth) {\n return removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n const getAttrib = (image, name) => {\n var _a;\n if (image.hasAttribute(name)) {\n return (_a = image.getAttribute(name)) !== null && _a !== void 0 ? _a : '';\n } else {\n return '';\n }\n };\n const hasCaption = image => image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n const updateAttrib = (image, name, value) => {\n if (value === '' || value === null) {\n image.removeAttribute(name);\n } else {\n image.setAttribute(name, value);\n }\n };\n const wrapInFigure = image => {\n const figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n const removeFigure = image => {\n const figureElm = image.parentNode;\n if (isNonNullable(figureElm)) {\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n }\n };\n const toggleCaption = image => {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n const normalizeStyle = (image, normalizeCss) => {\n const attrValue = image.getAttribute('style');\n const value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n const setSize = (name, normalizeCss) => (image, name, value) => {\n const styles = image.style;\n if (styles[name]) {\n styles[name] = addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n updateAttrib(image, name, value);\n }\n };\n const getSize = (image, name) => {\n if (image.style[name]) {\n return removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n const setHspace = (image, value) => {\n const pxValue = addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n const setVspace = (image, value) => {\n const pxValue = addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n const setBorder = (image, value) => {\n const pxValue = addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n const setBorderStyle = (image, value) => {\n image.style.borderStyle = value;\n };\n const getBorderStyle = image => {\n var _a;\n return (_a = image.style.borderStyle) !== null && _a !== void 0 ? _a : '';\n };\n const isFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE';\n const isImage = elm => elm.nodeName === 'IMG';\n const getIsDecorative = image => DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation';\n const getAlt = image => {\n if (getIsDecorative(image)) {\n return '';\n } else {\n return getAttrib(image, 'alt');\n }\n };\n const defaultData = () => ({\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: '',\n isDecorative: false\n });\n const getStyleValue = (normalizeCss, data) => {\n var _a;\n const image = document.createElement('img');\n updateAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss((_a = image.getAttribute('style')) !== null && _a !== void 0 ? _a : '');\n };\n const create = (normalizeCss, data) => {\n const image = document.createElement('img');\n write(normalizeCss, {\n ...data,\n caption: false\n }, image);\n setAlt(image, data.alt, data.isDecorative);\n if (data.caption) {\n const figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n const read = (normalizeCss, image) => ({\n src: getAttrib(image, 'src'),\n alt: getAlt(image),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getBorderStyle(image),\n isDecorative: getIsDecorative(image)\n });\n const updateProp = (image, oldData, newData, name, set) => {\n if (newData[name] !== oldData[name]) {\n set(image, name, String(newData[name]));\n }\n };\n const setAlt = (image, alt, isDecorative) => {\n if (isDecorative) {\n DOM.setAttrib(image, 'role', 'presentation');\n const sugarImage = SugarElement.fromDom(image);\n set(sugarImage, 'alt', '');\n } else {\n if (isNull(alt)) {\n const sugarImage = SugarElement.fromDom(image);\n remove(sugarImage, 'alt');\n } else {\n const sugarImage = SugarElement.fromDom(image);\n set(sugarImage, 'alt', alt);\n }\n if (DOM.getAttrib(image, 'role') === 'presentation') {\n DOM.setAttrib(image, 'role', '');\n }\n }\n };\n const updateAlt = (image, oldData, newData) => {\n if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n setAlt(image, newData.alt, newData.isDecorative);\n }\n };\n const normalized = (set, normalizeCss) => (image, name, value) => {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n const write = (normalizeCss, newData, image) => {\n const oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', (image, _name, _value) => toggleCaption(image));\n updateProp(image, oldData, newData, 'src', updateAttrib);\n updateProp(image, oldData, newData, 'title', updateAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', updateAttrib);\n updateProp(image, oldData, newData, 'style', normalized((image, value) => updateAttrib(image, 'style', value), normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n updateAlt(image, oldData, newData);\n };\n\n const normalizeCss$1 = (editor, cssText) => {\n const css = editor.dom.styles.parse(cssText);\n const mergedCss = mergeMargins(css);\n const compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n const getSelectedImage = editor => {\n const imgElm = editor.selection.getNode();\n const figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || isPlaceholderImage(imgElm))) {\n return null;\n }\n return imgElm;\n };\n const splitTextBlock = (editor, figure) => {\n var _a;\n const dom = editor.dom;\n const textBlockElements = filter(editor.schema.getTextBlockElements(), (_, parentElm) => !editor.schema.isValidChild(parentElm, 'figure'));\n const textBlock = dom.getParent(figure.parentNode, node => hasNonNullableKey(textBlockElements, node.nodeName), editor.getBody());\n if (textBlock) {\n return (_a = dom.split(textBlock, figure)) !== null && _a !== void 0 ? _a : figure;\n } else {\n return figure;\n }\n };\n const readImageDataFromSelection = editor => {\n const image = getSelectedImage(editor);\n return image ? read(css => normalizeCss$1(editor, css), image) : defaultData();\n };\n const insertImageAtCaret = (editor, data) => {\n const elm = create(css => normalizeCss$1(editor, css), data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n const insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n const figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n const syncSrcAttr = (editor, image) => {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n const deleteImage = (editor, image) => {\n if (image) {\n const elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n const writeImageDataToSelection = (editor, data) => {\n const image = getSelectedImage(editor);\n if (image) {\n write(css => normalizeCss$1(editor, css), data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n const figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n waitLoadImage(editor, data, image);\n }\n }\n };\n const sanitizeImageData = (editor, data) => {\n const src = data.src;\n return {\n ...data,\n src: isSafeImageUrl(editor, src) ? src : ''\n };\n };\n const insertOrUpdateImage = (editor, partialData) => {\n const image = getSelectedImage(editor);\n if (image) {\n const selectedImageData = read(css => normalizeCss$1(editor, css), image);\n const data = {\n ...selectedImageData,\n ...partialData\n };\n const sanitizedData = sanitizeImageData(editor, data);\n if (data.src) {\n writeImageDataToSelection(editor, sanitizedData);\n } else {\n deleteImage(editor, image);\n }\n } else if (partialData.src) {\n insertImageAtCaret(editor, {\n ...defaultData(),\n ...partialData\n });\n }\n };\n\n const deep = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.ImageUploader');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const getValue = item => isString(item.value) ? item.value : '';\n const getText = item => {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n const sanitizeList = (list, extractValue) => {\n const out = [];\n global.each(list, item => {\n const text = getText(item);\n if (item.menu !== undefined) {\n const items = sanitizeList(item.menu, extractValue);\n out.push({\n text,\n items\n });\n } else {\n const value = extractValue(item);\n out.push({\n text,\n value\n });\n }\n });\n return out;\n };\n const sanitizer = (extractor = getValue) => list => {\n if (list) {\n return Optional.from(list).map(list => sanitizeList(list, extractor));\n } else {\n return Optional.none();\n }\n };\n const sanitize = list => sanitizer(getValue)(list);\n const isGroup = item => has(item, 'items');\n const findEntryDelegate = (list, value) => findMap(list, item => {\n if (isGroup(item)) {\n return findEntryDelegate(item.items, value);\n } else if (item.value === value) {\n return Optional.some(item);\n } else {\n return Optional.none();\n }\n });\n const findEntry = (optList, value) => optList.bind(list => findEntryDelegate(list, value));\n const ListUtils = {\n sanitizer,\n sanitize,\n findEntry\n };\n\n const makeTab$2 = _info => ({\n title: 'Advanced',\n name: 'advanced',\n items: [{\n type: 'grid',\n columns: 2,\n items: [\n {\n type: 'input',\n label: 'Vertical space',\n name: 'vspace',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n label: 'Horizontal space',\n name: 'hspace',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n label: 'Border width',\n name: 'border',\n inputMode: 'numeric'\n },\n {\n type: 'listbox',\n name: 'borderstyle',\n label: 'Border style',\n items: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n }\n ]\n }]\n });\n const AdvTab = { makeTab: makeTab$2 };\n\n const collect = editor => {\n const urlListSanitizer = ListUtils.sanitizer(item => editor.convertURL(item.value || item.url || '', 'src'));\n const futureImageList = new Promise(completer => {\n createImageList(editor, imageList => {\n completer(urlListSanitizer(imageList).map(items => flatten([\n [{\n text: 'None',\n value: ''\n }],\n items\n ])));\n });\n });\n const classList = ListUtils.sanitize(getClassList(editor));\n const hasAdvTab$1 = hasAdvTab(editor);\n const hasUploadTab$1 = hasUploadTab(editor);\n const hasUploadUrl$1 = hasUploadUrl(editor);\n const hasUploadHandler$1 = hasUploadHandler(editor);\n const image = readImageDataFromSelection(editor);\n const hasDescription$1 = hasDescription(editor);\n const hasImageTitle$1 = hasImageTitle(editor);\n const hasDimensions$1 = hasDimensions(editor);\n const hasImageCaption$1 = hasImageCaption(editor);\n const hasAccessibilityOptions = showAccessibilityOptions(editor);\n const automaticUploads = isAutomaticUploadsEnabled(editor);\n const prependURL = Optional.some(getPrependUrl(editor)).filter(preUrl => isString(preUrl) && preUrl.length > 0);\n return futureImageList.then(imageList => ({\n image,\n imageList,\n classList,\n hasAdvTab: hasAdvTab$1,\n hasUploadTab: hasUploadTab$1,\n hasUploadUrl: hasUploadUrl$1,\n hasUploadHandler: hasUploadHandler$1,\n hasDescription: hasDescription$1,\n hasImageTitle: hasImageTitle$1,\n hasDimensions: hasDimensions$1,\n hasImageCaption: hasImageCaption$1,\n prependURL,\n hasAccessibilityOptions,\n automaticUploads\n }));\n };\n\n const makeItems = info => {\n const imageUrl = {\n name: 'src',\n type: 'urlinput',\n filetype: 'image',\n label: 'Source'\n };\n const imageList = info.imageList.map(items => ({\n name: 'images',\n type: 'listbox',\n label: 'Image list',\n items\n }));\n const imageDescription = {\n name: 'alt',\n type: 'input',\n label: 'Alternative description',\n enabled: !(info.hasAccessibilityOptions && info.image.isDecorative)\n };\n const imageTitle = {\n name: 'title',\n type: 'input',\n label: 'Image title'\n };\n const imageDimensions = {\n name: 'dimensions',\n type: 'sizeinput'\n };\n const isDecorative = {\n type: 'label',\n label: 'Accessibility',\n items: [{\n name: 'isDecorative',\n type: 'checkbox',\n label: 'Image is decorative'\n }]\n };\n const classList = info.classList.map(items => ({\n name: 'classes',\n type: 'listbox',\n label: 'Class',\n items\n }));\n const caption = {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n };\n const getDialogContainerType = useColumns => useColumns ? {\n type: 'grid',\n columns: 2\n } : { type: 'panel' };\n return flatten([\n [imageUrl],\n imageList.toArray(),\n info.hasAccessibilityOptions && info.hasDescription ? [isDecorative] : [],\n info.hasDescription ? [imageDescription] : [],\n info.hasImageTitle ? [imageTitle] : [],\n info.hasDimensions ? [imageDimensions] : [],\n [{\n ...getDialogContainerType(info.classList.isSome() && info.hasImageCaption),\n items: flatten([\n classList.toArray(),\n info.hasImageCaption ? [caption] : []\n ])\n }]\n ]);\n };\n const makeTab$1 = info => ({\n title: 'General',\n name: 'general',\n items: makeItems(info)\n });\n const MainTab = {\n makeTab: makeTab$1,\n makeItems\n };\n\n const makeTab = _info => {\n const items = [{\n type: 'dropzone',\n name: 'fileinput'\n }];\n return {\n title: 'Upload',\n name: 'upload',\n items\n };\n };\n const UploadTab = { makeTab };\n\n const createState = info => ({\n prevImage: ListUtils.findEntry(info.imageList, info.image.src),\n prevAlt: info.image.alt,\n open: true\n });\n const fromImageData = image => ({\n src: {\n value: image.src,\n meta: {}\n },\n images: image.src,\n alt: image.alt,\n title: image.title,\n dimensions: {\n width: image.width,\n height: image.height\n },\n classes: image.class,\n caption: image.caption,\n style: image.style,\n vspace: image.vspace,\n border: image.border,\n hspace: image.hspace,\n borderstyle: image.borderStyle,\n fileinput: [],\n isDecorative: image.isDecorative\n });\n const toImageData = (data, removeEmptyAlt) => ({\n src: data.src.value,\n alt: (data.alt === null || data.alt.length === 0) && removeEmptyAlt ? null : data.alt,\n title: data.title,\n width: data.dimensions.width,\n height: data.dimensions.height,\n class: data.classes,\n style: data.style,\n caption: data.caption,\n hspace: data.hspace,\n vspace: data.vspace,\n border: data.border,\n borderStyle: data.borderstyle,\n isDecorative: data.isDecorative\n });\n const addPrependUrl2 = (info, srcURL) => {\n if (!/^(?:[a-zA-Z]+:)?\\/\\//.test(srcURL)) {\n return info.prependURL.bind(prependUrl => {\n if (srcURL.substring(0, prependUrl.length) !== prependUrl) {\n return Optional.some(prependUrl + srcURL);\n }\n return Optional.none();\n });\n }\n return Optional.none();\n };\n const addPrependUrl = (info, api) => {\n const data = api.getData();\n addPrependUrl2(info, data.src.value).each(srcURL => {\n api.setData({\n src: {\n value: srcURL,\n meta: data.src.meta\n }\n });\n });\n };\n const formFillFromMeta2 = (info, data, meta) => {\n if (info.hasDescription && isString(meta.alt)) {\n data.alt = meta.alt;\n }\n if (info.hasAccessibilityOptions) {\n data.isDecorative = meta.isDecorative || data.isDecorative || false;\n }\n if (info.hasImageTitle && isString(meta.title)) {\n data.title = meta.title;\n }\n if (info.hasDimensions) {\n if (isString(meta.width)) {\n data.dimensions.width = meta.width;\n }\n if (isString(meta.height)) {\n data.dimensions.height = meta.height;\n }\n }\n if (isString(meta.class)) {\n ListUtils.findEntry(info.classList, meta.class).each(entry => {\n data.classes = entry.value;\n });\n }\n if (info.hasImageCaption) {\n if (isBoolean(meta.caption)) {\n data.caption = meta.caption;\n }\n }\n if (info.hasAdvTab) {\n if (isString(meta.style)) {\n data.style = meta.style;\n }\n if (isString(meta.vspace)) {\n data.vspace = meta.vspace;\n }\n if (isString(meta.border)) {\n data.border = meta.border;\n }\n if (isString(meta.hspace)) {\n data.hspace = meta.hspace;\n }\n if (isString(meta.borderstyle)) {\n data.borderstyle = meta.borderstyle;\n }\n }\n };\n const formFillFromMeta = (info, api) => {\n const data = api.getData();\n const meta = data.src.meta;\n if (meta !== undefined) {\n const newData = deepMerge({}, data);\n formFillFromMeta2(info, newData, meta);\n api.setData(newData);\n }\n };\n const calculateImageSize = (helpers, info, state, api) => {\n const data = api.getData();\n const url = data.src.value;\n const meta = data.src.meta || {};\n if (!meta.width && !meta.height && info.hasDimensions) {\n if (isNotEmpty(url)) {\n helpers.imageSize(url).then(size => {\n if (state.open) {\n api.setData({ dimensions: size });\n }\n }).catch(e => console.error(e));\n } else {\n api.setData({\n dimensions: {\n width: '',\n height: ''\n }\n });\n }\n }\n };\n const updateImagesDropdown = (info, state, api) => {\n const data = api.getData();\n const image = ListUtils.findEntry(info.imageList, data.src.value);\n state.prevImage = image;\n api.setData({ images: image.map(entry => entry.value).getOr('') });\n };\n const changeSrc = (helpers, info, state, api) => {\n addPrependUrl(info, api);\n formFillFromMeta(info, api);\n calculateImageSize(helpers, info, state, api);\n updateImagesDropdown(info, state, api);\n };\n const changeImages = (helpers, info, state, api) => {\n const data = api.getData();\n const image = ListUtils.findEntry(info.imageList, data.images);\n image.each(img => {\n const updateAlt = data.alt === '' || state.prevImage.map(image => image.text === data.alt).getOr(false);\n if (updateAlt) {\n if (img.value === '') {\n api.setData({\n src: img,\n alt: state.prevAlt\n });\n } else {\n api.setData({\n src: img,\n alt: img.text\n });\n }\n } else {\n api.setData({ src: img });\n }\n });\n state.prevImage = image;\n changeSrc(helpers, info, state, api);\n };\n const changeFileInput = (helpers, info, state, api) => {\n const data = api.getData();\n api.block('Uploading image');\n head(data.fileinput).fold(() => {\n api.unblock();\n }, file => {\n const blobUri = URL.createObjectURL(file);\n const finalize = () => {\n api.unblock();\n URL.revokeObjectURL(blobUri);\n };\n const updateSrcAndSwitchTab = url => {\n api.setData({\n src: {\n value: url,\n meta: {}\n }\n });\n api.showTab('general');\n changeSrc(helpers, info, state, api);\n };\n blobToDataUri(file).then(dataUrl => {\n const blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);\n if (info.automaticUploads) {\n helpers.uploadImage(blobInfo).then(result => {\n updateSrcAndSwitchTab(result.url);\n finalize();\n }).catch(err => {\n finalize();\n helpers.alertErr(err);\n });\n } else {\n helpers.addToBlobCache(blobInfo);\n updateSrcAndSwitchTab(blobInfo.blobUri());\n api.unblock();\n }\n });\n });\n };\n const changeHandler = (helpers, info, state) => (api, evt) => {\n if (evt.name === 'src') {\n changeSrc(helpers, info, state, api);\n } else if (evt.name === 'images') {\n changeImages(helpers, info, state, api);\n } else if (evt.name === 'alt') {\n state.prevAlt = api.getData().alt;\n } else if (evt.name === 'fileinput') {\n changeFileInput(helpers, info, state, api);\n } else if (evt.name === 'isDecorative') {\n api.setEnabled('alt', !api.getData().isDecorative);\n }\n };\n const closeHandler = state => () => {\n state.open = false;\n };\n const makeDialogBody = info => {\n if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {\n const tabPanel = {\n type: 'tabpanel',\n tabs: flatten([\n [MainTab.makeTab(info)],\n info.hasAdvTab ? [AdvTab.makeTab(info)] : [],\n info.hasUploadTab && (info.hasUploadUrl || info.hasUploadHandler) ? [UploadTab.makeTab(info)] : []\n ])\n };\n return tabPanel;\n } else {\n const panel = {\n type: 'panel',\n items: MainTab.makeItems(info)\n };\n return panel;\n }\n };\n const submitHandler = (editor, info, helpers) => api => {\n const data = deepMerge(fromImageData(info.image), api.getData());\n const finalData = {\n ...data,\n style: getStyleValue(helpers.normalizeCss, toImageData(data, false))\n };\n editor.execCommand('mceUpdateImage', false, toImageData(finalData, info.hasAccessibilityOptions));\n editor.editorUpload.uploadImagesAuto();\n api.close();\n };\n const imageSize = editor => url => {\n if (!isSafeImageUrl(editor, url)) {\n return Promise.resolve({\n width: '',\n height: ''\n });\n } else {\n return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(dimensions => ({\n width: String(dimensions.width),\n height: String(dimensions.height)\n }));\n }\n };\n const createBlobCache = editor => (file, blobUri, dataUrl) => {\n var _a;\n return editor.editorUpload.blobCache.create({\n blob: file,\n blobUri,\n name: (_a = file.name) === null || _a === void 0 ? void 0 : _a.replace(/\\.[^\\.]+$/, ''),\n filename: file.name,\n base64: dataUrl.split(',')[1]\n });\n };\n const addToBlobCache = editor => blobInfo => {\n editor.editorUpload.blobCache.add(blobInfo);\n };\n const alertErr = editor => message => {\n editor.windowManager.alert(message);\n };\n const normalizeCss = editor => cssText => normalizeCss$1(editor, cssText);\n const parseStyle = editor => cssText => editor.dom.parseStyle(cssText);\n const serializeStyle = editor => (stylesArg, name) => editor.dom.serializeStyle(stylesArg, name);\n const uploadImage = editor => blobInfo => global$1(editor).upload([blobInfo], false).then(results => {\n var _a;\n if (results.length === 0) {\n return Promise.reject('Failed to upload image');\n } else if (results[0].status === false) {\n return Promise.reject((_a = results[0].error) === null || _a === void 0 ? void 0 : _a.message);\n } else {\n return results[0];\n }\n });\n const Dialog = editor => {\n const helpers = {\n imageSize: imageSize(editor),\n addToBlobCache: addToBlobCache(editor),\n createBlobCache: createBlobCache(editor),\n alertErr: alertErr(editor),\n normalizeCss: normalizeCss(editor),\n parseStyle: parseStyle(editor),\n serializeStyle: serializeStyle(editor),\n uploadImage: uploadImage(editor)\n };\n const open = () => {\n collect(editor).then(info => {\n const state = createState(info);\n return {\n title: 'Insert/Edit Image',\n size: 'normal',\n body: makeDialogBody(info),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: fromImageData(info.image),\n onSubmit: submitHandler(editor, info, helpers),\n onChange: changeHandler(helpers, info, state),\n onClose: closeHandler(state)\n };\n }).then(editor.windowManager.open);\n };\n return { open };\n };\n\n const register$1 = editor => {\n editor.addCommand('mceImage', Dialog(editor).open);\n editor.addCommand('mceUpdateImage', (_ui, data) => {\n editor.undoManager.transact(() => insertOrUpdateImage(editor, data));\n });\n };\n\n const hasImageClass = node => {\n const className = node.attr('class');\n return isNonNullable(className) && /\\bimage\\b/.test(className);\n };\n const toggleContentEditableState = state => nodes => {\n let i = nodes.length;\n const toggleContentEditable = node => {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n const node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n const setup = editor => {\n editor.on('PreInit', () => {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n\n const register = editor => {\n editor.ui.registry.addToggleButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onAction: Dialog(editor).open,\n onSetup: buttonApi => {\n buttonApi.setActive(isNonNullable(getSelectedImage(editor)));\n return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object]):not([data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('image', {\n icon: 'image',\n text: 'Image...',\n onAction: Dialog(editor).open\n });\n editor.ui.registry.addContextMenu('image', { update: element => isFigure(element) || isImage(element) && !isPlaceholderImage(element) ? ['image'] : [] });\n };\n\n var Plugin = () => {\n global$4.add('image', editor => {\n register$2(editor);\n setup(editor);\n register(editor);\n register$1(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","/*!\n * Tiny Enhanced Image Editing plugin\n *\n * Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.\n * Licensed under the Tiny commercial license. See https://www.tiny.cloud/legal/\n *\n * Version: 1.0.2-47\n */\n\n!function () {\n\t\"use strict\";\n\n\tconst e = e => {\n\t\t\tlet t = e;\n\t\t\treturn {\n\t\t\t\tget: () => t, set: e => {\n\t\t\t\t\tt = e\n\t\t\t\t}\n\t\t\t}\n\t\t}, t = Object.getPrototypeOf, r = (e, t, r) => {\n\t\t\tvar o;\n\t\t\treturn !!r(e, t.prototype) || (null === (o = e.constructor) || void 0 === o ? void 0 : o.name) === t.name\n\t\t}, o = e => t => (e => {\n\t\t\tconst t = typeof e;\n\t\t\treturn null === e ? \"null\" : \"object\" === t && Array.isArray(e) ? \"array\" : \"object\" === t && r(e, String, ((e, t) => t.isPrototypeOf(e))) ? \"string\" : t\n\t\t})(t) === e, n = e => t => typeof t === e, a = o(\"string\"), i = o(\"object\"),\n\t\ts = e => ((e, o) => i(e) && r(e, o, ((e, r) => t(e) === r)))(e, Object), l = o(\"array\"), d = n(\"boolean\"),\n\t\tc = (void 0, e => undefined === e);\n\tconst u = e => !(e => null == e)(e), m = n(\"function\"), h = n(\"number\"), g = () => {\n\t}, p = e => () => e, f = e => e, y = (e, t) => e === t;\n\n\tfunction b(e, ...t) {\n\t\treturn (...r) => {\n\t\t\tconst o = t.concat(r);\n\t\t\treturn e.apply(null, o)\n\t\t}\n\t}\n\n\tconst w = e => e(), v = p(!1), x = p(!0);\n\n\tclass S {\n\t\tconstructor(e, t) {\n\t\t\tthis.tag = e, this.value = t\n\t\t}\n\n\t\tstatic some(e) {\n\t\t\treturn new S(!0, e)\n\t\t}\n\n\t\tstatic none() {\n\t\t\treturn S.singletonNone\n\t\t}\n\n\t\tfold(e, t) {\n\t\t\treturn this.tag ? t(this.value) : e()\n\t\t}\n\n\t\tisSome() {\n\t\t\treturn this.tag\n\t\t}\n\n\t\tisNone() {\n\t\t\treturn !this.tag\n\t\t}\n\n\t\tmap(e) {\n\t\t\treturn this.tag ? S.some(e(this.value)) : S.none()\n\t\t}\n\n\t\tbind(e) {\n\t\t\treturn this.tag ? e(this.value) : S.none()\n\t\t}\n\n\t\texists(e) {\n\t\t\treturn this.tag && e(this.value)\n\t\t}\n\n\t\tforall(e) {\n\t\t\treturn !this.tag || e(this.value)\n\t\t}\n\n\t\tfilter(e) {\n\t\t\treturn !this.tag || e(this.value) ? this : S.none()\n\t\t}\n\n\t\tgetOr(e) {\n\t\t\treturn this.tag ? this.value : e\n\t\t}\n\n\t\tor(e) {\n\t\t\treturn this.tag ? this : e\n\t\t}\n\n\t\tgetOrThunk(e) {\n\t\t\treturn this.tag ? this.value : e()\n\t\t}\n\n\t\torThunk(e) {\n\t\t\treturn this.tag ? this : e()\n\t\t}\n\n\t\tgetOrDie(e) {\n\t\t\tif (this.tag) return this.value;\n\t\t\tthrow new Error(null != e ? e : \"Called getOrDie on None\")\n\t\t}\n\n\t\tstatic from(e) {\n\t\t\treturn u(e) ? S.some(e) : S.none()\n\t\t}\n\n\t\tgetOrNull() {\n\t\t\treturn this.tag ? this.value : null\n\t\t}\n\n\t\tgetOrUndefined() {\n\t\t\treturn this.value\n\t\t}\n\n\t\teach(e) {\n\t\t\tthis.tag && e(this.value)\n\t\t}\n\n\t\ttoArray() {\n\t\t\treturn this.tag ? [this.value] : []\n\t\t}\n\n\t\ttoString() {\n\t\t\treturn this.tag ? `some(${this.value})` : \"none()\"\n\t\t}\n\t}\n\n\tS.singletonNone = new S(!1);\n\tconst O = Object.keys, I = Object.hasOwnProperty, E = (e, t) => {\n\t\t\tconst r = O(e);\n\t\t\tfor (let o = 0, n = r.length; o < n; o++) {\n\t\t\t\tconst n = r[o];\n\t\t\t\tt(e[n], n)\n\t\t\t}\n\t\t}, P = (e, t) => I.call(e, t), R = Array.prototype.indexOf, C = (e, t) => ((e, t) => R.call(e, t))(e, t) > -1,\n\t\tD = (e, t) => {\n\t\t\tconst r = e.length, o = new Array(r);\n\t\t\tfor (let n = 0; n < r; n++) {\n\t\t\t\tconst r = e[n];\n\t\t\t\to[n] = t(r, n)\n\t\t\t}\n\t\t\treturn o\n\t\t}, M = (e, t) => {\n\t\t\tfor (let r = 0, o = e.length; r < o; r++) t(e[r], r)\n\t\t}, U = (e, t, r) => (M(e, ((e, o) => {\n\t\t\tr = t(r, e, o)\n\t\t})), r), A = (e, t) => ((e, t, r) => {\n\t\t\tfor (let o = 0, n = e.length; o < n; o++) {\n\t\t\t\tconst n = e[o];\n\t\t\t\tif (t(n, o)) return S.some(n);\n\t\t\t\tif (r(n, o)) break\n\t\t\t}\n\t\t\treturn S.none()\n\t\t})(e, t, v), F = e => {\n\t\t\tif (null == e) throw new Error(\"Node cannot be null or undefined\");\n\t\t\treturn {dom: e}\n\t\t}, T = (e, t) => {\n\t\t\tconst r = (t || document).createElement(e);\n\t\t\treturn F(r)\n\t\t}, L = F, k = (e, t) => {\n\t\t\tconst r = void 0 === t ? document : t.dom;\n\t\t\treturn 1 !== (o = r).nodeType && 9 !== o.nodeType && 11 !== o.nodeType || 0 === o.childElementCount ? S.none() : S.from(r.querySelector(e)).map(L);\n\t\t\tvar o\n\t\t};\n\t\"undefined\" != typeof window ? window : Function(\"return this;\")();\n\tconst _ = e => t => (e => e.dom.nodeType)(t) === e, N = _(1), z = _(3), B = _(9), G = _(11),\n\t\tH = m(Element.prototype.attachShadow) && m(Node.prototype.getRootNode), j = p(H),\n\t\tW = H ? e => L(e.dom.getRootNode()) : e => B(e) ? e : L(e.dom.ownerDocument), V = e => L(e.dom.host), X = e => {\n\t\t\tconst t = z(e) ? e.dom.parentNode : e.dom;\n\t\t\tif (null == t || null === t.ownerDocument) return !1;\n\t\t\tconst r = t.ownerDocument;\n\t\t\treturn (e => {\n\t\t\t\tconst t = W(e);\n\t\t\t\treturn G(r = t) && u(r.dom.host) ? S.some(t) : S.none();\n\t\t\t\tvar r\n\t\t\t})(L(t)).fold((() => r.body.contains(t)), (o = X, n = V, e => o(n(e))));\n\t\t\tvar o, n\n\t\t}, Y = (e, t) => ((e, r) => A(e.dom.childNodes, (e => ((e, t) => {\n\t\t\tconst r = e.dom;\n\t\t\tif (1 !== r.nodeType) return !1;\n\t\t\t{\n\t\t\t\tconst e = r;\n\t\t\t\tif (void 0 !== e.matches) return e.matches(t);\n\t\t\t\tif (void 0 !== e.msMatchesSelector) return e.msMatchesSelector(t);\n\t\t\t\tif (void 0 !== e.webkitMatchesSelector) return e.webkitMatchesSelector(t);\n\t\t\t\tif (void 0 !== e.mozMatchesSelector) return e.mozMatchesSelector(t);\n\t\t\t\tthrow new Error(\"Browser lacks native selectors\")\n\t\t\t}\n\t\t})(L(e), t))).map(L))(e), q = (e, t) => k(t, e), J = e => {\n\t\t\tconst t = L((e => {\n\t\t\t\t\tif (j() && u(e.target)) {\n\t\t\t\t\t\tconst t = L(e.target);\n\t\t\t\t\t\tif (N(t) && u(t.dom.shadowRoot) && e.composed && e.composedPath) {\n\t\t\t\t\t\t\tconst t = e.composedPath();\n\t\t\t\t\t\t\tif (t) return ((e, t) => 0 < e.length ? S.some(e[0]) : S.none())(t)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn S.from(e.target)\n\t\t\t\t})(e).getOr(e.target)), r = () => e.stopPropagation(), o = () => e.preventDefault(),\n\t\t\t\tn = (a = o, i = r, (...e) => a(i.apply(null, e)));\n\t\t\tvar a, i;\n\t\t\treturn ((e, t, r, o, n, a, i) => ({\n\t\t\t\ttarget: e,\n\t\t\t\tx: t,\n\t\t\t\ty: r,\n\t\t\t\tstop: o,\n\t\t\t\tprevent: n,\n\t\t\t\tkill: a,\n\t\t\t\traw: i\n\t\t\t}))(t, e.clientX, e.clientY, r, o, n, e)\n\t\t}, K = (e, t, r, o) => {\n\t\t\te.dom.removeEventListener(t, r, o)\n\t\t}, Z = x, $ = (e, t, r) => ((e, t, r, o) => ((e, t, r, o, n) => {\n\t\t\tconst a = ((e, t) => r => {\n\t\t\t\te(r) && t(J(r))\n\t\t\t})(r, o);\n\t\t\treturn e.dom.addEventListener(t, a, n), {unbind: b(K, e, t, a, n)}\n\t\t})(e, t, r, o, !1))(e, t, Z, r), Q = e => new Promise(((t, r) => {\n\t\t\tconst o = () => {\n\t\t\t\ta(), t(e)\n\t\t\t}, n = [$(e, \"load\", o), $(e, \"error\", (() => {\n\t\t\t\ta(), r(\"Unable to load data from image: \" + e.dom.src)\n\t\t\t}))], a = () => M(n, (e => e.unbind()));\n\t\t\te.dom.complete && o()\n\t\t})), ee = (e, t) => oe(document.createElement(\"canvas\"), e, t), te = e => {\n\t\t\tconst t = ee(e.width, e.height);\n\t\t\treturn re(t).drawImage(e, 0, 0), t\n\t\t}, re = e => e.getContext(\"2d\"), oe = (e, t, r) => (e.width = t, e.height = r, e),\n\t\tne = e => e.naturalWidth || e.width, ae = e => e.naturalHeight || e.height, ie = e => {\n\t\t\tconst t = URL.createObjectURL(e), r = new Image;\n\t\t\treturn r.src = t, Q(L(r)).then((e => e.dom))\n\t\t}, se = e => new Promise(((t, r) => {\n\t\t\tconst o = new XMLHttpRequest;\n\t\t\to.open(\"GET\", e, !0), o.responseType = \"blob\", o.onload = function () {\n\t\t\t\t200 === this.status && t(this.response)\n\t\t\t}, o.onerror = function () {\n\t\t\t\tr(0 === this.status ? (() => {\n\t\t\t\t\tconst e = new Error(\"No access to download image\");\n\t\t\t\t\treturn e.code = 18, e.name = \"SecurityError\", e\n\t\t\t\t})() : (() => new Error(\"Error \" + this.status + \" downloading image\"))())\n\t\t\t}, o.send()\n\t\t})), le = e => new Promise(((t, r) => {\n\t\t\t(e => {\n\t\t\t\tconst t = e.split(\",\"), r = /data:([^;]+)/.exec(t[0]);\n\t\t\t\tif (!r) return S.none();\n\t\t\t\tconst o = r[1], n = t[1], a = 1024, i = atob(n), s = i.length, l = Math.ceil(s / a), d = new Array(l);\n\t\t\t\tfor (let e = 0; e < l; ++e) {\n\t\t\t\t\tconst t = e * a, r = Math.min(t + a, s), o = new Array(r - t);\n\t\t\t\t\tfor (let e = t, n = 0; e < r; ++n, ++e) o[n] = i[e].charCodeAt(0);\n\t\t\t\t\td[e] = new Uint8Array(o)\n\t\t\t\t}\n\t\t\t\treturn S.some(new Blob(d, {type: o}))\n\t\t\t})(e).fold((() => {\n\t\t\t\tr(\"uri is not base64: \" + e)\n\t\t\t}), t)\n\t\t})), de = (e, t, r) => (t = t || \"image/png\", m(HTMLCanvasElement.prototype.toBlob) ? new Promise(((o, n) => {\n\t\t\te.toBlob((e => {\n\t\t\t\te ? o(e) : n()\n\t\t\t}), t, r)\n\t\t})) : le(e.toDataURL(t, r))), ce = e => ie(e), ue = e => e.bind(f);\n\t(e => {\n\t\tif (!l(e)) throw new Error(\"cases must be an array\");\n\t\tif (0 === e.length) throw new Error(\"there must be at least one case\");\n\t\tconst t = [], r = {};\n\t\tM(e, ((o, n) => {\n\t\t\tconst a = O(o);\n\t\t\tif (1 !== a.length) throw new Error(\"one and only one name per case\");\n\t\t\tconst i = a[0], s = o[i];\n\t\t\tif (void 0 !== r[i]) throw new Error(\"duplicate key detected:\" + i);\n\t\t\tif (\"cata\" === i) throw new Error(\"cannot have a case named cata (sorry)\");\n\t\t\tif (!l(s)) throw new Error(\"case arguments must be an array\");\n\t\t\tt.push(i), r[i] = (...r) => {\n\t\t\t\tconst o = r.length;\n\t\t\t\tif (o !== s.length) throw new Error(\"Wrong number of arguments to case \" + i + \". Expected \" + s.length + \" (\" + s + \"), got \" + o);\n\t\t\t\treturn {\n\t\t\t\t\tfold: (...t) => {\n\t\t\t\t\t\tif (t.length !== e.length) throw new Error(\"Wrong number of arguments to fold. Expected \" + e.length + \", got \" + t.length);\n\t\t\t\t\t\treturn t[n].apply(null, r)\n\t\t\t\t\t}, match: e => {\n\t\t\t\t\t\tconst o = O(e);\n\t\t\t\t\t\tif (t.length !== o.length) throw new Error(\"Wrong number of arguments to match. Expected: \" + t.join(\",\") + \"\\nActual: \" + o.join(\",\"));\n\t\t\t\t\t\tif (!((e, t) => {\n\t\t\t\t\t\t\tfor (let t = 0, n = e.length; t < n; ++t) if (!0 !== (r = e[t], C(o, r))) return !1;\n\t\t\t\t\t\t\tvar r;\n\t\t\t\t\t\t\treturn !0\n\t\t\t\t\t\t})(t)) throw new Error(\"Not all branches were specified when using match. Specified: \" + o.join(\", \") + \"\\nRequired: \" + t.join(\", \"));\n\t\t\t\t\t\treturn e[i].apply(null, r)\n\t\t\t\t\t}, log: e => {\n\t\t\t\t\t\tconsole.log(e, {constructors: t, constructor: i, params: r})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}))\n\t})([{bothErrors: [\"error1\", \"error2\"]}, {firstError: [\"error1\", \"value2\"]}, {secondError: [\"value1\", \"error2\"]}, {bothValues: [\"value1\", \"value2\"]}]);\n\tconst me = (e, t) => e.exists((e => e === t)), he = e => {\n\t\tconst t = t => t(e), r = p(e), o = () => n, n = {\n\t\t\ttag: !0,\n\t\t\tinner: e,\n\t\t\tfold: (t, r) => r(e),\n\t\t\tisValue: x,\n\t\t\tisError: v,\n\t\t\tmap: t => pe.value(t(e)),\n\t\t\tmapError: o,\n\t\t\tbind: t,\n\t\t\texists: t,\n\t\t\tforall: t,\n\t\t\tgetOr: r,\n\t\t\tor: o,\n\t\t\tgetOrThunk: r,\n\t\t\torThunk: o,\n\t\t\tgetOrDie: r,\n\t\t\teach: t => {\n\t\t\t\tt(e)\n\t\t\t},\n\t\t\ttoOptional: () => S.some(e)\n\t\t};\n\t\treturn n\n\t}, ge = e => {\n\t\tconst t = () => r, r = {\n\t\t\ttag: !1,\n\t\t\tinner: e,\n\t\t\tfold: (t, r) => t(e),\n\t\t\tisValue: v,\n\t\t\tisError: x,\n\t\t\tmap: t,\n\t\t\tmapError: t => pe.error(t(e)),\n\t\t\tbind: t,\n\t\t\texists: v,\n\t\t\tforall: x,\n\t\t\tgetOr: f,\n\t\t\tor: f,\n\t\t\tgetOrThunk: w,\n\t\t\torThunk: w,\n\t\t\tgetOrDie: (o = String(e), () => {\n\t\t\t\tthrow new Error(o)\n\t\t\t}),\n\t\t\teach: g,\n\t\t\ttoOptional: S.none\n\t\t};\n\t\tvar o;\n\t\treturn r\n\t}, pe = {value: he, error: ge, fromOption: (e, t) => e.fold((() => ge(t)), he)};\n\n\tclass fe {\n\t\tconstructor(e) {\n\t\t\tthis.littleEndian = !1, this.dataView = new DataView(e)\n\t\t}\n\n\t\tread(e, t) {\n\t\t\tif (e + t > this.length()) return pe.error(\"Read extends past buffer end\");\n\t\t\tconst r = this.littleEndian ? 0 : -8 * (t - 1);\n\t\t\tlet o = 0;\n\t\t\tfor (let n = 0; n < t; n++) o |= this.readByteAt(e + n) << Math.abs(r + 8 * n);\n\t\t\treturn pe.value(o)\n\t\t}\n\n\t\tsegment(e, t) {\n\t\t\tconst r = this.dataView.buffer;\n\t\t\treturn void 0 !== e && void 0 !== t ? r.slice(e, e + t) : void 0 !== e ? r.slice(e) : r\n\t\t}\n\n\t\tlength() {\n\t\t\treturn this.dataView.byteLength\n\t\t}\n\n\t\treadByteAt(e) {\n\t\t\treturn this.dataView.getUint8(e)\n\t\t}\n\t}\n\n\tconst ye = (e, t, r, o, n) => {\n\t\t\tif (t + r * o > e.length()) return pe.error(\"Read would extend past end of buffer\");\n\t\t\tconst a = [];\n\t\t\tfor (let i = 0; i < o; i++) {\n\t\t\t\tconst o = n(e, t + r * i);\n\t\t\t\tif (o.isError()) return o.map((e => [e]));\n\t\t\t\ta.push(o.getOrDie())\n\t\t\t}\n\t\t\treturn pe.value(a)\n\t\t}, be = (e, t) => e.read(t, 1), we = (e, t) => e.read(t, 2), ve = (e, t) => e.read(t, 4),\n\t\txe = e => pe.value(String.fromCharCode(e)), Se = e => pe.value(e > 2147483647 ? e - 4294967296 : e),\n\t\tOe = (e, t) => ve(e, t).bind(Se), Ie = (e, t) => be(e, t).bind(xe),\n\t\tEe = (e, t, r = 1) => ye(e, t, 1, r, Ie).map((e => e.join(\"\"))), Pe = {\n\t\t\t274: \"Orientation\",\n\t\t\t270: \"ImageDescription\",\n\t\t\t271: \"Make\",\n\t\t\t272: \"Model\",\n\t\t\t305: \"Software\",\n\t\t\t34665: \"ExifIFDPointer\",\n\t\t\t34853: \"GPSInfoIFDPointer\"\n\t\t}, Re = {\n\t\t\t36864: \"ExifVersion\",\n\t\t\t40961: \"ColorSpace\",\n\t\t\t40962: \"PixelXDimension\",\n\t\t\t40963: \"PixelYDimension\",\n\t\t\t36867: \"DateTimeOriginal\",\n\t\t\t33434: \"ExposureTime\",\n\t\t\t33437: \"FNumber\",\n\t\t\t34855: \"ISOSpeedRatings\",\n\t\t\t37377: \"ShutterSpeedValue\",\n\t\t\t37378: \"ApertureValue\",\n\t\t\t37383: \"MeteringMode\",\n\t\t\t37384: \"LightSource\",\n\t\t\t37385: \"Flash\",\n\t\t\t37386: \"FocalLength\",\n\t\t\t41986: \"ExposureMode\",\n\t\t\t41987: \"WhiteBalance\",\n\t\t\t41990: \"SceneCaptureType\",\n\t\t\t41988: \"DigitalZoomRatio\",\n\t\t\t41992: \"Contrast\",\n\t\t\t41993: \"Saturation\",\n\t\t\t41994: \"Sharpness\"\n\t\t}, Ce = {0: \"GPSVersionID\", 1: \"GPSLatitudeRef\", 2: \"GPSLatitude\", 3: \"GPSLongitudeRef\", 4: \"GPSLongitude\"},\n\t\tDe = {513: \"JPEGInterchangeFormat\", 514: \"JPEGInterchangeFormatLength\"}, Me = {\n\t\t\tColorSpace: {1: \"sRGB\", 0: \"Uncalibrated\"},\n\t\t\tMeteringMode: {\n\t\t\t\t0: \"Unknown\",\n\t\t\t\t1: \"Average\",\n\t\t\t\t2: \"CenterWeightedAverage\",\n\t\t\t\t3: \"Spot\",\n\t\t\t\t4: \"MultiSpot\",\n\t\t\t\t5: \"Pattern\",\n\t\t\t\t6: \"Partial\",\n\t\t\t\t255: \"Other\"\n\t\t\t},\n\t\t\tLightSource: {\n\t\t\t\t1: \"Daylight\",\n\t\t\t\t2: \"Fliorescent\",\n\t\t\t\t3: \"Tungsten\",\n\t\t\t\t4: \"Flash\",\n\t\t\t\t9: \"Fine weather\",\n\t\t\t\t10: \"Cloudy weather\",\n\t\t\t\t11: \"Shade\",\n\t\t\t\t12: \"Daylight fluorescent (D 5700 - 7100K)\",\n\t\t\t\t13: \"Day white fluorescent (N 4600 -5400K)\",\n\t\t\t\t14: \"Cool white fluorescent (W 3900 - 4500K)\",\n\t\t\t\t15: \"White fluorescent (WW 3200 - 3700K)\",\n\t\t\t\t17: \"Standard light A\",\n\t\t\t\t18: \"Standard light B\",\n\t\t\t\t19: \"Standard light C\",\n\t\t\t\t20: \"D55\",\n\t\t\t\t21: \"D65\",\n\t\t\t\t22: \"D75\",\n\t\t\t\t23: \"D50\",\n\t\t\t\t24: \"ISO studio tungsten\",\n\t\t\t\t255: \"Other\"\n\t\t\t},\n\t\t\tFlash: {\n\t\t\t\t0: \"Flash did not fire\",\n\t\t\t\t1: \"Flash fired\",\n\t\t\t\t5: \"Strobe return light not detected\",\n\t\t\t\t7: \"Strobe return light detected\",\n\t\t\t\t9: \"Flash fired, compulsory flash mode\",\n\t\t\t\t13: \"Flash fired, compulsory flash mode, return light not detected\",\n\t\t\t\t15: \"Flash fired, compulsory flash mode, return light detected\",\n\t\t\t\t16: \"Flash did not fire, compulsory flash mode\",\n\t\t\t\t24: \"Flash did not fire, auto mode\",\n\t\t\t\t25: \"Flash fired, auto mode\",\n\t\t\t\t29: \"Flash fired, auto mode, return light not detected\",\n\t\t\t\t31: \"Flash fired, auto mode, return light detected\",\n\t\t\t\t32: \"No flash function\",\n\t\t\t\t65: \"Flash fired, red-eye reduction mode\",\n\t\t\t\t69: \"Flash fired, red-eye reduction mode, return light not detected\",\n\t\t\t\t71: \"Flash fired, red-eye reduction mode, return light detected\",\n\t\t\t\t73: \"Flash fired, compulsory flash mode, red-eye reduction mode\",\n\t\t\t\t77: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",\n\t\t\t\t79: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",\n\t\t\t\t89: \"Flash fired, auto mode, red-eye reduction mode\",\n\t\t\t\t93: \"Flash fired, auto mode, return light not detected, red-eye reduction mode\",\n\t\t\t\t95: \"Flash fired, auto mode, return light detected, red-eye reduction mode\"\n\t\t\t},\n\t\t\tExposureMode: {0: \"Auto exposure\", 1: \"Manual exposure\", 2: \"Auto bracket\"},\n\t\t\tWhiteBalance: {0: \"Auto white balance\", 1: \"Manual white balance\"},\n\t\t\tSceneCaptureType: {0: \"Standard\", 1: \"Landscape\", 2: \"Portrait\", 3: \"Night scene\"},\n\t\t\tContrast: {0: \"Normal\", 1: \"Soft\", 2: \"Hard\"},\n\t\t\tSaturation: {0: \"Normal\", 1: \"Low saturation\", 2: \"High saturation\"},\n\t\t\tSharpness: {0: \"Normal\", 1: \"Soft\", 2: \"Hard\"},\n\t\t\tGPSLatitudeRef: {78: \"North latitude\", 83: \"South latitude\"},\n\t\t\tGPSLongitudeRef: {69: \"East longitude\", 87: \"West longitude\"}\n\t\t}, Ue = (e, t) => ve(e, t).bind((r => ve(e, t + 4).map((e => r / e)))),\n\t\tAe = (e, t) => Oe(e, t).bind((r => Oe(e, t + 4).map((e => r / e)))), Fe = (e, t, r, o) => {\n\t\t\tconst n = {\n\t\t\t\t1: {name: \"BYTE\", size: 1, read: be},\n\t\t\t\t7: {name: \"UNDEFINED\", size: 1, read: be},\n\t\t\t\t2: {name: \"ASCII\", size: 1, read: be},\n\t\t\t\t3: {name: \"SHORT\", size: 2, read: we},\n\t\t\t\t4: {name: \"LONG\", size: 4, read: ve},\n\t\t\t\t5: {name: \"RATIONAL\", size: 8, read: Ue},\n\t\t\t\t9: {name: \"SLONG\", size: 4, read: Oe},\n\t\t\t\t10: {name: \"SRATIONAL\", size: 8, read: Ae}\n\t\t\t}, a = e => t => S.some([e, t]), i = e => e.replace(/\\0$/, \"\").trim();\n\t\t\treturn we(e, t).fold((() => pe.value({})), (s => {\n\t\t\t\tconst l = {};\n\t\t\t\tfor (let d = 0; d < s; d++) {\n\t\t\t\t\tconst s = t + 2 + 12 * d, c = we(e, s + 0).bind((t => we(e, s + 2).bind((l => ve(e, s + 4).bind((d => {\n\t\t\t\t\t\tconst c = o[t];\n\t\t\t\t\t\tif (void 0 === c) return pe.value(S.none());\n\t\t\t\t\t\tconst u = n[l];\n\t\t\t\t\t\tif (void 0 === u) return pe.error(\"Tag with type number \" + l + \" was unrecognised.\");\n\t\t\t\t\t\tlet m = s + 8;\n\t\t\t\t\t\tif (u.size * d > 4) {\n\t\t\t\t\t\t\tconst t = ve(e, s + 8);\n\t\t\t\t\t\t\tif (t.isError()) return t.map((e => S.none()));\n\t\t\t\t\t\t\tm = t.getOrDie() + r\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn m + u.size * d >= e.length() ? pe.error(\"Invalid Exif data.\") : 1 === d && void 0 !== Me[c] ? u.read(e, m).map((e => Me[c][e])).map(a(c)) : \"ASCII\" === u.name ? Ee(e, m, d).map(i).map(a(c)) : 1 === d ? u.read(e, m).map(a(c)) : ye(e, m, u.size, d, u.read).map(a(c))\n\t\t\t\t\t}))))));\n\t\t\t\t\tif (c.isError()) return c.map((e => l));\n\t\t\t\t\tc.each((e => e.each((([e, t]) => {\n\t\t\t\t\t\tl[e] = t\n\t\t\t\t\t}))))\n\t\t\t\t}\n\t\t\t\treturn pe.value(l)\n\t\t\t}))\n\t\t}, Te = e => ({\n\t\t\tOrientation: S.from(e.Orientation).filter(h).getOrUndefined(),\n\t\t\tImageDescription: S.from(e.ImageDescription).filter(a).getOrUndefined(),\n\t\t\tMake: S.from(e.Make).filter(a).getOrUndefined(),\n\t\t\tModel: S.from(e.Model).filter(a).getOrUndefined(),\n\t\t\tSoftware: S.from(e.Software).filter(a).getOrUndefined(),\n\t\t\tExifIFDPointer: S.from(e.ExifIFDPointer).filter(h),\n\t\t\tGPSInfoIFDPointer: S.from(e.GPSInfoIFDPointer).filter(h)\n\t\t}), Le = e => ({\n\t\t\tExifVersion: (() => {\n\t\t\t\tconst t = e.ExifVersion;\n\t\t\t\treturn a(t) ? t : l(t) ? D(t, (e => h(e) ? String.fromCharCode(e) : \"\")).join(\"\") : void 0\n\t\t\t})(),\n\t\t\tColorSpace: S.from(e.ColorSpace).filter(a).getOrUndefined(),\n\t\t\tPixelXDimension: S.from(e.PixelXDimension).filter(h).getOrUndefined(),\n\t\t\tPixelYDimension: S.from(e.PixelYDimension).filter(h).getOrUndefined(),\n\t\t\tDateTimeOriginal: S.from(e.DateTimeOriginal).filter(a).getOrUndefined(),\n\t\t\tExposureTime: S.from(e.ExposureTime).filter(h).getOrUndefined(),\n\t\t\tFNumber: S.from(e.FNumber).filter(h).getOrUndefined(),\n\t\t\tISOSpeedRatings: S.from(e.ISOSpeedRatings).filter(h).getOrUndefined(),\n\t\t\tShutterSpeedValue: S.from(e.ShutterSpeedValue).filter(h).getOrUndefined(),\n\t\t\tApertureValue: S.from(e.ApertureValue).filter(h).getOrUndefined(),\n\t\t\tMeteringMode: S.from(e.MeteringMode).filter(a).getOrUndefined(),\n\t\t\tLightSource: S.from(e.LightSource).filter(a).getOrUndefined(),\n\t\t\tFlash: S.from(e.Flash).filter(a).getOrUndefined(),\n\t\t\tFocalLength: S.from(e.FocalLength).filter(h).getOrUndefined(),\n\t\t\tExposureMode: S.from(e.ExposureMode).filter(a).getOrUndefined(),\n\t\t\tWhiteBalance: S.from(e.WhiteBalance).filter(a).getOrUndefined(),\n\t\t\tSceneCaptureType: S.from(e.SceneCaptureType).filter(a).getOrUndefined(),\n\t\t\tDigitalZoomRatio: S.from(e.DigitalZoomRatio).filter(h).getOrUndefined(),\n\t\t\tContrast: S.from(e.Contrast).filter(a).getOrUndefined(),\n\t\t\tSaturation: S.from(e.Saturation).filter(a).getOrUndefined(),\n\t\t\tSharpness: S.from(e.Sharpness).filter(a).getOrUndefined()\n\t\t}), ke = e => ({\n\t\t\tGPSVersionID: (() => {\n\t\t\t\tconst t = e.GPSVersionID;\n\t\t\t\treturn a(t) ? t : l(t) ? D(t, (e => h(e) ? \"\" + e : a(e) ? e : \"\")).join(\".\") : void 0\n\t\t\t})(),\n\t\t\tGPSLatitudeRef: S.from(e.GPSLatitudeRef).filter(a).getOrUndefined(),\n\t\t\tGPSLatitude: S.from(e.GPSLatitude).filter(h).getOrUndefined(),\n\t\t\tGPSLongitudeRef: S.from(e.GPSLongitudeRef).filter(a).getOrUndefined(),\n\t\t\tGPSLongitude: S.from(e.GPSLongitude).filter(h).getOrUndefined()\n\t\t}), _e = e => {\n\t\t\tconst t = e.JPEGInterchangeFormat;\n\t\t\tif (void 0 === t) return pe.error(\"\");\n\t\t\tif (!h(t)) return pe.error(\"\");\n\t\t\tconst r = e.JPEGInterchangeFormatLength;\n\t\t\treturn void 0 === r ? pe.error(\"\") : h(r) ? pe.value({\n\t\t\t\tJPEGInterchangeFormat: t,\n\t\t\t\tJPEGInterchangeFormatLength: r\n\t\t\t}) : pe.error(\"\")\n\t\t}, Ne = e => (e => new Promise((t => {\n\t\t\tconst r = new FileReader;\n\t\t\tr.onloadend = () => {\n\t\t\t\tt(r.result)\n\t\t\t}, r.readAsArrayBuffer(e)\n\t\t})))(e).then((t => {\n\t\t\ttry {\n\t\t\t\tconst e = new fe(t);\n\t\t\t\tif (me(we(e, 0), 65496)) {\n\t\t\t\t\tconst t = ze(e), r = t.filter((e => \"APP1\" === e.name)), o = {rawHeaders: t};\n\t\t\t\t\tif (!r.length) return Promise.reject(\"Headers did not include required information\");\n\t\t\t\t\t{\n\t\t\t\t\t\tconst e = (e => {\n\t\t\t\t\t\t\tconst t = new fe(e), r = 10,\n\t\t\t\t\t\t\t\to = me(we(t, 0), 65505) && me(Ee(t, 4, 5).map((e => e.toUpperCase())), \"EXIF\\0\") ? (t.littleEndian = me(we(t, r), 18761), me(we(t, 12), 42) ? ve(t, 14).map((e => r + e)) : pe.error(\"Invalid Exif data.\")) : pe.error(\"APP1 marker and EXIF marker cannot be read or not available.\"),\n\t\t\t\t\t\t\t\tn = o.bind((e => Fe(t, e, r, Pe).map(Te))),\n\t\t\t\t\t\t\t\ta = n.bind((e => e.ExifIFDPointer.fold((() => pe.value(S.none())), (e => Fe(t, r + e, r, Re).map(Le).map(S.some))))),\n\t\t\t\t\t\t\t\ti = n.bind((e => e.GPSInfoIFDPointer.fold((() => pe.value(S.none())), (e => Fe(t, r + e, r, Ce).map(ke).map(S.some)))));\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttiff: n,\n\t\t\t\t\t\t\t\texif: a,\n\t\t\t\t\t\t\t\tgps: i,\n\t\t\t\t\t\t\t\tthumb: o.bind((e => we(t, e).map((t => e + 2 + 12 * t)))).bind((e => ve(t, e).map((e => e + r)))).bind((e => Fe(t, e, r, De).bind(_e).map((e => t.segment(r + e.JPEGInterchangeFormat, e.JPEGInterchangeFormatLength))).map(S.some)))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})(r[0].segment);\n\t\t\t\t\t\to.tiff = e.tiff.getOrDie(), o.exif = ue(e.exif.toOptional()).getOrNull(), o.gps = ue(e.gps.toOptional()).getOrNull(), o.thumb = ue(e.thumb.toOptional()).getOrNull()\n\t\t\t\t\t}\n\t\t\t\t\treturn o\n\t\t\t\t}\n\t\t\t\treturn Promise.reject(\"Image was not a jpeg\")\n\t\t\t} catch (t) {\n\t\t\t\treturn Promise.reject(`Unsupported format or not an image: ${e.type} (Exception: ${t.message})`)\n\t\t\t}\n\t\t})), ze = e => {\n\t\t\tconst t = [];\n\t\t\tlet r = 2;\n\t\t\tfor (; r + 2 <= e.length();) {\n\t\t\t\tconst o = we(e, r).toOptional().getOrNull();\n\t\t\t\tif (null === o) throw new Error(\"Invalid Exif data.\");\n\t\t\t\tif (o >= 65488 && o <= 65495) {\n\t\t\t\t\tr += 2;\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (65498 === o || 65497 === o) break;\n\t\t\t\tconst n = we(e, r + 2).toOptional().getOrNull();\n\t\t\t\tif (null === n) throw new Error(\"Invalid Exif data.\");\n\t\t\t\tconst a = n + 2;\n\t\t\t\to >= 65505 && o <= 65519 && t.push({\n\t\t\t\t\thex: o,\n\t\t\t\t\tname: \"APP\" + (15 & o),\n\t\t\t\t\tstart: r,\n\t\t\t\t\tlength: a,\n\t\t\t\t\tsegment: e.segment(r, a)\n\t\t\t\t}), r += a\n\t\t\t}\n\t\t\treturn t\n\t\t}, Be = (e, t, r) => {\n\t\t\tconst o = t.type, n = p(o), a = p(r),\n\t\t\t\ti = (t, r) => e.then((e => ((e, t, r) => (t = t || \"image/png\", e.toDataURL(t, r)))(e, t, r)));\n\t\t\treturn {\n\t\t\t\tgetType: n,\n\t\t\t\ttoBlob: () => Promise.resolve(t),\n\t\t\t\ttoDataURL: a,\n\t\t\t\ttoBase64: () => r.split(\",\")[1],\n\t\t\t\ttoAdjustedBlob: (t, r) => e.then((e => de(e, t, r))),\n\t\t\t\ttoAdjustedDataURL: i,\n\t\t\t\ttoAdjustedBase64: (e, t) => i(e, t).then((e => e.split(\",\")[1])),\n\t\t\t\ttoCanvas: () => e.then(te)\n\t\t\t}\n\t\t}, Ge = e => (e => new Promise((t => {\n\t\t\tconst r = new FileReader;\n\t\t\tr.onloadend = () => {\n\t\t\t\tt(r.result)\n\t\t\t}, r.readAsDataURL(e)\n\t\t})))(e).then((t => Be((e => ie(e).then((e => {\n\t\t\t(e => {\n\t\t\t\tURL.revokeObjectURL(e.src)\n\t\t\t})(e);\n\t\t\tconst t = ee(ne(e), ae(e));\n\t\t\treturn re(t).drawImage(e, 0, 0), t\n\t\t})))(e), e, t))), He = (e, t) => de(e, t).then((t => Be(Promise.resolve(e), t, e.toDataURL()))), je = (e, t, r) => {\n\t\t\tlet o = \"string\" == typeof e ? parseFloat(e) : e;\n\t\t\treturn o > r ? o = r : o < t && (o = t), o\n\t\t},\n\t\tWe = [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],\n\t\tVe = (e, t) => {\n\t\t\tconst r = [], o = new Array(25);\n\t\t\tlet n;\n\t\t\tfor (let a = 0; a < 5; a++) {\n\t\t\t\tfor (let e = 0; e < 5; e++) r[e] = t[e + 5 * a];\n\t\t\t\tfor (let t = 0; t < 5; t++) {\n\t\t\t\t\tn = 0;\n\t\t\t\t\tfor (let o = 0; o < 5; o++) n += e[t + 5 * o] * r[o];\n\t\t\t\t\to[t + 5 * a] = n\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn o\n\t\t}, Xe = (e, t) => (t = je(t, 0, 1), e.map(((e, r) => (r % 6 == 0 ? e = 1 - (1 - e) * t : e *= t, je(e, 0, 1))))),\n\t\tYe = (e, t) => e.toCanvas().then((r => qe(r, e.getType(), t))), qe = (e, t, r) => {\n\t\t\tconst o = re(e), n = ((e, t) => {\n\t\t\t\tlet r, o, n, a;\n\t\t\t\tconst i = e.data, s = t[0], l = t[1], d = t[2], c = t[3], u = t[4], m = t[5], h = t[6], g = t[7], p = t[8],\n\t\t\t\t\tf = t[9], y = t[10], b = t[11], w = t[12], v = t[13], x = t[14], S = t[15], O = t[16], I = t[17], E = t[18],\n\t\t\t\t\tP = t[19];\n\t\t\t\tfor (let e = 0; e < i.length; e += 4) r = i[e], o = i[e + 1], n = i[e + 2], a = i[e + 3], i[e] = r * s + o * l + n * d + a * c + u, i[e + 1] = r * m + o * h + n * g + a * p + f, i[e + 2] = r * y + o * b + n * w + a * v + x, i[e + 3] = r * S + o * O + n * I + a * E + P;\n\t\t\t\treturn e\n\t\t\t})(o.getImageData(0, 0, e.width, e.height), r);\n\t\t\treturn o.putImageData(n, 0, 0), He(e, t)\n\t\t}, Je = e => (t, r) => t.toCanvas().then((o => ((t, r, o) => {\n\t\t\tconst n = re(t), a = new Array(256);\n\t\t\tfor (let t = 0; t < a.length; t++) a[t] = e(t, o);\n\t\t\tconst i = ((e, t) => {\n\t\t\t\tconst r = e.data;\n\t\t\t\tfor (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]];\n\t\t\t\treturn e\n\t\t\t})(n.getImageData(0, 0, t.width, t.height), a);\n\t\t\treturn n.putImageData(i, 0, 0), He(t, r)\n\t\t})(o, t.getType(), r))),\n\t\tKe = e => (t, r) => Ye(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)),\n\t\tZe = e => t => ((e, t) => e.toCanvas().then((r => ((e, t, r) => {\n\t\t\tconst o = re(e), n = o.getImageData(0, 0, e.width, e.height);\n\t\t\tlet a = o.getImageData(0, 0, e.width, e.height);\n\t\t\treturn a = ((e, t, r) => {\n\t\t\t\tconst o = (e, t, r) => (e > r ? e = r : e < t && (e = t), e), n = Math.round(Math.sqrt(r.length)),\n\t\t\t\t\ta = Math.floor(n / 2), i = e.data, s = t.data, l = e.width, d = e.height;\n\t\t\t\tfor (let e = 0; e < d; e++) for (let t = 0; t < l; t++) {\n\t\t\t\t\tlet c = 0, u = 0, m = 0;\n\t\t\t\t\tfor (let s = 0; s < n; s++) for (let h = 0; h < n; h++) {\n\t\t\t\t\t\tconst g = o(t + h - a, 0, l - 1), p = 4 * (o(e + s - a, 0, d - 1) * l + g), f = r[s * n + h];\n\t\t\t\t\t\tc += i[p] * f, u += i[p + 1] * f, m += i[p + 2] * f\n\t\t\t\t\t}\n\t\t\t\t\tconst h = 4 * (e * l + t);\n\t\t\t\t\ts[h] = o(c, 0, 255), s[h + 1] = o(u, 0, 255), s[h + 2] = o(m, 0, 255)\n\t\t\t\t}\n\t\t\t\treturn t\n\t\t\t})(n, a, r), o.putImageData(a, 0, 0), He(e, t)\n\t\t})(r, e.getType(), t))))(t, e),\n\t\t$e = (Qe = [-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 => Ye(e, Qe));\n\tvar Qe;\n\tconst et = Ke(((e, t) => (t = je(255 * t, -255, 255), Ve(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])))),\n\t\ttt = Ke(((e, t) => {\n\t\t\tt = je(t, -180, 180) / 180 * Math.PI;\n\t\t\tconst r = Math.cos(t), o = Math.sin(t), n = .213, a = .715, i = .072;\n\t\t\treturn Ve(e, [n + .787 * r + o * -n, a + r * -a + o * -a, i + r * -i + .928 * o, 0, 0, n + r * -n + .143 * o, a + r * (1 - a) + .14 * o, i + r * -i + -.283 * o, 0, 0, n + r * -n + -.787 * o, a + r * -a + o * a, i + .928 * r + o * i, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])\n\t\t})), rt = Ke(((e, t) => {\n\t\t\tconst r = 1 + ((t = je(t, -1, 1)) > 0 ? 3 * t : t), o = .3086, n = .6094, a = .082;\n\t\t\treturn Ve(e, [o * (1 - r) + r, n * (1 - r), a * (1 - r), 0, 0, o * (1 - r), n * (1 - r) + r, a * (1 - r), 0, 0, o * (1 - r), n * (1 - r), a * (1 - r) + r, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])\n\t\t})), ot = Ke(((e, t) => {\n\t\t\tlet r;\n\t\t\treturn t = je(t, -1, 1), (t *= 100) < 0 ? r = 127 + t / 100 * 127 : (r = t % 1, r = 0 === r ? We[t] : We[Math.floor(t)] * (1 - r) + We[Math.floor(t) + 1] * r, r = 127 * r + 127), Ve(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])\n\t\t})),\n\t\tnt = Ke(((e, t) => (t = je(t, 0, 1), Ve(e, Xe([.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))))),\n\t\tat = Ke(((e, t) => (t = je(t, 0, 1), Ve(e, Xe([.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))))),\n\t\tit = Ze([0, -1, 0, -1, 5, -1, 0, -1, 0]), st = Ze([-2, -1, 0, -1, 1, 1, 0, 1, 2]),\n\t\tlt = Je(((e, t) => 255 * Math.pow(e / 255, 1 - t))), dt = Je(((e, t) => 255 * (1 - Math.exp(-e / 255 * t)))),\n\t\tct = (e, t, r) => {\n\t\t\tconst o = ne(e), n = ae(e);\n\t\t\tlet a = t / o, i = r / n, s = !1;\n\t\t\t(a < .5 || a > 2) && (a = a < .5 ? .5 : 2, s = !0), (i < .5 || i > 2) && (i = i < .5 ? .5 : 2, s = !0);\n\t\t\tconst l = ut(e, a, i);\n\t\t\treturn s ? l.then((e => ct(e, t, r))) : l\n\t\t}, ut = (e, t, r) => new Promise((o => {\n\t\t\tconst n = ne(e), a = ae(e), i = Math.floor(n * t), s = Math.floor(a * r), l = ee(i, s);\n\t\t\tre(l).drawImage(e, 0, 0, n, a, 0, 0, i, s), o(l)\n\t\t})), mt = (e, t = 2) => {\n\t\t\tconst r = Math.pow(10, t), o = Math.round(e * r);\n\t\t\treturn Math.ceil(o / r)\n\t\t},\n\t\tht = (e, t, r, o) => ((e, t, r, o) => Ye(e, ((e, t, r, o) => (t = je(t, 0, 2), r = je(r, 0, 2), o = je(o, 0, 2), Ve([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, o, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])))(0, t, r, o)))(e, t, r, o),\n\t\tgt = (e, t) => ((e, t) => e.toCanvas().then((r => ((e, t, r) => {\n\t\t\tconst o = ee(e.width, e.height), n = re(o);\n\t\t\treturn \"v\" === r ? (n.scale(1, -1), n.drawImage(e, 0, -o.height)) : (n.scale(-1, 1), n.drawImage(e, -o.width, 0)), He(o, t)\n\t\t})(r, e.getType(), t))))(e, t),\n\t\tpt = (e, t, r, o, n) => ((e, t, r, o, n) => e.toCanvas().then((a => ((e, t, r, o, n, a) => {\n\t\t\tconst i = ee(n, a);\n\t\t\treturn re(i).drawImage(e, -r, -o), He(i, t)\n\t\t})(a, e.getType(), t, r, o, n))))(e, t, r, o, n),\n\t\tft = (e, t, r) => ((e, t, r) => e.toCanvas().then((o => ct(o, t, r).then((t => He(t, e.getType()))))))(e, t, r),\n\t\tyt = (e, t) => ((e, t) => e.toCanvas().then((r => ((e, t, r) => {\n\t\t\tconst o = (r < 0 ? 360 + r : r) * Math.PI / 180, n = e.width, a = e.height, i = Math.sin(o), s = Math.cos(o),\n\t\t\t\tl = mt(Math.abs(n * s) + Math.abs(a * i)), d = mt(Math.abs(n * i) + Math.abs(a * s)), c = ee(l, d), u = re(c);\n\t\t\treturn u.translate(l / 2, d / 2), u.rotate(o), u.drawImage(e, -n / 2, -a / 2), He(c, t)\n\t\t})(r, e.getType(), t))))(e, t);\n\tvar bt = Object.freeze({\n\t\t__proto__: null,\n\t\tinvert: e => $e(e),\n\t\tsharpen: e => it(e),\n\t\temboss: e => st(e),\n\t\tbrightness: (e, t) => et(e, t),\n\t\thue: (e, t) => tt(e, t),\n\t\tsaturate: (e, t) => rt(e, t),\n\t\tcontrast: (e, t) => ot(e, t),\n\t\tgrayscale: (e, t) => nt(e, t),\n\t\tsepia: (e, t) => at(e, t),\n\t\tcolorize: ht,\n\t\tgamma: (e, t) => lt(e, t),\n\t\texposure: (e, t) => dt(e, t),\n\t\tflip: gt,\n\t\tcrop: pt,\n\t\tresize: ft,\n\t\trotate: yt,\n\t\texifRotate: e => e.toBlob().then(Ne).then((t => {\n\t\t\tswitch (t.tiff.Orientation) {\n\t\t\t\tcase 6:\n\t\t\t\t\treturn yt(e, 90);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn yt(e, 180);\n\t\t\t\tcase 8:\n\t\t\t\t\treturn yt(e, 270);\n\t\t\t\tdefault:\n\t\t\t\t\treturn e\n\t\t\t}\n\t\t}), (() => e))\n\t});\n\tconst wt = (e, t, r = !1) => new Promise((o => {\n\t\t\tconst n = new XMLHttpRequest;\n\t\t\tn.onreadystatechange = () => {\n\t\t\t\t4 === n.readyState && o({status: n.status, blob: n.response})\n\t\t\t}, n.open(\"GET\", e, !0), n.withCredentials = r, E(t, ((e, t) => {\n\t\t\t\tn.setRequestHeader(t, e)\n\t\t\t})), n.responseType = \"blob\", n.send()\n\t\t})), vt = [{code: 404, message: \"Could not find Image Proxy\"}, {code: 403, message: \"Rejected request\"}, {\n\t\t\tcode: 0,\n\t\t\tmessage: \"Incorrect Image Proxy URL\"\n\t\t}], xt = [{type: \"not_found\", message: \"Failed to load image.\"}, {\n\t\t\ttype: \"key_missing\",\n\t\t\tmessage: \"The request did not include an api key.\"\n\t\t}, {type: \"key_not_found\", message: \"The provided api key could not be found.\"}, {\n\t\t\ttype: \"domain_not_trusted\",\n\t\t\tmessage: \"The api key is not valid for the request origins.\"\n\t\t}], St = e => {\n\t\t\tconst t = (e => {\n\t\t\t\tconst t = A(vt, (t => e === t.code)).fold(p(\"Unknown ImageProxy error\"), (e => e.message));\n\t\t\t\treturn \"ImageProxy HTTP error: \" + t\n\t\t\t})(e);\n\t\t\treturn Promise.reject(t)\n\t\t}, Ot = e => A(xt, (t => t.type === e)).fold(p(\"Unknown service error\"), (e => e.message)),\n\t\tIt = e => (e => new Promise(((t, r) => {\n\t\t\tconst o = new FileReader;\n\t\t\to.onload = () => {\n\t\t\t\tt(o.result)\n\t\t\t}, o.onerror = e => {\n\t\t\t\tr(e)\n\t\t\t}, o.readAsText(e)\n\t\t})))(e).then((e => {\n\t\t\tconst t = (e => {\n\t\t\t\tconst t = (e => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn S.some(JSON.parse(e))\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn S.none()\n\t\t\t\t\t}\n\t\t\t\t})(e), r = t.bind((e => ((e, t) => {\n\t\t\t\t\tconst r = U([\"error\", \"type\"], ((e, t) => u(e) ? e[t] : void 0), e);\n\t\t\t\t\treturn S.from(r)\n\t\t\t\t})(e).map(Ot))).getOr(\"Invalid JSON in service error message\");\n\t\t\t\treturn \"ImageProxy Service error: \" + r\n\t\t\t})(e);\n\t\t\treturn Promise.reject(t)\n\t\t})), Et = e => e < 200 || e >= 300, Pt = (e, t, r = !1) => t ? ((e, t) => {\n\t\t\tconst r = {\"Content-Type\": \"application/json;charset=UTF-8\", \"tiny-api-key\": t};\n\t\t\treturn wt(((e, t) => {\n\t\t\t\tconst r = -1 === e.indexOf(\"?\") ? \"?\" : \"&\";\n\t\t\t\treturn /[?&]apiKey=/.test(e) ? e : e + r + \"apiKey=\" + encodeURIComponent(t)\n\t\t\t})(e, t), r).then((e => {\n\t\t\t\treturn Et(e.status) ? ((e, t) => \"application/json\" === (null == t ? void 0 : t.type) && (400 === e || 403 === e || 404 === e || 500 === e))(t = e.status, r = e.blob) ? It(r) : St(t) : Promise.resolve(e.blob);\n\t\t\t\tvar t, r\n\t\t\t}))\n\t\t})(e, t) : ((e, t) => wt(e, {}, t).then((e => Et(e.status) ? St(e.status) : Promise.resolve(e.blob))))(e, r),\n\t\tRt = e => Ge(e), Ct = e => t => t.options.get(e), Dt = Ct(\"editimage_toolbar\"), Mt = Ct(\"editimage_cors_hosts\"),\n\t\tUt = Ct(\"editimage_credentials_hosts\"), At = Ct(\"editimage_fetch_image\"), Ft = Ct(\"editimage_upload_timeout\"),\n\t\tTt = Ct(\"images_reuse_filename\"), Lt = e => {\n\t\t\tconst t = e.options.get(\"editimage_proxy_service_url\");\n\t\t\treturn a(t) ? t + \"/2/image\" : e.options.get(\"editimage_proxy\")\n\t\t}, kt = e => {\n\t\t\tlet t, r;\n\t\t\tconst o = e => /^[0-9\\.]+px$/.test(e);\n\t\t\treturn t = e.style.width, r = e.style.height, t || r ? o(t) && o(r) ? {\n\t\t\t\tw: parseInt(t, 10),\n\t\t\t\th: parseInt(r, 10)\n\t\t\t} : null : (t = e.width, r = e.height, t && r ? {w: t, h: r} : null)\n\t\t}, _t = e => ({w: e.naturalWidth, h: e.naturalHeight});\n\tlet Nt = 0;\n\tconst zt = e => Y(e, \"img\"), Bt = (e, t) => e.dom.is(t, \"figure\"),\n\t\tGt = (e, t) => e.dom.is(t, \"img:not([data-mce-object]):not([data-mce-placeholder])\"), Ht = (e, t) => {\n\t\t\tconst r = t => (t => Gt(e, t.dom) && (Xt(e, t.dom) || Yt(e, t.dom) || u(Lt(e))))(t) ? S.some(t) : S.none();\n\t\t\treturn Bt(e, t.dom) ? zt(t).bind(r) : r(t)\n\t\t}, jt = (e, t) => {\n\t\t\te.notificationManager.open({text: t, type: \"error\"})\n\t\t}, Wt = e => {\n\t\t\tconst t = e.selection.getNode(), r = e.dom.getParent(t, \"figure.image\");\n\t\t\treturn null !== r && Bt(e, r) ? zt(L(r)) : Gt(e, t) ? S.some(L(t)) : S.none()\n\t\t}, Vt = (e, t, r) => {\n\t\t\tconst o = /(?:\\/|^)(([^\\/\\?]+)\\.(?:[a-z0-9.]+))(?:\\?|$)/i.exec(t);\n\t\t\treturn u(o) ? e.dom.encode(o[r]) : void 0\n\t\t}, Xt = (e, t) => {\n\t\t\tconst r = t.src;\n\t\t\treturn 0 === r.indexOf(\"data:\") || 0 === r.indexOf(\"blob:\") || new tinymce.util.URI(r).host === e.documentBaseURI.host\n\t\t}, Yt = (e, t) => C(Mt(e), new tinymce.util.URI(t.src).host), qt = (e, t) => {\n\t\t\tvar r;\n\t\t\tif (Yt(e, t)) return Pt(t.src, void 0, ((e, t) => C(Ut(e), new tinymce.util.URI(t.src).host))(e, t));\n\t\t\tif (!Xt(e, t)) {\n\t\t\t\tconst o = null !== (r = Lt(e)) && void 0 !== r ? r : \"\",\n\t\t\t\t\tn = o + (-1 === o.indexOf(\"?\") ? \"?\" : \"&\") + \"url=\" + encodeURIComponent(t.src), a = (e => {\n\t\t\t\t\t\tvar t;\n\t\t\t\t\t\treturn null !== (t = e.options.get(\"api_key\")) && void 0 !== t ? t : e.options.get(\"editimage_api_key\")\n\t\t\t\t\t})(e);\n\t\t\t\treturn Pt(n, a, !1)\n\t\t\t}\n\t\t\treturn (e => (e => {\n\t\t\t\tconst t = e.src;\n\t\t\t\treturn 0 === t.indexOf(\"data:\") ? le(t) : se(t)\n\t\t\t})(e))(t)\n\t\t}, Jt = (e, t) => {\n\t\t\tconst r = e.editorUpload.blobCache.getByUri(t.src);\n\t\t\treturn r ? Promise.resolve(r.blob()) : ((e, t) => S.from(At(e)).fold((() => qt(e, t)), (e => e(t))))(e, t)\n\t\t}, Kt = e => {\n\t\t\tclearTimeout(e.get())\n\t\t}, Zt = (e, t, r, o, n, a, i) => r.toBlob().then((s => {\n\t\t\tlet l, d, c;\n\t\t\tconst m = e.editorUpload.blobCache;\n\t\t\tl = a.src;\n\t\t\tconst h = t.type === s.type;\n\t\t\tif (Tt(e)) {\n\t\t\t\tconst t = m.getByUri(l);\n\t\t\t\tu(t) ? (l = t.uri(), d = t.name(), c = t.filename()) : (d = Vt(e, l, 2), c = Vt(e, l, 1))\n\t\t\t}\n\t\t\tconst g = m.create({\n\t\t\t\tid: \"editimage\" + Nt++,\n\t\t\t\tblob: s,\n\t\t\t\tbase64: r.toBase64(),\n\t\t\t\turi: l,\n\t\t\t\tname: d,\n\t\t\t\tfilename: h ? c : void 0\n\t\t\t});\n\t\t\treturn m.add(g), e.undoManager.transact((() => {\n\t\t\t\tconst t = () => {\n\t\t\t\t\te.dom.unbind(a, \"load\", t), e.nodeChanged(), o ? e.editorUpload.uploadImagesAuto() : (Kt(n), ((e, t) => {\n\t\t\t\t\t\tconst r = tinymce.util.Delay.setEditorTimeout(e, (() => {\n\t\t\t\t\t\t\te.editorUpload.uploadImagesAuto()\n\t\t\t\t\t\t}), Ft(e));\n\t\t\t\t\t\tt.set(r)\n\t\t\t\t\t})(e, n))\n\t\t\t\t};\n\t\t\t\te.dom.bind(a, \"load\", t), i && e.dom.setAttribs(a, {\n\t\t\t\t\twidth: i.w,\n\t\t\t\t\theight: i.h\n\t\t\t\t}), e.dom.setAttribs(a, {src: g.blobUri()}), a.removeAttribute(\"data-mce-src\")\n\t\t\t})), g\n\t\t})), $t = (e, t, r, o) => () => Wt(e).fold((() => {\n\t\t\tjt(e, \"Could not find selected image\")\n\t\t}), (n => e._scanForImages().then((() => Jt(e, n.dom))).then((a => Rt(a).then(r).then((r => Zt(e, a, r, !1, t, n.dom, o))))).catch((t => {\n\t\t\tjt(e, t)\n\t\t})))), Qt = (e, t, r) => () => {\n\t\t\tconst o = Wt(e).map((e => {\n\t\t\t\tconst t = kt(e.dom);\n\t\t\t\treturn t ? {w: t.h, h: t.w} : null\n\t\t\t})).getOrNull();\n\t\t\treturn $t(e, t, (e => yt(e, r)), o)()\n\t\t}, er = (e, t, r) => () => $t(e, t, (e => gt(e, r)))(), tr = (rr = (e, t) => s(e) && s(t) ? tr(e, t) : t, (...e) => {\n\t\t\tif (0 === e.length) throw new Error(\"Can't merge zero objects\");\n\t\t\tconst t = {};\n\t\t\tfor (let r = 0; r < e.length; r++) {\n\t\t\t\tconst o = e[r];\n\t\t\t\tfor (const e in o) P(o, e) && (t[e] = rr(t[e], o[e]))\n\t\t\t}\n\t\t\treturn t\n\t\t});\n\tvar rr;\n\tconst or = {type: \"panel\", classes: [\"tox-spacer\"], items: []},\n\t\tnr = (e, t, r = !1) => ({type: \"button\", name: e, text: t, primary: r}),\n\t\tar = (e, t, r, o = !1) => ({type: \"button\", name: e, icon: t, text: r, buttonType: \"toolbar\", enabled: !o}),\n\t\tir = \"undo-btn\", sr = \"redo-btn\", lr = \"zoom-in-btn\", dr = \"zoom-out-btn\", cr = \"crop-btn\", ur = \"resize-btn\",\n\t\tmr = \"orientation-btn\", hr = \"brightness-btn\", gr = \"sharpen-btn\", pr = \"contrast-btn\", fr = \"color-levels-btn\",\n\t\tyr = \"gamma-btn\", br = \"invert-btn\", wr = \"flip-horizontally-btn\", vr = \"flip-vertically-btn\",\n\t\txr = \"rotate-left-btn\", Sr = \"rotate-right-btn\", Or = t => {\n\t\t\tconst r = e(S.none()), o = () => r.get().each(t);\n\t\t\treturn {\n\t\t\t\tclear: () => {\n\t\t\t\t\to(), r.set(S.none())\n\t\t\t\t}, isSet: () => r.get().isSome(), get: () => r.get(), set: e => {\n\t\t\t\t\to(), r.set(S.some(e))\n\t\t\t\t}\n\t\t\t}\n\t\t}, Ir = () => {\n\t\t\tconst e = Or(g);\n\t\t\treturn {...e, on: t => e.get().each(t)}\n\t\t}, Er = e => void 0 !== e.style && m(e.style.getPropertyValue), Pr = (e, t, r) => {\n\t\t\tif (!(a(r) || d(r) || h(r))) throw console.error(\"Invalid call to Attribute.set. Key \", t, \":: Value \", r, \":: Element \", e), new Error(\"Attribute value was not simple\");\n\t\t\te.setAttribute(t, r + \"\")\n\t\t}, Rr = (e, t, r) => {\n\t\t\tPr(e.dom, t, r)\n\t\t}, Cr = (e, t) => {\n\t\t\tconst r = e.dom;\n\t\t\tE(t, ((e, t) => {\n\t\t\t\tPr(r, t, e)\n\t\t\t}))\n\t\t}, Dr = (e, t) => {\n\t\t\tconst r = e.dom.getAttribute(t);\n\t\t\treturn null === r ? void 0 : r\n\t\t}, Mr = (e, t) => {\n\t\t\tconst r = e.dom;\n\t\t\tE(t, ((e, t) => {\n\t\t\t\t((e, t, r) => {\n\t\t\t\t\tif (!a(r)) throw console.error(\"Invalid call to CSS.set. Property \", t, \":: Value \", r, \":: Element \", e), new Error(\"CSS value must be a string: \" + r);\n\t\t\t\t\tEr(e) && e.style.setProperty(t, r)\n\t\t\t\t})(r, t, e)\n\t\t\t}))\n\t\t}, Ur = (e, t) => {\n\t\t\tconst r = e.dom, o = window.getComputedStyle(r).getPropertyValue(t);\n\t\t\treturn \"\" !== o || X(e) ? o : Ar(r, t)\n\t\t}, Ar = (e, t) => Er(e) ? e.style.getPropertyValue(t) : \"\", Fr = (e, t) => {\n\t\t\tconst r = r => {\n\t\t\t\tconst o = t(r);\n\t\t\t\tif (o <= 0 || null === o) {\n\t\t\t\t\tconst t = Ur(r, e);\n\t\t\t\t\treturn parseFloat(t) || 0\n\t\t\t\t}\n\t\t\t\treturn o\n\t\t\t}, o = (e, t) => U(t, ((t, r) => {\n\t\t\t\tconst o = Ur(e, r), n = void 0 === o ? 0 : parseInt(o, 10);\n\t\t\t\treturn isNaN(n) ? t : t + n\n\t\t\t}), 0);\n\t\t\treturn {\n\t\t\t\tset: (t, r) => {\n\t\t\t\t\tif (!h(r) && !r.match(/^[0-9]+$/)) throw new Error(e + \".set accepts only positive integer values. Value was \" + r);\n\t\t\t\t\tconst o = t.dom;\n\t\t\t\t\tEr(o) && (o.style[e] = r + \"px\")\n\t\t\t\t}, get: r, getOuter: r, aggregate: o, max: (e, t, r) => {\n\t\t\t\t\tconst n = o(e, r);\n\t\t\t\t\treturn t > n ? t - n : 0\n\t\t\t\t}\n\t\t\t}\n\t\t}, Tr = Fr(\"height\", (e => {\n\t\t\tconst t = e.dom;\n\t\t\treturn X(e) ? t.getBoundingClientRect().height : t.offsetHeight\n\t\t})), Lr = e => Tr.get(e), kr = Fr(\"width\", (e => e.dom.offsetWidth)), _r = e => kr.get(e),\n\t\tNr = (e, t) => Rt(e).then(t).then((e => e.toBlob())), zr = (e, t) => {\n\t\t\t(e => void 0 !== e.dom.classList)(e) ? e.dom.classList.add(t) : ((e, t) => {\n\t\t\t\t((e, t, r) => {\n\t\t\t\t\tconst o = ((e, t) => {\n\t\t\t\t\t\tconst r = Dr(e, t);\n\t\t\t\t\t\treturn void 0 === r || \"\" === r ? [] : r.split(\" \")\n\t\t\t\t\t})(e, t), n = o.concat([r]);\n\t\t\t\t\tRr(e, t, n.join(\" \"))\n\t\t\t\t})(e, \"class\", t)\n\t\t\t})(e, t)\n\t\t}, Br = (e, t) => {\n\t\t\te.dom.appendChild(t.dom)\n\t\t}, Gr = e => {\n\t\t\tconst t = e.dom;\n\t\t\tnull !== t.parentNode && t.parentNode.removeChild(t)\n\t\t}, Hr = e => {\n\t\t\tconst t = (e => u(e.changedTouches))(e) ? e.changedTouches[0] : e;\n\t\t\treturn ((e, r) => {\n\t\t\t\tconst o = {};\n\t\t\t\tfor (let r = 0, n = e.length; r < n; r++) {\n\t\t\t\t\tconst n = e[r];\n\t\t\t\t\to[String(n)] = t[n]\n\t\t\t\t}\n\t\t\t\treturn o\n\t\t\t})([\"screenX\", \"screenY\", \"pageX\", \"pageY\", \"clientX\", \"clientY\"])\n\t\t};\n\tlet jr = 0;\n\tconst Wr = (e, t, r, o, n) => {\n\t\t\tlet a, i = [];\n\t\t\tconst s = \"tox-crid-\" + jr++, l = [{\n\t\t\t\t\tname: \"move\",\n\t\t\t\t\txMul: 0,\n\t\t\t\t\tyMul: 0,\n\t\t\t\t\tdeltaX: 1,\n\t\t\t\t\tdeltaY: 1,\n\t\t\t\t\tdeltaW: 0,\n\t\t\t\t\tdeltaH: 0,\n\t\t\t\t\tlabel: \"Crop Mask\"\n\t\t\t\t}, {\n\t\t\t\t\tname: \"nw\",\n\t\t\t\t\txMul: 0,\n\t\t\t\t\tyMul: 0,\n\t\t\t\t\tdeltaX: 1,\n\t\t\t\t\tdeltaY: 1,\n\t\t\t\t\tdeltaW: -1,\n\t\t\t\t\tdeltaH: -1,\n\t\t\t\t\tlabel: \"Top Left Crop Handle\"\n\t\t\t\t}, {\n\t\t\t\t\tname: \"ne\",\n\t\t\t\t\txMul: 1,\n\t\t\t\t\tyMul: 0,\n\t\t\t\t\tdeltaX: 0,\n\t\t\t\t\tdeltaY: 1,\n\t\t\t\t\tdeltaW: 1,\n\t\t\t\t\tdeltaH: -1,\n\t\t\t\t\tlabel: \"Top Right Crop Handle\"\n\t\t\t\t}, {\n\t\t\t\t\tname: \"sw\",\n\t\t\t\t\txMul: 0,\n\t\t\t\t\tyMul: 1,\n\t\t\t\t\tdeltaX: 1,\n\t\t\t\t\tdeltaY: 0,\n\t\t\t\t\tdeltaW: -1,\n\t\t\t\t\tdeltaH: 1,\n\t\t\t\t\tlabel: \"Bottom Left Crop Handle\"\n\t\t\t\t}, {name: \"se\", xMul: 1, yMul: 1, deltaX: 0, deltaY: 0, deltaW: 1, deltaH: 1, label: \"Bottom Right Crop Handle\"}],\n\t\t\t\td = [\"top\", \"right\", \"bottom\", \"left\"], c = (e, t) => ({x: t.x - e.x, y: t.y - e.y, w: t.w, h: t.h}),\n\t\t\t\tm = (t, o, n, a) => {\n\t\t\t\t\tconst i = o.x + n * t.deltaX, s = o.y + a * t.deltaY, l = Math.max(20, o.w + n * t.deltaW),\n\t\t\t\t\t\td = Math.max(20, o.h + a * t.deltaH), u = tinymce.geom.Rect;\n\t\t\t\t\tlet m = e = u.clamp({x: i, y: s, w: l, h: d}, r, \"move\" === t.name);\n\t\t\t\t\tm = c(r, m), f.dispatch(\"updateRect\", {rect: m}), p(m)\n\t\t\t\t}, h = e => {\n\t\t\t\t\tconst r = (e, t) => {\n\t\t\t\t\t\tq(o, \"#\" + s + \"-\" + e).each((e => {\n\t\t\t\t\t\t\tMr(e, {left: t.x + \"px\", top: t.y + \"px\", width: Math.max(0, t.w) + \"px\", height: Math.max(0, t.h) + \"px\"})\n\t\t\t\t\t\t}))\n\t\t\t\t\t};\n\t\t\t\t\tM(l, (t => {\n\t\t\t\t\t\tq(o, \"#\" + s + \"-\" + t.name).each((r => {\n\t\t\t\t\t\t\tMr(r, {left: e.w * t.xMul + e.x + \"px\", top: e.h * t.yMul + e.y + \"px\"})\n\t\t\t\t\t\t}))\n\t\t\t\t\t})), r(\"top\", {x: t.x, y: t.y, w: t.w, h: e.y - t.y}), r(\"right\", {\n\t\t\t\t\t\tx: e.x + e.w,\n\t\t\t\t\t\ty: e.y,\n\t\t\t\t\t\tw: t.w - e.x - e.w + t.x,\n\t\t\t\t\t\th: e.h\n\t\t\t\t\t}), r(\"bottom\", {x: t.x, y: e.y + e.h, w: t.w, h: t.h - e.y - e.h + t.y}), r(\"left\", {\n\t\t\t\t\t\tx: t.x,\n\t\t\t\t\t\ty: e.y,\n\t\t\t\t\t\tw: e.x - t.x,\n\t\t\t\t\t\th: e.h\n\t\t\t\t\t}), r(\"move\", e)\n\t\t\t\t}, g = t => {\n\t\t\t\t\th(e = t)\n\t\t\t\t}, p = e => {\n\t\t\t\t\tvar t, o;\n\t\t\t\t\tg((t = r, {x: (o = e).x + t.x, y: o.y + t.y, w: o.w, h: o.h}))\n\t\t\t\t};\n\t\t\t(() => {\n\t\t\t\tconst t = T(\"div\");\n\t\t\t\tCr(t, {\n\t\t\t\t\tid: s,\n\t\t\t\t\tclass: \"tox-croprect-container\",\n\t\t\t\t\trole: \"grid\",\n\t\t\t\t\t\"aria-dropeffect\": \"execute\"\n\t\t\t\t}), Br(o, t), M(d, (e => {\n\t\t\t\t\tq(o, \"#\" + s).each((t => {\n\t\t\t\t\t\tconst r = T(\"div\");\n\t\t\t\t\t\tCr(r, {id: s + \"-\" + e, class: \"tox-croprect-block\", \"data-mce-bogus\": \"all\"}), Br(t, r)\n\t\t\t\t\t}))\n\t\t\t\t})), M(l, (e => {\n\t\t\t\t\tq(o, \"#\" + s).each((t => {\n\t\t\t\t\t\tconst r = T(\"div\");\n\t\t\t\t\t\tvar o, n;\n\t\t\t\t\t\tCr(r, {\n\t\t\t\t\t\t\tid: s + \"-\" + e.name,\n\t\t\t\t\t\t\t\"aria-label\": e.label,\n\t\t\t\t\t\t\t\"aria-grabbed\": \"false\",\n\t\t\t\t\t\t\t\"data-mce-bogus\": \"all\",\n\t\t\t\t\t\t\trole: \"gridcell\",\n\t\t\t\t\t\t\ttabindex: \"-1\",\n\t\t\t\t\t\t\ttitle: e.label\n\t\t\t\t\t\t}), o = r, n = [\"tox-croprect-handle\", \"tox-croprect-handle-\" + e.name], M(n, (e => {\n\t\t\t\t\t\t\tzr(o, e)\n\t\t\t\t\t\t})), Br(t, r)\n\t\t\t\t\t}))\n\t\t\t\t})), a = D(l, (t => {\n\t\t\t\t\tlet r;\n\t\t\t\t\treturn ((e, t) => {\n\t\t\t\t\t\tvar r, o, n;\n\t\t\t\t\t\tlet a, i = [], s = [];\n\t\t\t\t\t\tconst l = null !== (r = t.document) && void 0 !== r ? r : document,\n\t\t\t\t\t\t\td = null !== (o = t.root) && void 0 !== o ? o : l, c = L(l);\n\t\t\t\t\t\tlet m, h, g;\n\t\t\t\t\t\tconst p = L(d.getElementById(null !== (n = t.handle) && void 0 !== n ? n : e)), f = e => {\n\t\t\t\t\t\t\tconst r = e.raw, o = (e => {\n\t\t\t\t\t\t\t\tconst t = Math.max, r = e.documentElement, o = e.body, n = t(r.scrollWidth, o.scrollWidth),\n\t\t\t\t\t\t\t\t\ta = t(r.clientWidth, o.clientWidth), i = t(r.offsetWidth, o.offsetWidth),\n\t\t\t\t\t\t\t\t\ts = t(r.scrollHeight, o.scrollHeight), l = t(r.clientHeight, o.clientHeight);\n\t\t\t\t\t\t\t\treturn {width: n < i ? a : n, height: s < t(r.offsetHeight, o.offsetHeight) ? l : s}\n\t\t\t\t\t\t\t})(l), n = Hr(r);\n\t\t\t\t\t\t\te.prevent(), m = r.button, h = n.screenX, g = n.screenY;\n\t\t\t\t\t\t\tconst i = Ur(p, \"cursor\");\n\t\t\t\t\t\t\ta = T(\"div\", l), Mr(a, {\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: \"0\",\n\t\t\t\t\t\t\t\tleft: \"0\",\n\t\t\t\t\t\t\t\twidth: o.width + \"px\",\n\t\t\t\t\t\t\t\theight: o.height + \"px\",\n\t\t\t\t\t\t\t\t\"z-index\": \"2147483647\",\n\t\t\t\t\t\t\t\topacity: \"0.0001\",\n\t\t\t\t\t\t\t\tcursor: i\n\t\t\t\t\t\t\t}), Br((e => {\n\t\t\t\t\t\t\t\tconst t = e.dom.body;\n\t\t\t\t\t\t\t\tif (null == t) throw new Error(\"Body is not available yet\");\n\t\t\t\t\t\t\t\treturn L(t)\n\t\t\t\t\t\t\t})(c), a), s.push($(c, \"mousemove\", y), $(c, \"touchmove\", y), $(c, \"mouseup\", b), $(c, \"touchend\", b)), t.start(r, n)\n\t\t\t\t\t\t}, y = e => {\n\t\t\t\t\t\t\tconst r = e.raw, o = Hr(r);\n\t\t\t\t\t\t\tif (r.button !== m) return b(e);\n\t\t\t\t\t\t\tconst n = {...o, deltaX: o.screenX - h, deltaY: o.screenY - g};\n\t\t\t\t\t\t\te.prevent(), t.drag(r, n)\n\t\t\t\t\t\t}, b = e => {\n\t\t\t\t\t\t\tconst r = Hr(e.raw);\n\t\t\t\t\t\t\tM(s, (e => e.unbind())), s = [], u(a) && Gr(a), t.stop && t.stop(e.raw, r)\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn i.push($(p, \"mousedown\", f), $(p, \"touchstart\", f)), {\n\t\t\t\t\t\t\tdestroy: () => {\n\t\t\t\t\t\t\t\tM(s.concat(i), (e => e.unbind())), s = [], i = [], u(a) && Gr(a)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})(s, {\n\t\t\t\t\t\tdocument: o.dom.ownerDocument, root: W(o).dom, handle: s + \"-\" + t.name, start: () => {\n\t\t\t\t\t\t\tr = e\n\t\t\t\t\t\t}, drag: (e, o) => {\n\t\t\t\t\t\t\tm(t, r, o.deltaX, o.deltaY)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})), h(e);\n\t\t\t\tconst r = e => {\n\t\t\t\t\tRr(e.target, \"aria-grabbed\", \"focus\" === e.raw.type ? \"true\" : \"false\")\n\t\t\t\t};\n\t\t\t\ti.push($(o, \"focusin\", r), $(o, \"focusout\", r), $(o, \"keydown\", (t => {\n\t\t\t\t\tconst r = N(t.target) ? Dr(t.target, \"id\") : void 0;\n\t\t\t\t\tA(l, (e => r === s + \"-\" + e.name)).each((r => {\n\t\t\t\t\t\tconst o = (e, t, o, n) => {\n\t\t\t\t\t\t\te.kill(), m(r, t, o, n)\n\t\t\t\t\t\t}, a = tinymce.util.VK;\n\t\t\t\t\t\tswitch (t.raw.keyCode) {\n\t\t\t\t\t\t\tcase a.LEFT:\n\t\t\t\t\t\t\t\to(t, e, -10, 0);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase a.RIGHT:\n\t\t\t\t\t\t\t\to(t, e, 10, 0);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase a.UP:\n\t\t\t\t\t\t\t\to(t, e, 0, -10);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase a.DOWN:\n\t\t\t\t\t\t\t\to(t, e, 0, 10);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase a.ENTER:\n\t\t\t\t\t\t\tcase a.SPACEBAR:\n\t\t\t\t\t\t\t\tt.prevent(), n()\n\t\t\t\t\t\t}\n\t\t\t\t\t}))\n\t\t\t\t})))\n\t\t\t})();\n\t\t\tconst f = {\n\t\t\t\t...tinymce.util.Observable, setClampRect: t => {\n\t\t\t\t\tr = t, h(e)\n\t\t\t\t}, setRect: g, getInnerRect: () => c(r, e), setInnerRect: p, setViewPortRect: r => {\n\t\t\t\t\tt = r, h(e)\n\t\t\t\t}, destroy: () => {\n\t\t\t\t\tM(a, (e => e.destroy())), a = [], M(i, (e => e.unbind())), i = []\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn f\n\t\t}, Vr = e => [nr(\"back\", \"Back\"), ...e, nr(\"apply\", \"Apply\", !0)], Xr = () => Vr([or]),\n\t\tYr = (e, t) => r => Nr(r.blob, (r => e(r, t))), qr = e => (t, r) => Nr(t.blob, (t => bt[e](t, r[e] / 100))),\n\t\tJr = e => t => Nr(t.blob, (t => bt[e](t))), Kr = t => {\n\t\t\tconst r = {x: 0, y: 0, w: 0, h: 0}, o = (() => {\n\t\t\t\tconst e = Or((e => e.destroy()));\n\t\t\t\treturn {...e, run: t => e.get().each(t)}\n\t\t\t})(), n = e(r), a = () => k(\".tox .tox-imagepreview\", t).getOrDie(\"cannot find preview panel\"), i = e => {\n\t\t\t\to.run((t => {\n\t\t\t\t\tconst r = a(), o = k(\".tox-imagepreview__container\", r).getOrDie(\"cannot find preview container\"), i = _r(r),\n\t\t\t\t\t\ts = Lr(r), l = _r(o), d = Lr(o), c = Math.max(0, i / 2 - l / 2), u = Math.max(0, s / 2 - d / 2), m = n.get();\n\t\t\t\t\tt.setRect({x: m.x * e + c, y: m.y * e + u, w: m.w * e, h: m.h * e}), t.setClampRect({\n\t\t\t\t\t\tx: c,\n\t\t\t\t\t\ty: u,\n\t\t\t\t\t\tw: l,\n\t\t\t\t\t\th: d\n\t\t\t\t\t}), t.setViewPortRect({x: 0, y: 0, w: i, h: s})\n\t\t\t\t}))\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tbarComponents: Xr(), renderFinal: e => {\n\t\t\t\t\tconst t = n.get();\n\t\t\t\t\treturn o.clear(), n.set(r), Nr(e.blob, (e => pt(e, t.x, t.y, t.w, t.h)))\n\t\t\t\t}, onZoom: e => {\n\t\t\t\t\tvar t;\n\t\t\t\t\ti(null !== (t = e.getData().imagepreview.zoom) && void 0 !== t ? t : 1)\n\t\t\t\t}, onOpen: e => {\n\t\t\t\t\tconst r = k(\".tox .tox-imagepreview .tox-imagepreview__container img\", t).getOrDie(\"cannot find preview image\");\n\t\t\t\t\tQ(r).then((() => {\n\t\t\t\t\t\tconst t = () => {\n\t\t\t\t\t\t\t\tvar t;\n\t\t\t\t\t\t\t\treturn i(null !== (t = e.getData().imagepreview.zoom) && void 0 !== t ? t : 1)\n\t\t\t\t\t\t\t}, s = {x: 0, y: 0, w: r.dom.naturalWidth, h: r.dom.naturalHeight},\n\t\t\t\t\t\t\tl = ((e, t, r) => tinymce.geom.Rect.inflate(e, -20, -20))(s);\n\t\t\t\t\t\tn.set(l);\n\t\t\t\t\t\tconst d = Wr(l, s, s, a(), g);\n\t\t\t\t\t\to.set(d), t(), d.on(\"updateRect\", (r => {\n\t\t\t\t\t\t\tvar o;\n\t\t\t\t\t\t\tconst a = r.rect, i = null !== (o = e.getData().imagepreview.zoom) && void 0 !== o ? o : 1,\n\t\t\t\t\t\t\t\ts = {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\t\t\t\t\t\t\tn.set(s), t()\n\t\t\t\t\t\t}))\n\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\t\t}, Zr = e => ce(e).then((t => {\n\t\t\tconst r = t.src;\n\t\t\treturn {blob: e, url: r, width: t.naturalWidth, height: t.naturalHeight}\n\t\t})), $r = (e, t, r) => ({\n\t\t\ttype: \"panel\",\n\t\t\tclasses: [\"tox-image-tools\"],\n\t\t\titems: [{type: \"bar\", items: e}, {type: \"imagepreview\", name: \"imagepreview\"}, {\n\t\t\t\ttype: \"bar\",\n\t\t\t\titems: [ar(ir, \"undo\", \"Undo\", t), ar(sr, \"redo\", \"Redo\", r), ar(lr, \"zoom-in\", \"Zoom in\"), ar(dr, \"zoom-out\", \"Zoom out\")]\n\t\t\t}]\n\t\t}), Qr = (e, t) => {\n\t\t\tvar r;\n\t\t\tconst o = null !== (r = e.getData().imagepreview.zoom) && void 0 !== r ? r : 1,\n\t\t\t\tn = 0 === t ? Math.min(2, o + .1) : Math.max(.1, o - .1);\n\t\t\te.setData({imagepreview: {zoom: n}})\n\t\t}, eo = (t, r, o, n) => {\n\t\t\tconst a = e => {\n\t\t\t\t((e, t, r, o, n) => {\n\t\t\t\t\tce(n).then((e => {\n\t\t\t\t\t\tconst t = _t(e);\n\t\t\t\t\t\treturn o.w === t.w && o.h === t.h || kt(r) && ((e, t) => {\n\t\t\t\t\t\t\tlet r, o;\n\t\t\t\t\t\t\tt && (r = e.style.width, o = e.style.height, (r || o) && (e.style.width = t.w + \"px\", e.style.height = t.h + \"px\", e.removeAttribute(\"data-mce-style\")), r = e.width, o = e.height, (r || o) && (e.setAttribute(\"width\", String(t.w)), e.setAttribute(\"height\", String(t.h))))\n\t\t\t\t\t\t})(r, t), URL.revokeObjectURL(e.src), n\n\t\t\t\t\t})).then(Rt).then((o => Zt(e, n, o, !0, t, r)))\n\t\t\t\t})(t, r, o.dom, n, e)\n\t\t\t}, i = W(L(t.getContainer()));\n\t\t\tJt(t, o.dom).then((r => {\n\t\t\t\tconst o = (t => {\n\t\t\t\t\tconst r = e(t), o = Ir(), n = (() => {\n\t\t\t\t\t\tconst e = [];\n\t\t\t\t\t\tlet t = -1;\n\t\t\t\t\t\tconst r = () => t > 0, o = () => -1 !== t && t < e.length - 1;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tdata: e, add: r => {\n\t\t\t\t\t\t\t\tconst o = e.splice(++t);\n\t\t\t\t\t\t\t\treturn e.push(r), {state: r, removed: o}\n\t\t\t\t\t\t\t}, undo: () => e[r() ? --t : t], redo: () => e[o() ? ++t : t], canUndo: r, canRedo: o\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tn.add(t);\n\t\t\t\t\tconst a = e => {\n\t\t\t\t\t\tr.set(e);\n\t\t\t\t\t\tconst t = n.add(e).removed;\n\t\t\t\t\t\tl(t)\n\t\t\t\t\t}, i = () => o.get().getOrThunk(r.get), s = e => URL.revokeObjectURL(e.url), l = e => M(e, s), d = () => {\n\t\t\t\t\t\to.on(s), o.clear()\n\t\t\t\t\t};\n\t\t\t\t\treturn {\n\t\t\t\t\t\tgetState: () => r.get(), addState: e => Zr(e).then(a), destroyState: () => {\n\t\t\t\t\t\t\td(), l(n.data)\n\t\t\t\t\t\t}, getTempState: i, setTempState: e => Zr(e).then((e => {\n\t\t\t\t\t\t\td(), o.set(e)\n\t\t\t\t\t\t})), applyTempState: () => o.get().each((e => {\n\t\t\t\t\t\t\ta(e), o.clear()\n\t\t\t\t\t\t})), destroyTempState: d, undo: () => {\n\t\t\t\t\t\t\tconst e = n.undo();\n\t\t\t\t\t\t\tr.set(e)\n\t\t\t\t\t\t}, redo: () => {\n\t\t\t\t\t\t\tconst e = n.redo();\n\t\t\t\t\t\t\tr.set(e)\n\t\t\t\t\t\t}, canRedo: n.canRedo, canUndo: n.canUndo, dialogData: (e = !1) => {\n\t\t\t\t\t\t\tconst t = i();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\timagepreview: {...e ? {cachedWidth: t.width, cachedHeight: t.height} : {}, url: t.url},\n\t\t\t\t\t\t\t\tsize: {width: String(t.width), height: String(t.height)}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})({blob: r, url: URL.createObjectURL(r), width: n.w, height: n.h}), s = t.windowManager.open(((e, t, r) => {\n\t\t\t\t\tconst o = e => {\n\t\t\t\t\t\tconst r = e.getData().imagepreview;\n\t\t\t\t\t\treturn tr({imagepreview: r}, t.dialogData())\n\t\t\t\t\t}, n = (e, r, o) => e(o, r.getData()).then(t.setTempState).then((() => {\n\t\t\t\t\t\tr.setData(t.dialogData())\n\t\t\t\t\t})), a = e => {\n\t\t\t\t\t\te.setEnabled(ir, t.canUndo()), e.setEnabled(sr, t.canRedo())\n\t\t\t\t\t}, i = ({ui: e, existingApi: r, overrides: a, actions: i}) => r.redial({\n\t\t\t\t\t\t...p(),\n\t\t\t\t\t\tinitialData: o(r),\n\t\t\t\t\t\tbody: $r(e.barComponents, !0, !0),\n\t\t\t\t\t\tonAction: (e, r) => {\n\t\t\t\t\t\t\t!c(i) && P(i, r.name) ? n(i[r.name], e, t.getTempState()) : (\"apply\" === r.name && t.applyTempState(), h.onAction(e, r))\n\t\t\t\t\t\t}, ...a\n\t\t\t\t\t}), s = e => r => {\n\t\t\t\t\t\tn(e.renderInitial, r, t.getState()).then((() => i({ui: e, existingApi: r})))\n\t\t\t\t\t}, l = e => r => i({\n\t\t\t\t\t\tui: e, existingApi: r, overrides: {\n\t\t\t\t\t\t\tonChange: r => {\n\t\t\t\t\t\t\t\tn(e.renderChange, r, t.getState())\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}), d = e => r => {\n\t\t\t\t\t\ti({\n\t\t\t\t\t\t\tui: e, existingApi: r, overrides: {\n\t\t\t\t\t\t\t\tonAction: (r, o) => {\n\t\t\t\t\t\t\t\t\tswitch (\"apply\" === o.name ? e.renderFinal(t.getState(), r.getData()).then(t.addState).then((() => {\n\t\t\t\t\t\t\t\t\t\tr.setData(t.dialogData()), h.onAction(r, o)\n\t\t\t\t\t\t\t\t\t})) : h.onAction(r, o), o.name) {\n\t\t\t\t\t\t\t\t\t\tcase lr:\n\t\t\t\t\t\t\t\t\t\tcase dr:\n\t\t\t\t\t\t\t\t\t\t\te.onZoom(r)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}), e.onOpen(r)\n\t\t\t\t\t}, u = {\n\t\t\t\t\t\t[cr]: d(Kr(e)),\n\t\t\t\t\t\t[ur]: d({\n\t\t\t\t\t\t\tbarComponents: Vr([or, {type: \"sizeinput\", name: \"size\"}, or]),\n\t\t\t\t\t\t\tonOpen: g,\n\t\t\t\t\t\t\tonZoom: g,\n\t\t\t\t\t\t\trenderFinal: (e, t) => {\n\t\t\t\t\t\t\t\tconst r = t.size;\n\t\t\t\t\t\t\t\treturn Nr(e.blob, (e => ft(e, parseInt(r.width, 10), parseInt(r.height, 10))))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t[mr]: (m = {\n\t\t\t\t\t\t\tbarComponents: Vr([or, ar(wr, \"flip-horizontally\", \"Flip horizontally\"), ar(vr, \"flip-vertically\", \"Flip vertically\"), ar(xr, \"rotate-left\", \"Rotate counterclockwise\"), ar(Sr, \"rotate-right\", \"Rotate clockwise\"), or]),\n\t\t\t\t\t\t\tactions: {[wr]: Yr(gt, \"h\"), [vr]: Yr(gt, \"v\"), [xr]: Yr(yt, -90), [Sr]: Yr(yt, 90)}\n\t\t\t\t\t\t}, e => i({ui: m, existingApi: e, actions: m.actions})),\n\t\t\t\t\t\t[hr]: l({\n\t\t\t\t\t\t\tbarComponents: Vr([{type: \"slider\", name: \"brightness\", label: \"Brightness\", min: -100, max: 100}]),\n\t\t\t\t\t\t\trenderChange: qr(\"brightness\")\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t[gr]: s({barComponents: Xr(), renderInitial: Jr(\"sharpen\")}),\n\t\t\t\t\t\t[pr]: l({\n\t\t\t\t\t\t\tbarComponents: Vr([{type: \"slider\", name: \"contrast\", label: \"Contrast\", min: -100, max: 100}]),\n\t\t\t\t\t\t\trenderChange: qr(\"contrast\")\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t[fr]: l({\n\t\t\t\t\t\t\tbarComponents: Vr([{\n\t\t\t\t\t\t\t\ttype: \"slider\",\n\t\t\t\t\t\t\t\tname: \"color-red\",\n\t\t\t\t\t\t\t\tlabel: \"R\",\n\t\t\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\t\t\tmax: 200\n\t\t\t\t\t\t\t}, {type: \"slider\", name: \"color-green\", label: \"G\", min: 0, max: 200}, {\n\t\t\t\t\t\t\t\ttype: \"slider\",\n\t\t\t\t\t\t\t\tname: \"color-blue\",\n\t\t\t\t\t\t\t\tlabel: \"B\",\n\t\t\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\t\t\tmax: 200\n\t\t\t\t\t\t\t}]), renderChange: (e, t) => {\n\t\t\t\t\t\t\t\tconst r = t[\"color-red\"] / 100, o = t[\"color-green\"] / 100, n = t[\"color-blue\"] / 100;\n\t\t\t\t\t\t\t\treturn Nr(e.blob, (e => ht(e, r, o, n)))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t[yr]: l({\n\t\t\t\t\t\t\tbarComponents: Vr([{type: \"slider\", name: \"gamma\", label: \"Gamma\", min: -100, max: 100}]),\n\t\t\t\t\t\t\trenderChange: qr(\"gamma\")\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t[br]: s({barComponents: Xr(), renderInitial: Jr(\"invert\")})\n\t\t\t\t\t};\n\t\t\t\t\tvar m;\n\t\t\t\t\tconst h = {\n\t\t\t\t\t\tonSubmit: e => {\n\t\t\t\t\t\t\tconst o = t.getState().blob;\n\t\t\t\t\t\t\tr(o), e.close()\n\t\t\t\t\t\t}, onClose: t.destroyState, onAction: (e, r) => {\n\t\t\t\t\t\t\tconst n = u[r.name];\n\t\t\t\t\t\t\tif (c(n)) switch (r.name) {\n\t\t\t\t\t\t\t\tcase\"apply\":\n\t\t\t\t\t\t\t\tcase\"back\":\n\t\t\t\t\t\t\t\t\tt.destroyTempState(), e.redial({...p(), initialData: o(e)});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase ir:\n\t\t\t\t\t\t\t\t\tt.undo(), e.setData(t.dialogData()), a(e);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase sr:\n\t\t\t\t\t\t\t\t\tt.redo(), e.setData(t.dialogData()), a(e);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase lr:\n\t\t\t\t\t\t\t\t\tQr(e, 0);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase dr:\n\t\t\t\t\t\t\t\t\tQr(e, 1)\n\t\t\t\t\t\t\t} else n(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t}, p = () => ({\n\t\t\t\t\t\t...h,\n\t\t\t\t\t\ttitle: \"Edit Image\",\n\t\t\t\t\t\tsize: \"large\",\n\t\t\t\t\t\tbody: $r([ar(cr, \"crop\", \"Crop\"), ar(ur, \"resize\", \"Resize\"), ar(mr, \"orientation\", \"Orientation\"), ar(hr, \"brightness\", \"Brightness\"), ar(gr, \"sharpen\", \"Sharpen\"), ar(pr, \"contrast\", \"Contrast\"), ar(fr, \"color-levels\", \"Color levels\"), ar(yr, \"gamma\", \"Gamma\"), ar(br, \"invert\", \"Invert\")], !t.canUndo(), !t.canRedo()),\n\t\t\t\t\t\tbuttons: [{type: \"cancel\", name: \"cancel\", text: \"Cancel\"}, {\n\t\t\t\t\t\t\ttype: \"submit\",\n\t\t\t\t\t\t\tname: \"save\",\n\t\t\t\t\t\t\ttext: \"Save\",\n\t\t\t\t\t\t\tenabled: t.canUndo(),\n\t\t\t\t\t\t\tprimary: !0\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\treturn {...p(), initialData: t.dialogData(!0)}\n\t\t\t\t})(i, o, a));\n\t\t\t\ts.setEnabled(\"save\", !1)\n\t\t\t}))\n\t\t}, to = (e, t) => () => {\n\t\t\tWt(e).bind((t => Ht(e, t))).each((r => {\n\t\t\t\teo(e, t, r, _t(r.dom))\n\t\t\t}))\n\t\t}, ro = (e, t) => {\n\t\t\tconst r = Ir();\n\t\t\te.on(\"NodeChange\", (o => {\n\t\t\t\tconst n = r.get(), a = Ht(e, L(o.element));\n\t\t\t\tn.isSome() && !((e, t, r = y) => {\n\t\t\t\t\treturn (o = e, n = t, a = r, o.isSome() && n.isSome() ? S.some(a(o.getOrDie(), n.getOrDie())) : S.none()).getOr(e.isNone() && t.isNone());\n\t\t\t\t\tvar o, n, a\n\t\t\t\t})(a, n, ((e, t) => e.dom.src === t.dom.src)) ? (Kt(t), e.editorUpload.uploadImagesAuto(), r.clear()) : a.each(r.set)\n\t\t\t}))\n\t\t};\n\ttinymce.PluginManager.requireLangPack(\"editimage\", \"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(\"editimage\", (t => {\n\t\t(e => {\n\t\t\tconst t = e.options.register;\n\t\t\tt(\"editimage_toolbar\", {\n\t\t\t\tprocessor: \"string\",\n\t\t\t\tdefault: \"rotateleft rotateright flipv fliph editimage imageoptions\"\n\t\t\t}), t(\"editimage_proxy\", {processor: \"string\"}), t(\"editimage_proxy_service_url\", {processor: \"string\"}), t(\"editimage_cors_hosts\", {\n\t\t\t\tprocessor: \"string[]\",\n\t\t\t\tdefault: []\n\t\t\t}), t(\"editimage_credentials_hosts\", {\n\t\t\t\tprocessor: \"string[]\",\n\t\t\t\tdefault: []\n\t\t\t}), t(\"editimage_fetch_image\", {processor: \"function\"}), t(\"editimage_api_key\", {processor: \"string\"}), t(\"editimage_upload_timeout\", {\n\t\t\t\tprocessor: \"number\",\n\t\t\t\tdefault: 3e4\n\t\t\t})\n\t\t})(t);\n\t\tconst r = e(0);\n\t\t((e, t) => {\n\t\t\tE({\n\t\t\t\tmceImageRotateLeft: Qt(e, t, -90),\n\t\t\t\tmceImageRotateRight: Qt(e, t, 90),\n\t\t\t\tmceImageFlipVertical: er(e, t, \"v\"),\n\t\t\t\tmceImageFlipHorizontal: er(e, t, \"h\"),\n\t\t\t\tmceEditImage: to(e, t)\n\t\t\t}, ((t, r) => {\n\t\t\t\te.addCommand(r, t)\n\t\t\t}))\n\t\t})(t, r), (e => {\n\t\t\tlet t = [];\n\t\t\tconst r = t => () => e.execCommand(t), o = () => Wt(e).exists((t => Ht(e, t).isSome())), n = e => {\n\t\t\t\tconst r = t => e.setEnabled(t);\n\t\t\t\treturn r(o()), t = t.concat([r]), () => {\n\t\t\t\t\tt = ((e, t) => {\n\t\t\t\t\t\tconst o = [];\n\t\t\t\t\t\tfor (let t = 0, n = e.length; t < n; t++) {\n\t\t\t\t\t\t\tconst n = e[t];\n\t\t\t\t\t\t\tn !== r && o.push(n)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn o\n\t\t\t\t\t})(t)\n\t\t\t\t}\n\t\t\t};\n\t\t\te.on(\"NodeChange\", (() => {\n\t\t\t\tconst e = o();\n\t\t\t\tM(t, (t => t(e)))\n\t\t\t})), e.ui.registry.addButton(\"rotateleft\", {\n\t\t\t\ttooltip: \"Rotate counterclockwise\",\n\t\t\t\ticon: \"rotate-left\",\n\t\t\t\tonAction: r(\"mceImageRotateLeft\"),\n\t\t\t\tonSetup: n\n\t\t\t}), e.ui.registry.addButton(\"rotateright\", {\n\t\t\t\ttooltip: \"Rotate clockwise\",\n\t\t\t\ticon: \"rotate-right\",\n\t\t\t\tonAction: r(\"mceImageRotateRight\"),\n\t\t\t\tonSetup: n\n\t\t\t}), e.ui.registry.addButton(\"flipv\", {\n\t\t\t\ttooltip: \"Flip vertically\",\n\t\t\t\ticon: \"flip-vertically\",\n\t\t\t\tonAction: r(\"mceImageFlipVertical\"),\n\t\t\t\tonSetup: n\n\t\t\t}), e.ui.registry.addButton(\"fliph\", {\n\t\t\t\ttooltip: \"Flip horizontally\",\n\t\t\t\ticon: \"flip-horizontally\",\n\t\t\t\tonAction: r(\"mceImageFlipHorizontal\"),\n\t\t\t\tonSetup: n\n\t\t\t}), e.ui.registry.addButton(\"editimage\", {\n\t\t\t\ttooltip: \"Edit image\",\n\t\t\t\ticon: \"edit-image\",\n\t\t\t\tonAction: r(\"mceEditImage\"),\n\t\t\t\tonSetup: n\n\t\t\t}), e.ui.registry.addButton(\"imageoptions\", {\n\t\t\t\ttooltip: \"Image options\",\n\t\t\t\ticon: \"image\",\n\t\t\t\tonAction: r(\"mceImage\")\n\t\t\t}), e.ui.registry.addContextMenu(\"editimage\", {\n\t\t\t\tupdate: t => Ht(e, L(t)).map((e => ({\n\t\t\t\t\ttext: \"Edit image\",\n\t\t\t\t\ticon: \"edit-image\",\n\t\t\t\t\tonAction: r(\"mceEditImage\")\n\t\t\t\t}))).toArray()\n\t\t\t})\n\t\t})(t), (e => {\n\t\t\te.ui.registry.addContextToolbar(\"editimage\", {\n\t\t\t\titems: Dt(e),\n\t\t\t\tpredicate: t => Ht(e, L(t)).isSome(),\n\t\t\t\tposition: \"node\",\n\t\t\t\tscope: \"node\"\n\t\t\t})\n\t\t})(t), ro(t, r)\n\t}))\n}();\n","/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n 'use strict';\n\n var typeOf$1 = function (x) {\n if (x === null) {\n return 'null';\n }\n if (x === undefined) {\n return 'undefined';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isEquatableType = function (x) {\n return [\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'function',\n 'xml',\n 'null'\n ].indexOf(x) !== -1;\n };\n\n var sort$1 = function (xs, compareFn) {\n var clone = Array.prototype.slice.call(xs);\n return clone.sort(compareFn);\n };\n\n var contramap = function (eqa, f) {\n return eq$2(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq$2 = function (f) {\n return { eq: f };\n };\n var tripleEq = eq$2(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq$2(function (x, y) {\n if (x.length !== y.length) {\n return false;\n }\n var len = x.length;\n for (var i = 0; i < len; i++) {\n if (!eqa.eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqSortedArray = function (eqa, compareFn) {\n return contramap(eqArray(eqa), function (xs) {\n return sort$1(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq$2(function (x, y) {\n var kx = Object.keys(x);\n var ky = Object.keys(y);\n if (!eqSortedArray(eqString).eq(kx, ky)) {\n return false;\n }\n var len = kx.length;\n for (var i = 0; i < len; i++) {\n var q = kx[i];\n if (!eqa.eq(x[q], y[q])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqAny = eq$2(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf$1(x);\n var ty = typeOf$1(y);\n if (tx !== ty) {\n return false;\n }\n if (isEquatableType(tx)) {\n return x === y;\n } else if (tx === 'array') {\n return eqArray(eqAny).eq(x, y);\n } else if (tx === 'object') {\n return eqRecord(eqAny).eq(x, y);\n }\n return false;\n });\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$1(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$4(value, Object);\n const isArray$1 = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray$1(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const call = f => {\n f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf$1 = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map$3 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$e = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$2 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$5 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$e(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil$1 = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$2 = (xs, pred) => {\n return findUntil$1(xs, pred, never);\n };\n const findIndex$2 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$3(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$b(xs, 0);\n const last$3 = xs => get$b(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n const unique$1 = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const keys = Object.keys;\n const hasOwnProperty$2 = Object.hasOwnProperty;\n const each$d = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$2 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$d(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$d(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$4 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$d(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$a = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty$2.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n const stringArray = a => {\n const all = {};\n each$e(a, key => {\n all[key] = {};\n });\n return keys(all);\n };\n\n const isArrayLike = o => o.length !== undefined;\n const isArray = Array.isArray;\n const toArray$1 = obj => {\n if (!isArray(obj)) {\n const array = [];\n for (let i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n return array;\n } else {\n return obj;\n }\n };\n const each$c = (o, cb, s) => {\n if (!o) {\n return false;\n }\n s = s || o;\n if (isArrayLike(o)) {\n for (let n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n } else {\n for (const n in o) {\n if (has$2(o, n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n }\n }\n return true;\n };\n const map$1 = (array, callback) => {\n const out = [];\n each$c(array, (item, index) => {\n out.push(callback(item, index, array));\n });\n return out;\n };\n const filter$3 = (a, f) => {\n const o = [];\n each$c(a, (v, index) => {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n const indexOf = (a, v) => {\n if (a) {\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n const reduce = (collection, iteratee, accumulator, thisArg) => {\n let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (let i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n const findIndex$1 = (array, predicate, thisArg) => {\n for (let i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n const last$2 = collection => collection[collection.length - 1];\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$1 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$3(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$3(0, 0);\n };\n const nu$3 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$3,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$2(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$2(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$3 = blank(/^\\s+|\\s+$/g);\n const lTrim = blank(/^\\s+/g);\n const rTrim = blank(/\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$3 = s => !isNotEmpty(s);\n const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n const toInt = (value, radix = 10) => {\n const num = parseInt(value, radix);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$2 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu: nu$1,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform$2 = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform$2();\n\n const userAgent = navigator.userAgent;\n const platform$1 = detect$2();\n const browser$1 = platform$1.browser;\n const os = platform$1.os;\n const deviceType = platform$1.deviceType;\n const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n const Env = {\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n documentMode: browser$1.isIE() ? document.documentMode || 7 : 10,\n cacheSuffix: null,\n container: null,\n canHaveCSP: !browser$1.isIE(),\n windowsPhone,\n browser: {\n current: browser$1.current,\n version: browser$1.version,\n isChromium: browser$1.isChromium,\n isEdge: browser$1.isEdge,\n isFirefox: browser$1.isFirefox,\n isIE: browser$1.isIE,\n isOpera: browser$1.isOpera,\n isSafari: browser$1.isSafari\n },\n os: {\n current: os.current,\n version: os.version,\n isAndroid: os.isAndroid,\n isChromeOS: os.isChromeOS,\n isFreeBSD: os.isFreeBSD,\n isiOS: os.isiOS,\n isLinux: os.isLinux,\n isMacOS: os.isMacOS,\n isSolaris: os.isSolaris,\n isWindows: os.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n const trim$2 = str => {\n return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n const is$3 = (obj, type) => {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n const makeMap$4 = (items, delim, map = {}) => {\n const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n let i = resolvedItems.length;\n while (i--) {\n map[resolvedItems[i]] = {};\n }\n return map;\n };\n const hasOwnProperty$1 = has$2;\n const extend$3 = (obj, ...exts) => {\n for (let i = 0; i < exts.length; i++) {\n const ext = exts[i];\n for (const name in ext) {\n if (has$2(ext, name)) {\n const value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n const walk$4 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$c(o, (o, i) => {\n if (f.call(s, o, i, n) === false) {\n return false;\n } else {\n walk$4(o, f, n, s);\n return true;\n }\n });\n }\n };\n const resolve$2 = (n, o = window) => {\n const path = n.split('.');\n for (let i = 0, l = path.length; i < l; i++) {\n o = o[path[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n const explode$3 = (s, d) => {\n if (isArray$1(s)) {\n return s;\n } else if (s === '') {\n return [];\n } else {\n return map$1(s.split(d || ','), trim$2);\n }\n };\n const _addCacheSuffix = url => {\n const cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n const Tools = {\n trim: trim$2,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$c,\n map: map$1,\n grep: filter$3,\n inArray: indexOf,\n hasOwn: hasOwnProperty$1,\n extend: extend$3,\n walk: walk$4,\n resolve: resolve$2,\n explode: explode$3,\n _addCacheSuffix\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n const isElement$7 = isType(ELEMENT);\n const isText$b = isType(TEXT);\n const isDocument$2 = isType(DOCUMENT);\n const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$d(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$9 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$9(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$b = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const hasNone = element => {\n const attrs = element.dom.attributes;\n return attrs === undefined || attrs === null || attrs.length === 0;\n };\n const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const read$4 = (element, attr) => {\n const value = get$9(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$4(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$a = (element, attr, id) => {\n const nu = filter$5(read$4(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$b(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$8 = element => read$4(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$9 = (element, clazz) => remove$a(element, 'class', clazz);\n const toggle$2 = (element, clazz) => {\n if (contains$2(get$8(element), clazz)) {\n return remove$9(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove$b(element, 'class');\n }\n };\n const remove$8 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$9(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$1 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$2(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$2(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n const fromDom$2 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$2\n };\n\n const toArray = (target, f) => {\n const r = [];\n const recurse = e => {\n r.push(e);\n return f(e);\n };\n let cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents$1 = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const siblings = element => {\n const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const prevSiblings = element => reverse(toArray(element, prevSibling));\n const nextSiblings = element => toArray(element, nextSibling);\n const children = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n const child$1 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$1(element, 0);\n const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n const childNodesCount = element => element.dom.childNodes.length;\n\n const getHead = doc => {\n const b = doc.dom.head;\n if (b === null || b === undefined) {\n throw new Error('Head is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported = constant(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$7(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText$b(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported$1(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$d(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$7 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$1 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported$1(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const remove$7 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$2(getOpt(element, 'style').map(trim$3), '')) {\n remove$b(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$4 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap$2 = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$3 = (marker, elements) => {\n each$e(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$4(e, x);\n });\n };\n const append = (parent, elements) => {\n each$e(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$e(children(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children$1 = children(wrapper);\n if (children$1.length > 0) {\n after$3(wrapper, children$1);\n }\n remove$6(wrapper);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n const get$6 = element => element.dom.innerHTML;\n const set = (element, content) => {\n const owner = owner$1(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$6(container);\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle$1 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle$1(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const get$5 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n const intoView = (element, alignToTop) => {\n const isSafari = detect$2().browser.isSafari();\n if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n element.dom.scrollIntoViewIfNeeded(false);\n } else {\n element.dom.scrollIntoView(alignToTop);\n }\n };\n\n const get$4 = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$2().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$5(SugarElement.fromDom(doc));\n return get$4(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const isNodeType = type => {\n return node => {\n return !!node && node.nodeType === type;\n };\n };\n const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n const isElement$6 = isNodeType(1);\n const matchNodeName = name => {\n const lowerCasedName = name.toLowerCase();\n return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n };\n const matchNodeNames = names => {\n const lowerCasedNames = names.map(s => s.toLowerCase());\n return node => {\n if (node && node.nodeName) {\n const nodeName = node.nodeName.toLowerCase();\n return contains$2(lowerCasedNames, nodeName);\n }\n return false;\n };\n };\n const matchStyleValues = (name, values) => {\n const items = values.toLowerCase().split(' ');\n return node => {\n if (isElement$6(node)) {\n const win = node.ownerDocument.defaultView;\n if (win) {\n for (let i = 0; i < items.length; i++) {\n const computed = win.getComputedStyle(node, null);\n const cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n }\n return false;\n };\n };\n const hasAttribute = attrName => {\n return node => {\n return isElement$6(node) && node.hasAttribute(attrName);\n };\n };\n const hasAttributeValue = (attrName, attrValue) => {\n return node => {\n return isElement$6(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n const isBogus$2 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n const isBogusAll$1 = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n const hasContentEditableState = value => {\n return node => {\n if (isElement$6(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n const isText$a = isNodeType(3);\n const isCData = isNodeType(4);\n const isPi = isNodeType(7);\n const isComment = isNodeType(8);\n const isDocument$1 = isNodeType(9);\n const isDocumentFragment = isNodeType(11);\n const isBr$6 = matchNodeName('br');\n const isImg = matchNodeName('img');\n const isContentEditableTrue$3 = hasContentEditableState('true');\n const isContentEditableFalse$a = hasContentEditableState('false');\n const isTableCell$3 = matchNodeNames([\n 'td',\n 'th'\n ]);\n const isTableCellOrCaption = matchNodeNames([\n 'td',\n 'th',\n 'caption'\n ]);\n const isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isListItem$2 = matchNodeName('li');\n\n const browser = detect$2().browser;\n const firstElement = nodes => find$2(nodes, isElement$7);\n const getTableCaptionDeltaY = elm => {\n if (browser.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(elm => {\n return name(elm) === 'caption';\n }).bind(caption => {\n return firstElement(nextSiblings(caption)).map(body => {\n const bodyTop = body.dom.offsetTop;\n const captionTop = caption.dom.offsetTop;\n const captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n const getPos = (body, elm, rootElm) => {\n let x = 0, y = 0;\n const doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n const pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x,\n y\n };\n }\n let offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n const castOffsetParent = offsetParent;\n x += castOffsetParent.offsetLeft || 0;\n y += castOffsetParent.offsetTop || 0;\n offsetParent = castOffsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n }\n return {\n x,\n y\n };\n };\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$3 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$2(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n const descendant = (scope, selector) => one(selector, scope);\n const closest$3 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n let idCount = 0;\n const loadedStates = {};\n const edos = SugarElement.fromDom(documentOrShadowRoot);\n const doc = documentOrOwner(edos);\n const maxLoadTime = settings.maxLoadTime || 5000;\n const _setReferrerPolicy = referrerPolicy => {\n settings.referrerPolicy = referrerPolicy;\n };\n const addStyle = element => {\n append$1(getStyleContainer(edos), element);\n };\n const removeStyle = id => {\n const styleContainer = getStyleContainer(edos);\n descendant(styleContainer, '#' + id).each(remove$6);\n };\n const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n }));\n const load = url => new Promise((success, failure) => {\n let link;\n const urlWithSuffix = Tools._addCacheSuffix(url);\n const state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n const resolve = (callbacks, status) => {\n each$e(callbacks, call);\n state.status = status;\n state.passed = [];\n state.failed = [];\n if (link) {\n link.onload = null;\n link.onerror = null;\n link = null;\n }\n };\n const passed = () => resolve(state.passed, 2);\n const failed = () => resolve(state.failed, 3);\n const wait = (testCallback, waitCallback) => {\n if (!testCallback()) {\n if (Date.now() - startTime < maxLoadTime) {\n setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n const waitForWebKitLinkLoaded = () => {\n wait(() => {\n const styleSheets = documentOrShadowRoot.styleSheets;\n let i = styleSheets.length;\n while (i--) {\n const styleSheet = styleSheets[i];\n const owner = styleSheet.ownerNode;\n if (owner && link && owner.id === link.id) {\n passed();\n return true;\n }\n }\n return false;\n }, waitForWebKitLinkLoaded);\n };\n if (success) {\n state.passed.push(success);\n }\n if (failure) {\n state.failed.push(failure);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n const linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n const startTime = Date.now();\n if (settings.contentCssCors) {\n set$2(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$2(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n addStyle(linkElem);\n set$2(linkElem, 'href', urlWithSuffix);\n });\n const loadAll = urls => {\n const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n return loadedUrls.then(results => {\n const parts = partition$2(results, r => r.status === 'fulfilled');\n if (parts.fail.length > 0) {\n return Promise.reject(map$3(parts.fail, result => result.reason));\n } else {\n return map$3(parts.pass, result => result.value);\n }\n });\n };\n const unload = url => {\n const urlWithSuffix = Tools._addCacheSuffix(url);\n get$a(loadedStates, urlWithSuffix).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n const unloadAll = urls => {\n each$e(urls, url => {\n unload(url);\n });\n };\n return {\n load,\n loadAll,\n unload,\n unloadAll,\n _setReferrerPolicy\n };\n };\n\n const create$d = () => {\n const map = new WeakMap();\n const forElement = (referenceElement, settings) => {\n const root = getRootNode(referenceElement);\n const rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(() => {\n const sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement };\n };\n const instance = create$d();\n\n class DomTreeWalker {\n constructor(startNode, rootNode) {\n this.node = startNode;\n this.rootNode = rootNode;\n this.current = this.current.bind(this);\n this.next = this.next.bind(this);\n this.prev = this.prev.bind(this);\n this.prev2 = this.prev2.bind(this);\n }\n current() {\n return this.node;\n }\n next(shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n }\n prev(shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n }\n prev2(shallow) {\n this.node = this.findPreviousNode(this.node, shallow);\n return this.node;\n }\n findSibling(node, startName, siblingName, shallow) {\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n return undefined;\n }\n findPreviousNode(node, shallow) {\n if (node) {\n const sibling = node.previousSibling;\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (let child = sibling.lastChild; child; child = child.lastChild) {\n if (!child.lastChild) {\n return child;\n }\n }\n }\n return sibling;\n }\n const parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n return undefined;\n }\n }\n\n const blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n const tableCells = [\n 'td',\n 'th'\n ];\n const tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n const textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n const headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n const listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n const lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n const wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n const wrapBlockElements = ['pre'].concat(headings);\n const lazyLookup = items => {\n let lookup;\n return node => {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n const isBlock$2 = lazyLookup(blocks);\n const isTable$1 = node => name(node) === 'table';\n const isInline$1 = node => isElement$7(node) && !isBlock$2(node);\n const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n const isTextBlock$2 = lazyLookup(textBlocks);\n const isList = lazyLookup(lists);\n const isListItem$1 = lazyLookup(listItems$1);\n const isTableSection = lazyLookup(tableSections);\n const isTableCell$2 = lazyLookup(tableCells);\n const isWsPreserveElement = lazyLookup(wsElements);\n const isWrapBlockElement = lazyLookup(wrapBlockElements);\n const isWrapElement = node => isWrapBlockElement(node) || isInline$1(node);\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, selector, isRoot).isSome();\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n const isZwsp$1 = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$e(children(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api$1 = NodeValue(isText$b, 'text');\n const get$3 = element => api$1.get(element);\n const getOption = element => api$1.getOption(element);\n\n const getLastChildren$1 = elm => {\n const children = [];\n let rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n const removeTrailingBr = elm => {\n const allBrs = descendants(elm, 'br');\n const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n if (allBrs.length === brs.length) {\n each$e(brs, remove$6);\n }\n };\n const createPaddingBr = () => {\n const br = SugarElement.fromTag('br');\n set$2(br, 'data-mce-bogus', '1');\n return br;\n };\n const fillWithPaddingBr = elm => {\n empty(elm);\n append$1(elm, createPaddingBr());\n };\n const trimBlockTrailingBr = elm => {\n lastChild(elm).each(lastChild => {\n prevSibling(lastChild).each(lastChildPrevSibling => {\n if (isBlock$2(elm) && isBr$5(lastChild) && isBlock$2(lastChildPrevSibling)) {\n remove$6(lastChild);\n }\n });\n });\n };\n\n const ZWSP$1 = zeroWidth;\n const isZwsp = isZwsp$1;\n const trim$1 = removeZwsp;\n\n const isElement$5 = isElement$6;\n const isText$9 = isText$a;\n const isCaretContainerBlock$1 = node => {\n if (isText$9(node)) {\n node = node.parentNode;\n }\n return isElement$5(node) && node.hasAttribute('data-mce-caret');\n };\n const isCaretContainerInline = node => isText$9(node) && isZwsp(node.data);\n const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n const insertInline$1 = (node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n const parentNode = node.parentNode;\n if (!before) {\n const sibling = node.nextSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer$1(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n }\n } else {\n const sibling = node.previousSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer$1(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n const isBeforeInline = pos => {\n const container = pos.container();\n if (!isText$a(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n const isAfterInline = pos => {\n const container = pos.container();\n if (!isText$a(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n const insertBlock = (blockName, node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createPaddingBr().dom);\n const parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n }\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n const trimBogusBr = elm => {\n var _a;\n const brs = elm.getElementsByTagName('br');\n const lastBr = brs[brs.length - 1];\n if (isBogus$2(lastBr)) {\n (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n }\n };\n const showCaretContainerBlock = caretContainer => {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('data-mce-style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n const isContentEditableTrue$2 = isContentEditableTrue$3;\n const isContentEditableFalse$9 = isContentEditableFalse$a;\n const isBr$4 = isBr$6;\n const isText$8 = isText$a;\n const isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n const isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isTable = matchNodeNames(['table']);\n const isCaretContainer$1 = isCaretContainer$2;\n const isCaretCandidate$3 = node => {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$8(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n };\n const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$9(node);\n const isInEditable = (node, root) => {\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (isNonUiContentEditableFalse(tempNode)) {\n return false;\n }\n if (isContentEditableTrue$2(tempNode)) {\n return true;\n }\n }\n return true;\n };\n const isAtomicContentEditableFalse = node => {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n return result || isContentEditableTrue$2(elm);\n }, false);\n };\n const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n const isNewLineChar = c => c === '\\n' || c === '\\r';\n const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n const tabSpace = repeat(' ', tabSpaces);\n const normalizedText = text.replace(/\\t/g, tabSpace);\n const result = foldl(normalizedText, (acc, c) => {\n if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n return {\n pcIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n pcIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n pcIsSpace: isNewLineChar(c),\n str: acc.str + c\n };\n }\n }, {\n pcIsSpace: false,\n str: ''\n });\n return result.str;\n };\n\n const hasWhitespacePreserveParent = (node, rootNode) => {\n const rootElement = SugarElement.fromDom(rootNode);\n const startNode = SugarElement.fromDom(node);\n return ancestor$1(startNode, 'pre,code', curry(eq, rootElement));\n };\n const isWhitespace$1 = (node, rootNode) => {\n return isText$a(node) && isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode);\n };\n const isNamedAnchor = node => {\n return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n const isContent$1 = (node, rootNode) => {\n return isCaretCandidate$3(node) && !isWhitespace$1(node, rootNode) || isNamedAnchor(node) || isBookmark(node);\n };\n const isBookmark = hasAttribute('data-mce-bookmark');\n const isBogus$1 = hasAttribute('data-mce-bogus');\n const isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n const isEmptyNode = (targetNode, skipBogus) => {\n let brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n let node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n const walker = new DomTreeWalker(node, targetNode);\n do {\n if (skipBogus) {\n if (isBogusAll(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$1(node)) {\n node = walker.next();\n continue;\n }\n }\n if (isBr$6(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent$1(node, targetNode)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n const isEmpty$2 = (elm, skipBogus = true) => isEmptyNode(elm.dom, skipBogus);\n\n const isSpan = node => node.nodeName.toLowerCase() === 'span';\n const isInlineContent = (node, root) => isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n const surroundedByInlineContent = (node, root) => {\n const prev = new DomTreeWalker(node, root).prev(false);\n const next = new DomTreeWalker(node, root).next(false);\n const prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n const nextIsInline = isUndefined(next) || isInlineContent(next, root);\n return prevIsInline && nextIsInline;\n };\n const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n const isKeepTextNode = (node, root) => isText$a(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n const trimNode = (dom, node, root) => {\n var _a;\n const rootNode = root || node;\n if (isElement$6(node) && isBookmarkNode$2(node)) {\n return node;\n }\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], rootNode);\n }\n if (isElement$6(node)) {\n const currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n dom.remove(node);\n }\n return node;\n };\n\n const makeMap$3 = Tools.makeMap;\n const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const rawCharsRegExp = /[<>&\\\"\\']/g;\n const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n const asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n const baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n const reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': `'`\n };\n const nativeDecode = text => {\n const elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n const buildEntitiesLookup = (items, radix) => {\n const lookup = {};\n if (items) {\n const itemList = items.split(',');\n radix = radix || 10;\n for (let i = 0; i < itemList.length; i += 2) {\n const chr = String.fromCharCode(parseInt(itemList[i], radix));\n if (!baseEntities[chr]) {\n const entity = '&' + itemList[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n } else {\n return undefined;\n }\n };\n const namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeNamed = (text, attr, entities) => {\n const resolveEntities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || resolveEntities[chr] || chr;\n });\n };\n const getEncodeFunc = (name, entities) => {\n const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeCustomNamed = (text, attr) => {\n return encodeNamed(text, attr, entitiesMap);\n };\n const nameMap = makeMap$3(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n const decode = text => text.replace(entityRegExp, (all, numeric) => {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n const Entities = {\n encodeRaw,\n encodeAllRaw,\n encodeNumeric,\n encodeNamed,\n getEncodeFunc,\n decode\n };\n\n const lookupCache = {};\n const mapCache = {};\n const dummyObj = {};\n const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode, inArray = Tools.inArray;\n const split$1 = (items, delim) => {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n const createMap = (defaultValue, extendWith = {}) => {\n const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n return extend$2(value, extendWith);\n };\n const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n const compileSchema = type => {\n const schema = {};\n let globalAttributes, blockContent;\n let phrasingContent, flowContent;\n const add = (name, attributes = '', children = '') => {\n const childNames = split$1(children);\n const names = split$1(name);\n let ni = names.length;\n while (ni--) {\n const attributesOrder = split$1([\n globalAttributes,\n attributes\n ].join(' '));\n schema[names[ni]] = {\n attributes: mapToObject(attributesOrder, () => ({})),\n attributesOrder,\n children: mapToObject(childNames, constant(dummyObj))\n };\n }\n };\n const addAttrs = (name, attributes) => {\n const names = split$1(name);\n const attrs = split$1(attributes);\n let ni = names.length;\n while (ni--) {\n const schemaItem = schema[names[ni]];\n for (let i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (lookupCache[type]) {\n return lookupCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$b(split$1(html4PhrasingContent), name => {\n add(name, '', phrasingContent);\n });\n const html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$b(split$1(html4BlockContent), name => {\n add(name, '', flowContent);\n });\n }\n flowContent = flowContent || [\n blockContent,\n phrasingContent\n ].join(' ');\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('address dt dd div caption', '', flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', phrasingContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp summary bdi', '', phrasingContent);\n add('canvas', 'width height', flowContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('img', 'loading');\n addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading');\n }\n if (type !== 'html4') {\n each$e([\n schema.video,\n schema.audio\n ], item => {\n delete item.children.audio;\n delete item.children.video;\n });\n }\n each$b(split$1('a form meter progress dfn'), name => {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n lookupCache[type] = schema;\n return schema;\n };\n const compileElementMap = (value, mode) => {\n if (value) {\n const styles = {};\n if (isString(value)) {\n value = { '*': value };\n }\n each$b(value, (value, key) => {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n });\n return styles;\n } else {\n return undefined;\n }\n };\n const Schema = (settings = {}) => {\n var _a;\n const elements = {};\n const children = {};\n let patternElements = [];\n const customElementsMap = {};\n const specialElements = {};\n const createLookupTable = (option, defaultValue, extendWith) => {\n const value = settings[option];\n if (!value) {\n let newValue = mapCache[option];\n if (!newValue) {\n newValue = createMap(defaultValue, extendWith);\n mapCache[option] = newValue;\n }\n return newValue;\n } else {\n return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n };\n const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n const schemaItems = compileSchema(schemaType);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n const validStyles = compileElementMap(settings.valid_styles);\n const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n const validClasses = compileElementMap(settings.valid_classes, 'map');\n const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', voidElementsMap);\n const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n const textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n const blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n const addValidElements = validElements => {\n const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n const hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n const validElementsArr = split$1(validElements, ',');\n let globalAttributes;\n let globalAttributesOrder;\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (let ei = 0, el = validElementsArr.length; ei < el; ei++) {\n let matches = elementRuleRegExp.exec(validElementsArr[ei]);\n if (matches) {\n const prefix = matches[1];\n const elementName = matches[2];\n const outputName = matches[3];\n const attrData = matches[5];\n const attributes = {};\n const attributesOrder = [];\n const element = {\n attributes,\n attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n each$d(globalAttributes, (value, key) => {\n attributes[key] = value;\n });\n if (globalAttributesOrder) {\n attributesOrder.push(...globalAttributesOrder);\n }\n }\n if (attrData) {\n const attrDatas = split$1(attrData, '|');\n for (let ai = 0, al = attrDatas.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrDatas[ai]);\n if (matches) {\n const attr = {};\n const attrType = matches[1];\n const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n const attrPrefix = matches[3];\n const value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray(attributesOrder, attrName), 1);\n continue;\n }\n if (attrPrefix) {\n if (attrPrefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value\n });\n attr.defaultValue = value;\n }\n if (attrPrefix === '~') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value\n });\n attr.forcedValue = value;\n }\n if (attrPrefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n const attrPattern = attr;\n element.attributePatterns = element.attributePatterns || [];\n attrPattern.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attrPattern);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n const patternElement = element;\n patternElement.pattern = patternToRegExp(elementName);\n patternElements.push(patternElement);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n const setValidElements = validElements => {\n patternElements = [];\n each$e(keys(elements), name => {\n delete elements[name];\n });\n addValidElements(validElements);\n each$b(schemaItems, (element, name) => {\n children[name] = element.children;\n });\n };\n const addCustomElements = customElements => {\n const customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n delete mapCache.text_block_elements;\n delete mapCache.block_elements;\n each$b(split$1(customElements, ','), rule => {\n const matches = customElementRegExp.exec(rule);\n if (matches) {\n const inline = matches[1] === '~';\n const cloneName = inline ? 'span' : 'div';\n const name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n nonEmptyElementsMap[name.toUpperCase()] = {};\n nonEmptyElementsMap[name] = {};\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n let customRule = elements[cloneName];\n customRule = extend$2({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$b(children, (element, elmName) => {\n if (element[cloneName]) {\n children[elmName] = element = extend$2({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n }\n });\n }\n };\n const addValidChildren = validChildren => {\n const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n delete lookupCache[schemaType];\n if (validChildren) {\n each$b(split$1(validChildren, ','), rule => {\n const matches = childRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n let parent;\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$b(split$1(matches[3], '|'), child => {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n const getElementRule = name => {\n const element = elements[name];\n if (element) {\n return element;\n }\n let i = patternElements.length;\n while (i--) {\n const patternElement = patternElements[i];\n if (patternElement.pattern.test(name)) {\n return patternElement;\n }\n }\n return undefined;\n };\n if (!settings.valid_elements) {\n each$b(schemaItems, (element, name) => {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n each$b(split$1('strong/b em/i'), item => {\n const items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n each$b(textInlineElementsMap, (_val, name) => {\n if (elements[name]) {\n if (settings.padd_empty_block_inline_children) {\n elements[name].paddInEmptyBlock = true;\n }\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('ol ul blockquote a table tbody'), name => {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), name => {\n elements[name].paddEmpty = true;\n });\n each$b(split$1('span'), name => {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n }\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$b({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, (parents, item) => {\n if (elements[item]) {\n elements[item].parentsRequired = split$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$b(explode$2(settings.invalid_elements), item => {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n const getValidStyles = constant(validStyles);\n const getInvalidStyles = constant(invalidStyles);\n const getValidClasses = constant(validClasses);\n const getBoolAttrs = constant(boolAttrMap);\n const getBlockElements = constant(blockElementsMap);\n const getTextBlockElements = constant(textBlockElementsMap);\n const getTextInlineElements = constant(textInlineElementsMap);\n const getVoidElements = constant(Object.seal(voidElementsMap));\n const getSelfClosingElements = constant(selfClosingElementsMap);\n const getNonEmptyElements = constant(nonEmptyElementsMap);\n const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n const getWhitespaceElements = constant(whitespaceElementsMap);\n const getSpecialElements = constant(Object.seal(specialElements));\n const isValidChild = (name, child) => {\n const parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n const isValid = (name, attr) => {\n const rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n const attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n let i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(attr)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n const getCustomElements = constant(customElementsMap);\n return {\n type: schemaType,\n children,\n elements,\n getValidStyles,\n getValidClasses,\n getBlockElements,\n getInvalidStyles,\n getVoidElements,\n getTextBlockElements,\n getTextInlineElements,\n getBoolAttrs,\n getElementRule,\n getSelfClosingElements,\n getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements,\n getWhitespaceElements,\n getSpecialElements,\n isValidChild,\n isValid,\n getCustomElements,\n addValidElements,\n setValidElements,\n addCustomElements,\n addValidChildren\n };\n };\n\n const Styles = (settings = {}, schema) => {\n const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n const trimRightRegExp = /\\s+$/;\n const encodingLookup = {};\n let validStyles;\n let invalidStyles;\n const invisibleChar = zeroWidth;\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n for (let i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n const self = {\n parse: css => {\n const styles = {};\n let isEncoded = false;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope || self;\n const compress = (prefix, suffix, noJoin) => {\n const top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n const right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n const bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n const left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n const box = [\n top,\n right,\n bottom,\n left\n ];\n let i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n const canCompress = key => {\n const value = styles[key];\n if (!value) {\n return;\n }\n const values = value.split(' ');\n let i = values.length;\n while (i--) {\n if (values[i] !== values[0]) {\n return false;\n }\n }\n styles[key] = values[0];\n return true;\n };\n const compress2 = (target, a, b, c) => {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n const encode = str => {\n isEncoded = true;\n return encodingLookup[str];\n };\n const decode = (str, keepSlashes) => {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, str => {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n const decodeSingleHexSequence = escSeq => {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n const decodeHexSequences = value => {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n const processUrl = (match, url, url2, url3, str, str2) => {\n str = str || str2;\n if (str) {\n str = decode(str);\n return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n }\n url = decode(url || url2 || url3 || '');\n if (!settings.allow_script_urls) {\n const scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return `url('` + url.replace(/\\'/g, `\\\\'`) + `')`;\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, str => {\n return str.replace(/[;:]/g, encode);\n });\n let matches;\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n let value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: (styles, elementName) => {\n let css = '';\n const serializeStyles = (elemName, validStyleList) => {\n const styleList = validStyleList[elemName];\n if (styleList) {\n for (let i = 0, l = styleList.length; i < l; i++) {\n const name = styleList[i];\n const value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n const isValid = (name, elemName) => {\n if (!invalidStyles || !elemName) {\n return true;\n }\n let styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elemName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*', validStyles);\n serializeStyles(elementName, validStyles);\n } else {\n each$d(styles, (value, name) => {\n if (value && isValid(name, elementName)) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n return self;\n };\n\n const deprecated = {\n keyLocation: true,\n layerX: true,\n layerY: true,\n returnValue: true,\n webkitMovementX: true,\n webkitMovementY: true,\n keyIdentifier: true,\n mozPressure: true\n };\n const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n const clone$3 = (originalEvent, data) => {\n const event = data !== null && data !== void 0 ? data : {};\n for (const name in originalEvent) {\n if (!has$2(deprecated, name)) {\n event[name] = originalEvent[name];\n }\n }\n if (isNonNullable(originalEvent.composedPath)) {\n event.composedPath = () => originalEvent.composedPath();\n }\n return event;\n };\n const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n var _a;\n const event = clone$3(originalEvent, data);\n event.type = type;\n if (isNullable(event.target)) {\n event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n }\n if (needsNormalizing(originalEvent)) {\n event.preventDefault = () => {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n }\n };\n event.stopPropagation = () => {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n }\n };\n event.stopImmediatePropagation = () => {\n event.isImmediatePropagationStopped = always;\n event.stopPropagation();\n };\n if (!hasIsDefaultPrevented(event)) {\n event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n event.isPropagationStopped = event.cancelBubble === true ? always : never;\n event.isImmediatePropagationStopped = never;\n }\n }\n return event;\n };\n\n const eventExpandoPrefix = 'mce-data-';\n const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n const addEvent = (target, name, callback, capture) => {\n target.addEventListener(name, callback, capture || false);\n };\n const removeEvent = (target, name, callback, capture) => {\n target.removeEventListener(name, callback, capture || false);\n };\n const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n const fix = (originalEvent, data) => {\n const event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n const eventDoc = event.target.ownerDocument || document;\n const doc = eventDoc.documentElement;\n const body = eventDoc.body;\n const mouseEvent = event;\n mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n return event;\n };\n const bindOnReady = (win, callback, eventUtils) => {\n const doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n const isDocReady = () => {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n const readyHandler = () => {\n removeEvent(win, 'DOMContentLoaded', readyHandler);\n removeEvent(win, 'load', readyHandler);\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n win = null;\n };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n if (!eventUtils.domLoaded) {\n addEvent(win, 'load', readyHandler);\n }\n };\n class EventUtils {\n constructor() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n bind(target, names, callback, scope) {\n const self = this;\n let callbackList;\n const win = window;\n const defaultNativeHandler = evt => {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || isText$a(target) || isComment(target)) {\n return callback;\n }\n let id;\n if (!target[self.expando]) {\n id = self.count++;\n target[self.expando] = id;\n self.events[id] = {};\n } else {\n id = target[self.expando];\n }\n scope = scope || target;\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n let name = namesList[i];\n let nativeHandler = defaultNativeHandler;\n let capture = false;\n let fakeName = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = evt => {\n const event = fix(evt || win.event);\n event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(event, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback(fix({ type: name }));\n } else {\n callbackList.push({\n func: callback,\n scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n }\n unbind(target, names, callback) {\n if (!target || isText$a(target) || isComment(target)) {\n return this;\n }\n const id = target[this.expando];\n if (id) {\n let eventMap = this.events[id];\n if (names) {\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n const name = namesList[i];\n const callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n let ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n const nativeHandler = callbackList.nativeHandler;\n const fakeName = callbackList.fakeName, capture = callbackList.capture;\n const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n newCallbackList.nativeHandler = nativeHandler;\n newCallbackList.fakeName = fakeName;\n newCallbackList.capture = capture;\n eventMap[name] = newCallbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n each$d(eventMap, (callbackList, name) => {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (const name in eventMap) {\n if (has$2(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n }\n fire(target, name, args) {\n return this.dispatch(target, name, args);\n }\n dispatch(target, name, args) {\n if (!target || isText$a(target) || isComment(target)) {\n return this;\n }\n const event = fix({\n type: name,\n target\n }, args);\n do {\n const id = target[this.expando];\n if (id) {\n this.executeHandlers(event, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !event.isPropagationStopped());\n return this;\n }\n clean(target) {\n if (!target || isText$a(target) || isComment(target)) {\n return this;\n }\n if (target[this.expando]) {\n this.unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n this.unbind(target);\n const children = target.getElementsByTagName('*');\n let i = children.length;\n while (i--) {\n target = children[i];\n if (target[this.expando]) {\n this.unbind(target);\n }\n }\n }\n return this;\n }\n destroy() {\n this.events = {};\n }\n cancel(e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n }\n executeHandlers(evt, id) {\n const container = this.events[id];\n const callbackList = container && container[evt.type];\n if (callbackList) {\n for (let i = 0, l = callbackList.length; i < l; i++) {\n const callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n }\n }\n EventUtils.Event = new EventUtils();\n\n const each$a = Tools.each;\n const grep = Tools.grep;\n const internalStyleName = 'data-mce-style';\n const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n const legacySetAttribute = (elm, name, value) => {\n if (isNullable(value) || value === '') {\n remove$b(elm, name);\n } else {\n set$2(elm, name, value);\n }\n };\n const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n const findNodeIndex = (node, normalized) => {\n let idx = 0;\n if (node) {\n for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n const nodeType = tempNode.nodeType;\n if (normalized && isText$a(tempNode)) {\n if (nodeType === lastNodeType || !tempNode.data.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n const updateInternalStyleAttr = (styles, elm) => {\n const rawValue = get$9(elm, 'style');\n const value = styles.serialize(styles.parse(rawValue), name(elm));\n legacySetAttribute(elm, internalStyleName, value);\n };\n const convertStyleToString = (cssValue, cssName) => {\n if (isNumber(cssValue)) {\n return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n } else {\n return cssValue;\n }\n };\n const applyStyle$1 = ($elm, cssName, cssValue) => {\n const normalizedName = camelCaseToHyphens(cssName);\n if (isNullable(cssValue) || cssValue === '') {\n remove$7($elm, normalizedName);\n } else {\n set$1($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n }\n };\n const setupAttrHooks = (styles, settings, getContext) => {\n const keepValues = settings.keep_values;\n const keepUrlHook = {\n set: (elm, value, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (isFunction(settings.url_converter) && isNonNullable(value)) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n }\n const internalName = 'data-mce-' + name;\n legacySetAttribute(sugarElm, internalName, value);\n legacySetAttribute(sugarElm, name, value);\n },\n get: (elm, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n }\n };\n const attrHooks = {\n style: {\n set: (elm, value) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (keepValues) {\n legacySetAttribute(sugarElm, internalStyleName, value);\n }\n remove$b(sugarElm, 'style');\n if (isString(value)) {\n setAll(sugarElm, styles.parse(value));\n }\n },\n get: elm => {\n const sugarElm = SugarElement.fromDom(elm);\n const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n return styles.serialize(styles.parse(value), name(sugarElm));\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n const DOMUtils = (doc, settings = {}) => {\n const addedStyles = {};\n const win = window;\n const files = {};\n let counter = 0;\n const stdMode = true;\n const boxModel = true;\n const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n const boundEvents = [];\n const schema = settings.schema ? settings.schema : Schema({});\n const styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n const blockElementsMap = schema.getBlockElements();\n const isBlock = node => {\n if (isString(node)) {\n return has$2(blockElementsMap, node);\n } else {\n return isElement$6(node) && has$2(blockElementsMap, node.nodeName);\n }\n };\n const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n const _get = elm => {\n const value = get(elm);\n return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n };\n const getAttrib = (elm, name, defaultVal = '') => {\n let value;\n const $elm = _get(elm);\n if (isNonNullable($elm) && isElement$7($elm)) {\n const hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm.dom, name);\n } else {\n value = get$9($elm, name);\n }\n }\n return isNonNullable(value) ? value : defaultVal;\n };\n const getAttribs = elm => {\n const node = get(elm);\n return isNullable(node) ? [] : node.attributes;\n };\n const setAttrib = (elm, name, value) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const val = value === '' ? null : value;\n const originalValue = get$9($elm, name);\n const hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm.dom, val, name);\n } else {\n legacySetAttribute($elm, name, val);\n }\n if (originalValue !== val && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm.dom,\n attrName: name,\n attrValue: val\n });\n }\n }\n });\n };\n const clone = (node, deep) => {\n return node.cloneNode(deep);\n };\n const getRoot = () => settings.root_element || doc.body;\n const getViewPort = argWin => {\n const vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n const setStyle = (elm, name, value) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n applyStyle$1($elm, name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const setStyles = (elm, stylesArg) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n each$d(stylesArg, (v, n) => {\n applyStyle$1($elm, n, v);\n });\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const getStyle = (elm, name, computed) => {\n const $elm = get(elm);\n if (isNullable($elm) || !isElement$6($elm)) {\n return undefined;\n }\n if (computed) {\n return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n } else {\n name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n if (name === 'float') {\n name = 'cssFloat';\n }\n return $elm.style ? $elm.style[name] : undefined;\n }\n };\n const getSize = elm => {\n const $elm = get(elm);\n if (!$elm) {\n return {\n w: 0,\n h: 0\n };\n }\n let w = getStyle($elm, 'width');\n let h = getStyle($elm, 'height');\n if (!w || w.indexOf('px') === -1) {\n w = '0';\n }\n if (!h || h.indexOf('px') === -1) {\n h = '0';\n }\n return {\n w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n h: parseInt(h, 10) || $elm.offsetHeight || $elm.clientHeight\n };\n };\n const getRect = elm => {\n const $elm = get(elm);\n const pos = getPos$1($elm);\n const size = getSize($elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n const is = (elm, selector) => {\n if (!elm) {\n return false;\n }\n const elms = isArray$1(elm) ? elm : [elm];\n return exists(elms, e => {\n return is$1(SugarElement.fromDom(e), selector);\n });\n };\n const getParents = (elm, selector, root, collect) => {\n const result = [];\n let node = get(elm);\n collect = collect === undefined;\n const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (isString(selector)) {\n if (selector === '*') {\n selector = isElement$6;\n } else {\n const selectorVal = selector;\n selector = node => is(node, selectorVal);\n }\n }\n while (node) {\n if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n const getParent = (node, selector, root) => {\n const parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n const _findSib = (node, selector, name) => {\n let func = selector;\n if (node) {\n if (isString(selector)) {\n func = node => {\n return is(node, selector);\n };\n }\n for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n if (isFunction(func) && func(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n const isParentNode = node => isFunction(node.querySelectorAll);\n const select = (selector, scope) => {\n var _a, _b;\n const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n };\n const run = function (elm, func, scope) {\n const context = scope !== null && scope !== void 0 ? scope : this;\n if (isArray$1(elm)) {\n const result = [];\n each$a(elm, (e, i) => {\n const node = get(e);\n if (node) {\n result.push(func.call(context, node, i));\n }\n });\n return result;\n } else {\n const node = get(elm);\n return !node ? false : func.call(context, node);\n }\n };\n const setAttribs = (elm, attrs) => {\n run(elm, $elm => {\n each$d(attrs, (value, name) => {\n setAttrib($elm, name, value);\n });\n });\n };\n const setHTML = (elm, html) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n set($elm, html);\n });\n };\n const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n const newElm = isString(name) ? doc.createElement(name) : name;\n if (isNonNullable(attrs)) {\n setAttribs(newElm, attrs);\n }\n if (html) {\n if (!isString(html) && html.nodeType) {\n newElm.appendChild(html);\n } else if (isString(html)) {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n const decode = Entities.decode;\n const encode = Entities.encodeAllRaw;\n const createHTML = (name, attrs, html = '') => {\n let outHtml = '<' + name;\n for (const key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n return outHtml + ' />';\n } else {\n return outHtml + '>' + html + '';\n }\n };\n const createFragment = html => {\n const container = doc.createElement('div');\n const frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n let node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n const remove = (node, keepChildren) => {\n return run(node, n => {\n const $node = SugarElement.fromDom(n);\n if (keepChildren) {\n each$e(children($node), child => {\n if (isText$b(child) && child.dom.length === 0) {\n remove$6(child);\n } else {\n before$3($node, child);\n }\n });\n }\n remove$6($node);\n return $node.dom;\n });\n };\n const removeAllAttribs = e => run(e, e => {\n const attrs = e.attributes;\n for (let i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n const parseStyle = cssText => styles.parse(cssText);\n const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n const addStyle = cssText => {\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n let styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n const head = doc.head;\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n const loadCSS = urls => {\n if (!urls) {\n urls = '';\n }\n each$e(urls.split(','), url => {\n files[url] = true;\n styleSheetLoader.load(url).catch(noop);\n });\n };\n const toggleClass = (elm, cls, state) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const classes = cls.split(' ');\n each$e(classes, c => {\n if (isNonNullable(state)) {\n const fn = state ? add$2 : remove$8;\n fn($elm, c);\n } else {\n toggle$1($elm, c);\n }\n });\n }\n });\n };\n const addClass = (elm, cls) => {\n toggleClass(elm, cls, true);\n };\n const removeClass = (elm, cls) => {\n toggleClass(elm, cls, false);\n };\n const hasClass = (elm, cls) => {\n const $elm = _get(elm);\n const classes = cls.split(' ');\n return isNonNullable($elm) && forall(classes, c => has($elm, c));\n };\n const show = elm => {\n run(elm, e => remove$7(SugarElement.fromDom(e), 'display'));\n };\n const hide = elm => {\n run(elm, e => set$1(SugarElement.fromDom(e), 'display', 'none'));\n };\n const isHidden = elm => {\n const $elm = _get(elm);\n return isNonNullable($elm) && is$2(getRaw$1($elm, 'display'), 'none');\n };\n const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n const getOuterHTML = elm => {\n const $elm = _get(elm);\n if (isNonNullable($elm)) {\n return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n } else {\n return '';\n }\n };\n const setOuterHTML = (elm, html) => {\n run(elm, $elm => {\n if (isElement$6($elm)) {\n $elm.outerHTML = html;\n }\n });\n };\n const insertAfter = (node, reference) => {\n const referenceNode = get(reference);\n return run(node, node => {\n const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n if (parent) {\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n }\n return node;\n });\n };\n const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n var _a;\n const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n if (keepChildren) {\n each$a(grep(elm.childNodes), node => {\n replacee.appendChild(node);\n });\n }\n (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n return elm;\n });\n const rename = (elm, name) => {\n if (elm.nodeName !== name.toUpperCase()) {\n const newElm = create(name);\n each$a(getAttribs(elm), attrNode => {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n return newElm;\n } else {\n return elm;\n }\n };\n const findCommonAncestor = (a, b) => {\n let ps = a;\n while (ps) {\n let pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n } else {\n return ps;\n }\n };\n const isNonEmptyElement = node => {\n if (isElement$6(node)) {\n const isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n return true;\n }\n }\n return false;\n };\n const isEmpty = (node, elements) => {\n let brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n const firstChild = node.firstChild;\n if (firstChild) {\n const walker = new DomTreeWalker(firstChild, node);\n const whitespaceElements = schema ? schema.getWhitespaceElements() : {};\n const nonEmptyElements = elements || (schema ? schema.getNonEmptyElements() : null);\n let tempNode = firstChild;\n do {\n if (isElement$6(tempNode)) {\n const bogusVal = tempNode.getAttribute('data-mce-bogus');\n if (bogusVal) {\n tempNode = walker.next(bogusVal === 'all');\n continue;\n }\n const name = tempNode.nodeName.toLowerCase();\n if (nonEmptyElements && nonEmptyElements[name]) {\n if (name === 'br') {\n brCount++;\n tempNode = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(tempNode)) {\n return false;\n }\n }\n if (isComment(tempNode)) {\n return false;\n }\n if (isText$a(tempNode) && !isWhitespaceText(tempNode.data)) {\n return false;\n }\n if (isText$a(tempNode) && tempNode.parentNode && whitespaceElements[tempNode.parentNode.nodeName] && isWhitespaceText(tempNode.data)) {\n return false;\n }\n tempNode = walker.next();\n } while (tempNode);\n }\n return brCount <= 1;\n };\n const createRng = () => doc.createRange();\n const split = (parentElm, splitElm, replacementElm) => {\n let range = createRng();\n let beforeFragment;\n let afterFragment;\n if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n const parentNode = parentElm.parentNode;\n range.setStart(parentNode, findNodeIndex(parentElm));\n range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n beforeFragment = range.extractContents();\n range = createRng();\n range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n range.setEnd(parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n } else {\n return undefined;\n }\n };\n const bind = (target, name, func, scope) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n } else {\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n }\n };\n const unbind = (target, name, func) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\n } else {\n if (boundEvents.length > 0 && (target === doc || target === win)) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n const fire = (target, name, evt) => events.dispatch(target, name, evt);\n const getContentEditable = node => {\n if (node && isElement$6(node)) {\n const contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n const getContentEditableParent = node => {\n const root = getRoot();\n let state = null;\n for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n state = getContentEditable(tempNode);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n const destroy = () => {\n if (boundEvents.length > 0) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n each$d(files, (_, url) => {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n };\n const isChildOf = (node, parent) => {\n return node === parent || parent.contains(node);\n };\n const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n const self = {\n doc,\n settings,\n win,\n files,\n stdMode,\n boxModel,\n styleSheetLoader,\n boundEvents,\n styles,\n schema,\n events,\n isBlock: isBlock,\n root: null,\n clone,\n getRoot,\n getViewPort,\n getRect,\n getSize,\n getParent,\n getParents: getParents,\n get,\n getNext,\n getPrev,\n select,\n is,\n add,\n create,\n createHTML,\n createFragment,\n remove,\n setStyle,\n getStyle: getStyle,\n setStyles,\n removeAllAttribs,\n setAttrib,\n setAttribs,\n getAttrib,\n getPos: getPos$1,\n parseStyle,\n serializeStyle,\n addStyle,\n loadCSS,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n show,\n hide,\n isHidden,\n uniqueId,\n setHTML,\n getOuterHTML,\n setOuterHTML,\n decode,\n encode,\n insertAfter,\n replace,\n rename,\n findCommonAncestor,\n run,\n getAttribs,\n isEmpty,\n createRng,\n nodeIndex: findNodeIndex,\n split,\n bind: bind,\n unbind: unbind,\n fire,\n dispatch,\n getContentEditable,\n getContentEditableParent,\n destroy,\n isChildOf,\n dumpRng\n };\n const attrHooks = setupAttrHooks(styles, settings, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n const DOM$b = DOMUtils.DOM;\n const QUEUED = 0;\n const LOADING = 1;\n const LOADED = 2;\n const FAILED = 3;\n class ScriptLoader {\n constructor(settings = {}) {\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = false;\n this.settings = settings;\n }\n _setReferrerPolicy(referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n }\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const dom = DOM$b;\n let elm;\n const cleanup = () => {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n const done = () => {\n cleanup();\n resolve();\n };\n const error = () => {\n cleanup();\n reject('Failed to load script: ' + url);\n };\n const id = dom.uniqueId();\n elm = document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n if (this.settings.referrerPolicy) {\n dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n }\n elm.onload = done;\n elm.onerror = error;\n (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n });\n }\n isDone(url) {\n return this.states[url] === LOADED;\n }\n markDone(url) {\n this.states[url] = LOADED;\n }\n add(url) {\n const self = this;\n self.queue.push(url);\n const state = self.states[url];\n if (state === undefined) {\n self.states[url] = QUEUED;\n }\n return new Promise((resolve, reject) => {\n if (!self.scriptLoadedCallbacks[url]) {\n self.scriptLoadedCallbacks[url] = [];\n }\n self.scriptLoadedCallbacks[url].push({\n resolve,\n reject\n });\n });\n }\n load(url) {\n return this.add(url);\n }\n remove(url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n }\n loadQueue() {\n const queue = this.queue;\n this.queue = [];\n return this.loadScripts(queue);\n }\n loadScripts(scripts) {\n const self = this;\n const execCallbacks = (name, url) => {\n get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n each$e(callbacks, callback => callback[name](url));\n });\n delete self.scriptLoadedCallbacks[url];\n };\n const processResults = results => {\n const failures = filter$5(results, result => result.status === 'rejected');\n if (failures.length > 0) {\n return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n } else {\n return Promise.resolve();\n }\n };\n const load = urls => Promise.allSettled(map$3(urls, url => {\n if (self.states[url] === LOADED) {\n execCallbacks('resolve', url);\n return Promise.resolve();\n } else if (self.states[url] === FAILED) {\n execCallbacks('reject', url);\n return Promise.reject(url);\n } else {\n self.states[url] = LOADING;\n return self.loadScript(url).then(() => {\n self.states[url] = LOADED;\n execCallbacks('resolve', url);\n const queue = self.queue;\n if (queue.length > 0) {\n self.queue = [];\n return load(queue).then(processResults);\n } else {\n return Promise.resolve();\n }\n }, () => {\n self.states[url] = FAILED;\n execCallbacks('reject', url);\n return Promise.reject(url);\n });\n }\n }));\n const processQueue = urls => {\n self.loading = true;\n return load(urls).then(results => {\n self.loading = false;\n const nextQueuedItem = self.queueLoadedCallbacks.shift();\n Optional.from(nextQueuedItem).each(call);\n return processResults(results);\n });\n };\n const uniqueScripts = stringArray(scripts);\n if (self.loading) {\n return new Promise((resolve, reject) => {\n self.queueLoadedCallbacks.push(() => processQueue(uniqueScripts).then(resolve, reject));\n });\n } else {\n return processQueue(uniqueScripts);\n }\n }\n }\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const isRaw = str => isObject(str) && has$2(str, 'raw');\n const isTokenised = str => isArray$1(str) && str.length > 1;\n const data = {};\n const currentCode = Cell('en');\n const getLanguageData = () => get$a(data, currentCode.get());\n const getData$1 = () => map$2(data, value => ({ ...value }));\n const setCode = newCode => {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n const getCode = () => currentCode.get();\n const add$1 = (code, items) => {\n let langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$d(items, (translation, name) => {\n langData[name.toLowerCase()] = translation;\n });\n };\n const translate = text => {\n const langData = getLanguageData().getOr({});\n const toString = obj => {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n const isEmpty = text => text === '' || text === null || text === undefined;\n const getLangData = text => {\n const textstr = toString(text);\n return get$a(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n const removeContext = str => str.replace(/{context:\\w+}$/, '');\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n const values = text.slice(1);\n const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n const hasCode = code => has$2(data, code);\n const I18n = {\n getData: getData$1,\n setCode,\n getCode,\n add: add$1,\n translate,\n isRtl: isRtl$1,\n hasCode\n };\n\n const AddOnManager = () => {\n const items = [];\n const urls = {};\n const lookup = {};\n const _listeners = [];\n const runListeners = (name, state) => {\n const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n each$e(matchedListeners, listener => listener.resolve());\n };\n const isLoaded = name => has$2(urls, name);\n const isAdded = name => has$2(lookup, name);\n const get = name => {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n const loadLanguagePack = (name, languages) => {\n const language = I18n.getCode();\n const wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n };\n const requireLangPack = (name, languages) => {\n if (AddOnManager.languageLoad !== false) {\n if (isLoaded(name)) {\n loadLanguagePack(name, languages);\n } else {\n waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n }\n }\n };\n const add = (id, addOn) => {\n items.push(addOn);\n lookup[id] = { instance: addOn };\n runListeners(id, 'added');\n return addOn;\n };\n const remove = name => {\n delete urls[name];\n delete lookup[name];\n };\n const createUrl = (baseUrl, dep) => {\n if (isString(dep)) {\n return isString(baseUrl) ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n } else {\n return dep;\n }\n };\n const load = (name, addOnUrl) => {\n if (urls[name]) {\n return Promise.resolve();\n }\n let urlString = isString(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n const done = () => {\n runListeners(name, 'loaded');\n return Promise.resolve();\n };\n if (lookup[name]) {\n return done();\n } else {\n return ScriptLoader.ScriptLoader.add(urlString).then(done);\n }\n };\n const waitFor = (name, state = 'added') => {\n if (state === 'added' && isAdded(name)) {\n return Promise.resolve();\n } else if (state === 'loaded' && isLoaded(name)) {\n return Promise.resolve();\n } else {\n return new Promise(resolve => {\n _listeners.push({\n name,\n state,\n resolve\n });\n });\n }\n };\n return {\n items,\n urls,\n lookup,\n get,\n requireLangPack,\n add,\n remove,\n createUrl,\n load,\n waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n AddOnManager.ModelManager = AddOnManager();\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const repeatable = delay => {\n const intervalId = Cell(Optional.none());\n const revoke = () => intervalId.get().each(id => clearInterval(id));\n const clear = () => {\n revoke();\n intervalId.set(Optional.none());\n };\n const isSet = () => intervalId.get().isSome();\n const get = () => intervalId.get();\n const set = functionToRepeat => {\n revoke();\n intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value$2 = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const first$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const annotation = constant('mce-annotation');\n const dataAnnotation = constant('data-mce-annotation');\n const dataAnnotationId = constant('data-mce-annotation-uid');\n const dataAnnotationActive = constant('data-mce-annotation-active');\n const dataAnnotationClasses = constant('data-mce-annotation-classes');\n const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n const isRoot$1 = root => node => eq(node, root);\n const identify = (editor, annotationName) => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const root = SugarElement.fromDom(editor.getBody());\n const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n const newStart = child$1(start, rng.startOffset).getOr(start);\n const closest = closest$3(newStart, selector, isRoot$1(root));\n return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n const elements = findMarkers(editor, uid);\n return {\n uid,\n name,\n elements\n };\n })));\n };\n const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$1(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n const findMarkers = (editor, uid) => {\n const body = SugarElement.fromDom(editor.getBody());\n const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n };\n const findAll = (editor, name) => {\n const body = SugarElement.fromDom(editor.getBody());\n const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n const directory = {};\n each$e(markers, m => {\n if (!isBogusElement(m, body)) {\n const uid = get$9(m, dataAnnotationId());\n const nodesAlready = get$a(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n }\n });\n return directory;\n };\n\n const setup$x = (editor, registry) => {\n const changeCallbacks = Cell({});\n const initData = () => ({\n listeners: [],\n previous: value$2()\n });\n const withCallbacks = (name, f) => {\n updateCallbacks(name, data => {\n f(data);\n return data;\n });\n };\n const updateCallbacks = (name, f) => {\n const callbackMap = changeCallbacks.get();\n const data = get$a(callbackMap, name).getOrThunk(initData);\n const outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n const fireCallbacks = (name, uid, elements) => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(true, name, {\n uid,\n nodes: map$3(elements, elem => elem.dom)\n }));\n });\n };\n const fireNoAnnotation = name => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(false, name));\n });\n };\n const toggleActiveAttr = (uid, state) => {\n each$e(findMarkers(editor, uid), elem => {\n if (state) {\n set$2(elem, dataAnnotationActive(), 'true');\n } else {\n remove$b(elem, dataAnnotationActive());\n }\n });\n };\n const onNodeChange = last$1(() => {\n const annotations = sort(registry.getNames());\n each$e(annotations, name => {\n updateCallbacks(name, data => {\n const prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(() => {\n prev.each(uid => {\n fireNoAnnotation(name);\n data.previous.clear();\n toggleActiveAttr(uid, false);\n });\n }, ({uid, name, elements}) => {\n if (!is$2(prev, uid)) {\n prev.each(uid => toggleActiveAttr(uid, false));\n fireCallbacks(name, uid, elements);\n data.previous.set(uid);\n toggleActiveAttr(uid, true);\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', () => {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', () => {\n onNodeChange.throttle();\n });\n const addListener = (name, f) => {\n updateCallbacks(name, data => ({\n previous: data.previous,\n listeners: data.listeners.concat([f])\n }));\n };\n return { addListener };\n };\n\n const setup$w = (editor, registry) => {\n const dataAnnotation$1 = dataAnnotation();\n const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n const removeDirectAnnotation = node => {\n var _a, _b;\n node.attr(dataAnnotationId(), null);\n node.attr(dataAnnotation(), null);\n node.attr(dataAnnotationActive(), null);\n const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => node.attr(name, null));\n const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n const newClassList = difference(classList, [annotation()].concat(customClasses));\n node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n node.attr(dataAnnotationClasses(), null);\n node.attr(dataAnnotationAttributes(), null);\n };\n editor.serializer.addTempAttr(dataAnnotationActive());\n editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n for (const node of nodes) {\n identifyParserNode(node).each(settings => {\n if (settings.persistent === false) {\n if (node.name === 'span') {\n node.unwrap();\n } else {\n removeDirectAnnotation(node);\n }\n }\n });\n }\n });\n };\n\n const create$c = () => {\n const annotations = {};\n const register = (name, settings) => {\n annotations[name] = {\n name,\n settings\n };\n };\n const lookup = name => get$a(annotations, name).map(a => a.settings);\n const getNames = () => keys(annotations);\n return {\n register,\n lookup,\n getNames\n };\n };\n\n let unique = 0;\n const generate$1 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n const add = (element, classes) => {\n each$e(classes, x => {\n add$2(element, x);\n });\n };\n const remove$5 = (element, classes) => {\n each$e(classes, x => {\n remove$8(element, x);\n });\n };\n\n const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow$1 = original => clone$2(original, false);\n const deep$1 = original => clone$2(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$4(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$4(original, nu);\n const children$1 = children(original);\n append(nu, children$1);\n remove$6(original);\n return nu;\n };\n\n const TextWalker = (startNode, rootNode, isBoundary = never) => {\n const walker = new DomTreeWalker(startNode, rootNode);\n const walk = direction => {\n let next;\n do {\n next = walker[direction]();\n } while (next && !isText$a(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$a);\n };\n return {\n current: () => Optional.from(walker.current()).filter(isText$a),\n next: () => walk('next'),\n prev: () => walk('prev'),\n prev2: () => walk('prev2')\n };\n };\n\n const TextSeeker = (dom, isBoundary) => {\n const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$a(node);\n const walk = (node, offset, walker, process) => {\n if (isText$a(node)) {\n const newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Optional.some({\n container: node,\n offset: newOffset\n });\n }\n }\n return walker().bind(next => walk(next.container, next.offset, walker, process));\n };\n const backwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.prev().map(prev => ({\n container: prev,\n offset: prev.length\n })), process).getOrNull();\n };\n const forwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.next().map(next => ({\n container: next,\n offset: 0\n })), process).getOrNull();\n };\n return {\n backwards,\n forwards\n };\n };\n\n const round$2 = Math.round;\n const clone$1 = rect => {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round$2(rect.left),\n top: round$2(rect.top),\n bottom: round$2(rect.bottom),\n right: round$2(rect.right),\n width: round$2(rect.width),\n height: round$2(rect.height)\n };\n };\n const collapse = (rect, toStart) => {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n const isAbove$1 = (rect1, rect2) => {\n const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n const isBelow$1 = (rect1, rect2) => {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n const boundingClientRectFromRects = rects => {\n return foldl(rects, (acc, rect) => {\n return acc.fold(() => Optional.some(rect), prevRect => {\n const left = Math.min(rect.left, prevRect.left);\n const top = Math.min(rect.top, prevRect.top);\n const right = Math.max(rect.right, prevRect.right);\n const bottom = Math.max(rect.bottom, prevRect.bottom);\n return Optional.some({\n top,\n right,\n bottom,\n left,\n width: right - left,\n height: bottom - top\n });\n });\n }, Optional.none());\n };\n const distanceToRectEdgeFromXY = (rect, x, y) => {\n const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n };\n const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n\n const getSelectedNode = range => {\n const startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n const getNode$1 = (container, offset) => {\n if (isElement$6(container) && container.hasChildNodes()) {\n const childNodes = container.childNodes;\n const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n const getNodeUnsafe = (container, offset) => {\n if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n const extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n const or = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n const and = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n const isElement$4 = isElement$6;\n const isCaretCandidate$2 = isCaretCandidate$3;\n const isBlock$1 = matchStyleValues('display', 'block table');\n const isFloated = matchStyleValues('float', 'left right');\n const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n const isText$7 = isText$a;\n const isBr$3 = isBr$6;\n const nodeIndex$1 = DOMUtils.nodeIndex;\n const resolveIndex$1 = getNodeUnsafe;\n const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n const isRange = rng => !!rng.setStart && !!rng.setEnd;\n const isHiddenWhiteSpaceRange = range => {\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$a(container)) {\n const text = container.data;\n if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n const getBrClientRect = brNode => {\n const doc = brNode.ownerDocument;\n const rng = createRange$1(doc);\n const nbsp$1 = doc.createTextNode(nbsp);\n const parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n const clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n const getBoundingClientRectWebKitText = rng => {\n const sc = rng.startContainer;\n const ec = rng.endContainer;\n const so = rng.startOffset;\n const eo = rng.endOffset;\n if (sc === ec && isText$a(ec) && so === 0 && eo === 1) {\n const newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(newRng);\n } else {\n return null;\n }\n };\n const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n const getBoundingClientRect$1 = item => {\n var _a;\n let clientRect;\n const clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n }\n return clientRect;\n };\n const collapseAndInflateWidth = (clientRect, toStart) => {\n const newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n const getCaretPositionClientRects = caretPosition => {\n const clientRects = [];\n const addUniqueAndValidRect = clientRect => {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n const addCharacterOffset = (container, offset) => {\n const range = createRange$1(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n return;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n }\n }\n };\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (isText$7(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$4(container)) {\n if (caretPosition.isAtEnd()) {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n const CaretPosition = (container, offset, clientRects) => {\n const isAtStart = () => {\n if (isText$7(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n const isAtEnd = () => {\n if (isText$7(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n const toRange = () => {\n const range = createRange$1(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n const getClientRects = () => {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n const isVisible = () => getClientRects().length > 0;\n const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n return {\n container: constant(container),\n offset: constant(offset),\n toRange,\n getClientRects,\n isVisible,\n isAtStart,\n isAtEnd,\n isEqual,\n getNode\n };\n };\n CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$3(pos1.getClientRects()), isAbove$1).getOr(false);\n CaretPosition.isBelow = (pos1, pos2) => lift2(last$3(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n CaretPosition.isTextPosition = pos => pos ? isText$a(pos.container()) : false;\n CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n const trimEmptyTextNode$1 = (dom, node) => {\n if (isText$a(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const insertNode = (dom, rng, node) => {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n const insertFragment = (dom, rng, frag) => {\n const firstChild = Optional.from(frag.firstChild);\n const lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n };\n const rangeInsertNode = (dom, rng, node) => {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n const isText$6 = isText$a;\n const isBogus = isBogus$2;\n const nodeIndex = DOMUtils.nodeIndex;\n const normalizedParent = node => {\n const parentNode = node.parentNode;\n if (isBogus(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n const getChildNodes = node => {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, (result, node) => {\n if (isBogus(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n const normalizedTextOffset = (node, offset) => {\n let tempNode = node;\n while (tempNode = tempNode.previousSibling) {\n if (!isText$6(tempNode)) {\n break;\n }\n offset += tempNode.data.length;\n }\n return offset;\n };\n const equal = a => b => a === b;\n const normalizedNodeIndex = node => {\n let nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n const numTextFragments = reduce(nodes, (result, node, i) => {\n if (isText$6(node) && isText$6(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal(node), node);\n return index - numTextFragments;\n };\n const createPathItem = node => {\n const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n const parentsUntil$1 = (root, node, predicate) => {\n const parents = [];\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (predicate && predicate(tempNode)) {\n break;\n }\n parents.push(tempNode);\n }\n return parents;\n };\n const create$b = (root, caretPosition) => {\n let path = [];\n let container = caretPosition.container();\n let offset = caretPosition.offset();\n let outputOffset;\n if (isText$6(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n const childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n let parents = parentsUntil$1(root, container);\n parents = filter$3(parents, not(isBogus$2));\n path = path.concat(map$1(parents, node => {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n const resolvePathItem = (node, name, index) => {\n let nodes = getChildNodes(node);\n nodes = filter$3(nodes, (node, index) => {\n return !isText$6(node) || !isText$6(nodes[index - 1]);\n });\n nodes = filter$3(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n const findTextPosition = (container, offset) => {\n let node = container;\n let targetOffset = 0;\n while (isText$6(node)) {\n const dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$6(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$6(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n const resolve$1 = (root, path) => {\n if (!path) {\n return null;\n }\n const parts = path.split(',');\n const paths = parts[0].split('/');\n const offset = parts.length > 1 ? parts[1] : 'before';\n const container = reduce(paths, (result, value) => {\n const match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!match) {\n return null;\n }\n if (match[1] === 'text()') {\n match[1] = '#text';\n }\n return resolvePathItem(result, match[1], parseInt(match[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$6(container) && container.parentNode) {\n let nodeOffset;\n if (offset === 'after') {\n nodeOffset = nodeIndex(container) + 1;\n } else {\n nodeOffset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, nodeOffset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n const isContentEditableFalse$8 = isContentEditableFalse$a;\n const getNormalizedTextOffset$1 = (trim, container, offset) => {\n let trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (let node = container.previousSibling; node && isText$a(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n const getPoint = (dom, trim, normalized, rng, start) => {\n const container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const point = [];\n const root = dom.getRoot();\n if (isText$a(container)) {\n point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n } else {\n let after = 0;\n const childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (let node = container; node && node !== root; node = node.parentNode) {\n point.push(dom.nodeIndex(node, normalized));\n }\n return point;\n };\n const getLocation = (trim, selection, normalized, rng) => {\n const dom = selection.dom;\n const start = getPoint(dom, trim, normalized, rng, true);\n const forward = selection.isForward();\n const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n if (!selection.isCollapsed()) {\n const end = getPoint(dom, trim, normalized, rng, false);\n return {\n start,\n end,\n forward,\n ...fakeCaret\n };\n } else {\n return {\n start,\n forward,\n ...fakeCaret\n };\n }\n };\n const findIndex = (dom, name, element) => {\n let count = 0;\n Tools.each(dom.select(name), node => {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n } else if (node === element) {\n return false;\n } else {\n count++;\n return;\n }\n });\n return count;\n };\n const moveEndPoint$1 = (rng, start) => {\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n if (isElement$6(container) && container.nodeName === 'TR') {\n const childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n if (start) {\n rng.setStart(container, offset);\n } else {\n rng.setEnd(container, offset);\n }\n }\n }\n };\n const normalizeTableCellSelection = rng => {\n moveEndPoint$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n const findSibling = (node, offset) => {\n if (isElement$6(node)) {\n node = getNode$1(node, offset);\n if (isContentEditableFalse$8(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$a(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n let sibling = node.previousSibling;\n if (isContentEditableFalse$8(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$8(sibling)) {\n return sibling;\n }\n }\n return undefined;\n };\n const findAdjacentContentEditableFalseElm = rng => {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n const getOffsetBookmark = (trim, normalized, selection) => {\n const element = selection.getNode();\n const rng = selection.getRng();\n if (element.nodeName === 'IMG' || isContentEditableFalse$8(element)) {\n const name = element.nodeName;\n return {\n name,\n index: findIndex(selection.dom, name, element)\n };\n }\n const sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n const name = sibling.tagName;\n return {\n name,\n index: findIndex(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n const getCaretBookmark = selection => {\n const rng = selection.getRng();\n return {\n start: create$b(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$b(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n forward: selection.isForward()\n };\n };\n const getRangeBookmark = selection => {\n return {\n rng: selection.getRng(),\n forward: selection.isForward()\n };\n };\n const createBookmarkSpan = (dom, id, filled) => {\n const args = {\n 'data-mce-type': 'bookmark',\n id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n const getPersistentBookmark = (selection, filled) => {\n const dom = selection.dom;\n let rng = selection.getRng();\n const id = dom.uniqueId();\n const collapsed = selection.isCollapsed();\n const element = selection.getNode();\n const name = element.nodeName;\n const forward = selection.isForward();\n if (name === 'IMG') {\n return {\n name,\n index: findIndex(dom, name, element)\n };\n }\n const rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id,\n keep: true,\n forward\n });\n return {\n id,\n forward\n };\n };\n const getBookmark$2 = (selection, type, normalized = false) => {\n if (type === 2) {\n return getOffsetBookmark(trim$1, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const generate = cases => {\n if (!isArray$1(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$e(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray$1(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$e(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n const normalizePattern = pattern => {\n const err = message => Result.error({\n message,\n pattern\n });\n const formatOrCmd = (name, onFormat, onCommand) => {\n if (pattern.format !== undefined) {\n let formats;\n if (isArray$1(pattern.format)) {\n if (!forall(pattern.format, isString)) {\n return err(name + ' pattern has non-string items in the `format` array');\n }\n formats = pattern.format;\n } else if (isString(pattern.format)) {\n formats = [pattern.format];\n } else {\n return err(name + ' pattern has non-string `format` parameter');\n }\n return Result.value(onFormat(formats));\n } else if (pattern.cmd !== undefined) {\n if (!isString(pattern.cmd)) {\n return err(name + ' pattern has non-string `cmd` parameter');\n }\n return Result.value(onCommand(pattern.cmd, pattern.value));\n } else {\n return err(name + ' pattern is missing both `format` and `cmd` parameters');\n }\n };\n if (!isObject(pattern)) {\n return err('Raw pattern is not an object');\n }\n if (!isString(pattern.start)) {\n return err('Raw pattern is missing `start` parameter');\n }\n if (pattern.end !== undefined) {\n if (!isString(pattern.end)) {\n return err('Inline pattern has non-string `end` parameter');\n }\n if (pattern.start.length === 0 && pattern.end.length === 0) {\n return err('Inline pattern has empty `start` and `end` parameters');\n }\n let start = pattern.start;\n let end = pattern.end;\n if (end.length === 0) {\n end = start;\n start = '';\n }\n return formatOrCmd('Inline', format => ({\n type: 'inline-format',\n start,\n end,\n format\n }), (cmd, value) => ({\n type: 'inline-command',\n start,\n end,\n cmd,\n value\n }));\n } else if (pattern.replacement !== undefined) {\n if (!isString(pattern.replacement)) {\n return err('Replacement pattern has non-string `replacement` parameter');\n }\n if (pattern.start.length === 0) {\n return err('Replacement pattern has empty `start` parameter');\n }\n return Result.value({\n type: 'inline-command',\n start: '',\n end: pattern.start,\n cmd: 'mceInsertContent',\n value: pattern.replacement\n });\n } else {\n if (pattern.start.length === 0) {\n return err('Block pattern has empty `start` parameter');\n }\n return formatOrCmd('Block', formats => ({\n type: 'block-format',\n start: pattern.start,\n format: formats[0]\n }), (command, commandValue) => ({\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue\n }));\n }\n };\n const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n inlinePatterns: getInlinePatterns(patterns),\n blockPatterns: getBlockPatterns(patterns),\n dynamicPatternsLookup\n });\n const fromRawPatterns = patterns => {\n const normalized = partition$1(map$3(patterns, normalizePattern));\n each$e(normalized.errors, err => console.error(err.message, err.pattern));\n return normalized.values;\n };\n const fromRawPatternsLookup = lookupFn => {\n return ctx => {\n const rawPatterns = lookupFn(ctx);\n return fromRawPatterns(rawPatterns);\n };\n };\n\n const deviceDetection$1 = detect$2().deviceType;\n const isTouch = deviceDetection$1.isTouch();\n const DOM$a = DOMUtils.DOM;\n const getHash = value => {\n const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n return foldl(items, (output, item) => {\n const arr = item.split('=');\n const key = arr[0];\n const val = arr.length > 1 ? arr[1] : key;\n output[trim$3(key)] = trim$3(val);\n return output;\n }, {});\n };\n const isRegExp = x => is$4(x, RegExp);\n const option = name => editor => editor.options.get(name);\n const stringOrObjectProcessor = value => isString(value) || isObject(value);\n const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n const valid = isString(value);\n if (valid) {\n if (value.indexOf('=') !== -1) {\n const bodyObj = getHash(value);\n return {\n value: get$a(bodyObj, editor.id).getOr(defaultValue),\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string.'\n };\n }\n };\n const register$7 = editor => {\n const registerOption = editor.options.register;\n registerOption('id', {\n processor: 'string',\n default: editor.id\n });\n registerOption('selector', { processor: 'string' });\n registerOption('target', { processor: 'object' });\n registerOption('suffix', { processor: 'string' });\n registerOption('cache_suffix', { processor: 'string' });\n registerOption('base_url', { processor: 'string' });\n registerOption('referrer_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('language_load', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline', {\n processor: 'boolean',\n default: false\n });\n registerOption('iframe_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('doctype', {\n processor: 'string',\n default: ''\n });\n registerOption('document_base_url', {\n processor: 'string',\n default: editor.documentBaseUrl\n });\n registerOption('body_id', {\n processor: bodyOptionProcessor(editor, 'tinymce'),\n default: 'tinymce'\n });\n registerOption('body_class', {\n processor: bodyOptionProcessor(editor),\n default: ''\n });\n registerOption('content_security_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('br_in_pre', {\n processor: 'boolean',\n default: true\n });\n registerOption('forced_root_block', {\n processor: value => {\n const valid = isString(value) && isNotEmpty(value);\n if (valid) {\n return {\n value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a non-empty string.'\n };\n }\n },\n default: 'p'\n });\n registerOption('forced_root_block_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('newline_behavior', {\n processor: value => {\n const valid = contains$2([\n 'block',\n 'linebreak',\n 'invert',\n 'default'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: block, linebreak, invert or default.'\n };\n },\n default: 'default'\n });\n registerOption('br_newline_selector', {\n processor: 'string',\n default: '.mce-toc h2,figcaption,caption'\n });\n registerOption('no_newline_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('keep_styles', {\n processor: 'boolean',\n default: true\n });\n registerOption('end_container_on_empty_block', {\n processor: value => {\n if (isBoolean(value)) {\n return {\n valid: true,\n value\n };\n } else if (isString(value)) {\n return {\n valid: true,\n value\n };\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: 'blockquote'\n });\n registerOption('font_size_style_values', {\n processor: 'string',\n default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n });\n registerOption('font_size_legacy_values', {\n processor: 'string',\n default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n });\n registerOption('font_size_classes', {\n processor: 'string',\n default: ''\n });\n registerOption('automatic_uploads', {\n processor: 'boolean',\n default: true\n });\n registerOption('images_reuse_filename', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_replace_blob_uris', {\n processor: 'boolean',\n default: true\n });\n registerOption('icons', {\n processor: 'string',\n default: ''\n });\n registerOption('icons_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_base_path', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_credentials', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_upload_handler', { processor: 'function' });\n registerOption('language', {\n processor: 'string',\n default: 'en'\n });\n registerOption('language_url', {\n processor: 'string',\n default: ''\n });\n registerOption('entity_encoding', {\n processor: 'string',\n default: 'named'\n });\n registerOption('indent', {\n processor: 'boolean',\n default: true\n });\n registerOption('indent_before', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_after', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_use_margin', {\n processor: 'boolean',\n default: false\n });\n registerOption('indentation', {\n processor: 'string',\n default: '40px'\n });\n registerOption('content_css', {\n processor: value => {\n const valid = value === false || isString(value) || isArrayOf(value, isString);\n if (valid) {\n if (isString(value)) {\n return {\n value: map$3(value.split(','), trim$3),\n valid\n };\n } else if (isArray$1(value)) {\n return {\n value,\n valid\n };\n } else if (value === false) {\n return {\n value: [],\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be false, a string or an array of strings.'\n };\n }\n },\n default: isInline(editor) ? [] : ['default']\n });\n registerOption('content_style', { processor: 'string' });\n registerOption('content_css_cors', {\n processor: 'boolean',\n default: false\n });\n registerOption('font_css', {\n processor: value => {\n const valid = isString(value) || isArrayOf(value, isString);\n if (valid) {\n const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$3);\n return {\n value: newValue,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a string or an array of strings.'\n };\n }\n },\n default: []\n });\n registerOption('inline_boundaries', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline_boundaries_selector', {\n processor: 'string',\n default: 'a[href],code,span.mce-annotation'\n });\n registerOption('object_resizing', {\n processor: value => {\n const valid = isBoolean(value) || isString(value);\n if (valid) {\n if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n return {\n value: '',\n valid\n };\n } else {\n return {\n value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: !isTouch\n });\n registerOption('resize_img_proportional', {\n processor: 'boolean',\n default: true\n });\n registerOption('event_root', { processor: 'object' });\n registerOption('service_message', { processor: 'string' });\n registerOption('theme', {\n processor: value => value === false || isString(value) || isFunction(value),\n default: 'silver'\n });\n registerOption('theme_url', { processor: 'string' });\n registerOption('formats', { processor: 'object' });\n registerOption('format_empty_lines', {\n processor: 'boolean',\n default: false\n });\n registerOption('format_noneditable_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('preview_styles', {\n processor: value => {\n const valid = value === false || isString(value);\n if (valid) {\n return {\n value: value === false ? '' : value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string'\n };\n }\n },\n default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n });\n registerOption('custom_ui_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('hidden_input', {\n processor: 'boolean',\n default: true\n });\n registerOption('submit_patch', {\n processor: 'boolean',\n default: true\n });\n registerOption('encoding', { processor: 'string' });\n registerOption('add_form_submit_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('add_unload_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_undo_redo_levels', {\n processor: 'number',\n default: 0\n });\n registerOption('disable_nodechange', {\n processor: 'boolean',\n default: false\n });\n registerOption('readonly', {\n processor: 'boolean',\n default: false\n });\n registerOption('plugins', {\n processor: 'string[]',\n default: []\n });\n registerOption('external_plugins', { processor: 'object' });\n registerOption('forced_plugins', { processor: 'string[]' });\n registerOption('model', {\n processor: 'string',\n default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n });\n registerOption('model_url', { processor: 'string' });\n registerOption('block_unsupported_drop', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual_table_class', {\n processor: 'string',\n default: 'mce-item-table'\n });\n registerOption('visual_anchor_class', {\n processor: 'string',\n default: 'mce-item-anchor'\n });\n registerOption('iframe_aria_text', {\n processor: 'string',\n default: 'Rich Text Area. Press ALT-0 for help.'\n });\n registerOption('setup', { processor: 'function' });\n registerOption('init_instance_callback', { processor: 'function' });\n registerOption('url_converter', {\n processor: 'function',\n default: editor.convertURL\n });\n registerOption('url_converter_scope', {\n processor: 'object',\n default: editor\n });\n registerOption('urlconverter_callback', { processor: 'function' });\n registerOption('allow_conditional_comments', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_html_data_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_svg_data_urls', { processor: 'boolean' });\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_script_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('convert_fonts_to_spans', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('fix_list_elements', {\n processor: 'boolean',\n default: false\n });\n registerOption('preserve_cdata', {\n processor: 'boolean',\n default: false\n });\n registerOption('remove_trailing_brs', { processor: 'boolean' });\n registerOption('inline_styles', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('element_format', {\n processor: 'string',\n default: 'html'\n });\n registerOption('entities', { processor: 'string' });\n registerOption('schema', {\n processor: 'string',\n default: 'html5'\n });\n registerOption('convert_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('relative_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('remove_script_host', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_elements', { processor: 'string' });\n registerOption('extended_valid_elements', { processor: 'string' });\n registerOption('invalid_elements', { processor: 'string' });\n registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n registerOption('valid_children', { processor: 'string' });\n registerOption('valid_classes', { processor: stringOrObjectProcessor });\n registerOption('valid_elements', { processor: 'string' });\n registerOption('valid_styles', { processor: stringOrObjectProcessor });\n registerOption('verify_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('auto_focus', { processor: value => isString(value) || value === true });\n registerOption('browser_spellcheck', {\n processor: 'boolean',\n default: false\n });\n registerOption('protect', { processor: 'array' });\n registerOption('images_file_types', {\n processor: 'string',\n default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n });\n registerOption('deprecation_warnings', {\n processor: 'boolean',\n default: true\n });\n registerOption('a11y_advanced_options', {\n processor: 'boolean',\n default: false\n });\n registerOption('api_key', { processor: 'string' });\n registerOption('paste_block_drop', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_data_images', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_preprocess', { processor: 'function' });\n registerOption('paste_postprocess', { processor: 'function' });\n registerOption('paste_webkit_styles', {\n processor: 'string',\n default: 'none'\n });\n registerOption('paste_remove_styles_if_webkit', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_merge_formats', {\n processor: 'boolean',\n default: true\n });\n registerOption('smart_paste', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_as_text', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_tab_spaces', {\n processor: 'number',\n default: 4\n });\n registerOption('text_patterns', {\n processor: value => {\n if (isArrayOf(value, isObject) || value === false) {\n const patterns = value === false ? [] : value;\n return {\n value: fromRawPatterns(patterns),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of objects or false.'\n };\n }\n },\n default: [\n {\n start: '*',\n end: '*',\n format: 'italic'\n },\n {\n start: '**',\n end: '**',\n format: 'bold'\n },\n {\n start: '#',\n format: 'h1'\n },\n {\n start: '##',\n format: 'h2'\n },\n {\n start: '###',\n format: 'h3'\n },\n {\n start: '####',\n format: 'h4'\n },\n {\n start: '#####',\n format: 'h5'\n },\n {\n start: '######',\n format: 'h6'\n },\n {\n start: '1. ',\n cmd: 'InsertOrderedList'\n },\n {\n start: '* ',\n cmd: 'InsertUnorderedList'\n },\n {\n start: '- ',\n cmd: 'InsertUnorderedList'\n }\n ]\n });\n registerOption('text_patterns_lookup', {\n processor: value => {\n if (isFunction(value)) {\n return {\n value: fromRawPatternsLookup(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a single function'\n };\n }\n },\n default: _ctx => []\n });\n registerOption('noneditable_class', {\n processor: 'string',\n default: 'mceNonEditable'\n });\n registerOption('editable_class', {\n processor: 'string',\n default: 'mceEditable'\n });\n registerOption('noneditable_regexp', {\n processor: value => {\n if (isArrayOf(value, isRegExp)) {\n return {\n value,\n valid: true\n };\n } else if (isRegExp(value)) {\n return {\n value: [value],\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a RegExp or an array of RegExp.'\n };\n }\n },\n default: []\n });\n registerOption('table_tab_navigation', {\n processor: 'boolean',\n default: true\n });\n editor.on('ScriptsLoaded', () => {\n registerOption('directionality', {\n processor: 'string',\n default: I18n.isRtl() ? 'rtl' : undefined\n });\n registerOption('placeholder', {\n processor: 'string',\n default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n });\n });\n };\n const getIframeAttrs = option('iframe_attrs');\n const getDocType = option('doctype');\n const getDocumentBaseUrl = option('document_base_url');\n const getBodyId = option('body_id');\n const getBodyClass = option('body_class');\n const getContentSecurityPolicy = option('content_security_policy');\n const shouldPutBrInPre$1 = option('br_in_pre');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n const getNewlineBehavior = option('newline_behavior');\n const getBrNewLineSelector = option('br_newline_selector');\n const getNoNewLineSelector = option('no_newline_selector');\n const shouldKeepStyles = option('keep_styles');\n const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n const isAutomaticUploadsEnabled = option('automatic_uploads');\n const shouldReuseFileName = option('images_reuse_filename');\n const shouldReplaceBlobUris = option('images_replace_blob_uris');\n const getIconPackName = option('icons');\n const getIconsUrl = option('icons_url');\n const getImageUploadUrl = option('images_upload_url');\n const getImageUploadBasePath = option('images_upload_base_path');\n const getImagesUploadCredentials = option('images_upload_credentials');\n const getImagesUploadHandler = option('images_upload_handler');\n const shouldUseContentCssCors = option('content_css_cors');\n const getReferrerPolicy = option('referrer_policy');\n const getLanguageCode = option('language');\n const getLanguageUrl = option('language_url');\n const shouldIndentUseMargin = option('indent_use_margin');\n const getIndentation = option('indentation');\n const getContentCss = option('content_css');\n const getContentStyle = option('content_style');\n const getFontCss = option('font_css');\n const getDirectionality = option('directionality');\n const getInlineBoundarySelector = option('inline_boundaries_selector');\n const getObjectResizing = option('object_resizing');\n const getResizeImgProportional = option('resize_img_proportional');\n const getPlaceholder = option('placeholder');\n const getEventRoot = option('event_root');\n const getServiceMessage = option('service_message');\n const getTheme = option('theme');\n const getThemeUrl = option('theme_url');\n const getModel = option('model');\n const getModelUrl = option('model_url');\n const isInlineBoundariesEnabled = option('inline_boundaries');\n const getFormats = option('formats');\n const getPreviewStyles = option('preview_styles');\n const canFormatEmptyLines = option('format_empty_lines');\n const getFormatNoneditableSelector = option('format_noneditable_selector');\n const getCustomUiSelector = option('custom_ui_selector');\n const isInline = option('inline');\n const hasHiddenInput = option('hidden_input');\n const shouldPatchSubmit = option('submit_patch');\n const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n const shouldAddUnloadTrigger = option('add_unload_trigger');\n const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n const shouldDisableNodeChange = option('disable_nodechange');\n const isReadOnly$1 = option('readonly');\n const hasContentCssCors = option('content_css_cors');\n const getPlugins = option('plugins');\n const getExternalPlugins$1 = option('external_plugins');\n const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n const isVisualAidsEnabled = option('visual');\n const getVisualAidsTableClass = option('visual_table_class');\n const getVisualAidsAnchorClass = option('visual_anchor_class');\n const getIframeAriaText = option('iframe_aria_text');\n const getSetupCallback = option('setup');\n const getInitInstanceCallback = option('init_instance_callback');\n const getUrlConverterCallback = option('urlconverter_callback');\n const getAutoFocus = option('auto_focus');\n const shouldBrowserSpellcheck = option('browser_spellcheck');\n const getProtect = option('protect');\n const shouldPasteBlockDrop = option('paste_block_drop');\n const shouldPasteDataImages = option('paste_data_images');\n const getPastePreProcess = option('paste_preprocess');\n const getPastePostProcess = option('paste_postprocess');\n const getPasteWebkitStyles = option('paste_webkit_styles');\n const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n const shouldPasteMergeFormats = option('paste_merge_formats');\n const isSmartPasteEnabled = option('smart_paste');\n const isPasteAsTextEnabled = option('paste_as_text');\n const getPasteTabSpaces = option('paste_tab_spaces');\n const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n const getTextPatterns = option('text_patterns');\n const getTextPatternsLookup = option('text_patterns_lookup');\n const getNonEditableClass = option('noneditable_class');\n const getEditableClass = option('editable_class');\n const getNonEditableRegExps = option('noneditable_regexp');\n const shouldPreserveCData = option('preserve_cdata');\n const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n const hasTableTabNavigation = option('table_tab_navigation');\n\n const isElement$3 = isElement$6;\n const isText$5 = isText$a;\n const removeNode$1 = node => {\n const parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n const trimCount = text => {\n const trimmedText = trim$1(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n const deleteZwspChars = caretContainer => {\n let idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n const removeUnchanged = (caretContainer, pos) => {\n remove$4(caretContainer);\n return pos;\n };\n const removeTextAndReposition = (caretContainer, pos) => {\n const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n const after = trimCount(caretContainer.data.substr(pos.offset()));\n const text = before.text + after.text;\n if (text.length > 0) {\n deleteZwspChars(caretContainer);\n return CaretPosition(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n const removeElementAndReposition = (caretContainer, pos) => {\n const parentNode = pos.container();\n const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$4(caretContainer);\n return newPosition;\n };\n const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n const remove$4 = caretContainerNode => {\n if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode$1(caretContainerNode);\n }\n }\n if (isText$5(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n const isContentEditableFalse$7 = isContentEditableFalse$a;\n const isMedia$1 = isMedia$2;\n const isTableCell$1 = isTableCell$3;\n const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n const getAbsoluteClientRect = (root, element, before) => {\n const clientRect = collapse(element.getBoundingClientRect(), before);\n let scrollX;\n let scrollY;\n if (root.tagName === 'BODY') {\n const docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n const rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n let margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n const trimInlineCaretContainers = root => {\n var _a, _b;\n const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n const node = fakeCaretTargetNodes[i].dom;\n let sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n const FakeCaret = (editor, root, isBlock, hasFocus) => {\n const lastVisualCaret = value$2();\n let cursorInterval;\n let caretContainerNode;\n const caretBlock = getForcedRootBlock(editor);\n const dom = editor.dom;\n const show = (before, element) => {\n let rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n const caretContainer = insertBlock(caretBlock, element, before);\n const clientRect = getAbsoluteClientRect(root, element, before);\n dom.setStyle(caretContainer, 'top', clientRect.top);\n caretContainerNode = caretContainer;\n const caret = dom.create('div', {\n 'class': 'mce-visual-caret',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(caret, { ...clientRect });\n dom.add(root, caret);\n lastVisualCaret.set({\n caret,\n element,\n before\n });\n if (before) {\n dom.addClass(caret, 'mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainer, 0);\n rng.setEnd(caretContainer, 0);\n } else {\n caretContainerNode = insertInline$1(element, before);\n rng = element.ownerDocument.createRange();\n if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n const hide = () => {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$4(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(caretState => {\n dom.remove(caretState.caret);\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n clearInterval(cursorInterval);\n cursorInterval = undefined;\n }\n };\n const startBlink = () => {\n cursorInterval = setInterval(() => {\n lastVisualCaret.on(caretState => {\n if (hasFocus()) {\n dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n } else {\n dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n }\n });\n }, 500);\n };\n const reposition = () => {\n lastVisualCaret.on(caretState => {\n const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n dom.setStyles(caretState.caret, { ...clientRect });\n });\n };\n const destroy = () => clearInterval(cursorInterval);\n const getCss = () => '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n return {\n show,\n hide,\n getCss,\n reposition,\n destroy\n };\n };\n const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n const isInlineFakeCaretTarget = node => isContentEditableFalse$7(node) || isMedia$1(node);\n const isFakeCaretTarget = node => isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n\n const isContentEditableTrue$1 = isContentEditableTrue$3;\n const isContentEditableFalse$6 = isContentEditableFalse$a;\n const isMedia = isMedia$2;\n const isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n const isCaretContainer = isCaretContainer$2;\n const isCaretContainerBlock = isCaretContainerBlock$1;\n const isElement$2 = isElement$6;\n const isText$4 = isText$a;\n const isCaretCandidate$1 = isCaretCandidate$3;\n const isForwards = direction => direction > 0;\n const isBackwards = direction => direction < 0;\n const skipCaretContainers = (walk, shallow) => {\n let node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n const walker = new DomTreeWalker(node, rootNode);\n const isCefOrCaretContainer = isContentEditableFalse$6(node) || isCaretContainerBlock(node);\n let tempNode;\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getEditingHost = (node, rootNode) => {\n const isCETrue = node => isContentEditableTrue$1(node.dom);\n const isRoot = node => node.dom === rootNode;\n return ancestor$3(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n };\n const getParentBlock$3 = (node, rootNode) => {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n if (!caretPosition) {\n return Optional.none();\n }\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (!isElement$2(container)) {\n return Optional.none();\n }\n return Optional.from(container.childNodes[offset + relativeOffset]);\n };\n const beforeAfter = (before, node) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const range = doc.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n const lean = (left, root, node) => {\n const siblingName = left ? 'previousSibling' : 'nextSibling';\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n let sibling = tempNode[siblingName];\n if (sibling && isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$6(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, tempNode)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n const before$2 = curry(beforeAfter, true);\n const after$2 = curry(beforeAfter, false);\n const normalizeRange = (direction, root, range) => {\n let node;\n const leanLeft = curry(lean, true, root);\n const leanRight = curry(lean, false, root);\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n const block = isText$4(container) ? container.parentNode : container;\n const location = block.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = block.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = block.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$a(container)) {\n if (isCaretContainer(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer$1(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n return range;\n }\n }\n return range;\n };\n const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$6);\n const getNormalizedRangeEndPoint = (direction, root, range) => {\n const normalizedRange = normalizeRange(direction, root, range);\n return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n };\n const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n const getVisualCaretPosition = (walkFn, caretPosition) => {\n let pos = caretPosition;\n while (pos = walkFn(pos)) {\n if (pos.isVisible()) {\n return pos;\n }\n }\n return pos;\n };\n const isMoveInsideSameBlock = (from, to) => {\n const inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$6(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n const isContentEditableFalse$5 = isContentEditableFalse$a;\n const isText$3 = isText$a;\n const isElement$1 = isElement$6;\n const isBr$2 = isBr$6;\n const isCaretCandidate = isCaretCandidate$3;\n const isAtomic = isAtomic$1;\n const isEditableCaretCandidate = isEditableCaretCandidate$1;\n const getParents$3 = (node, root) => {\n const parents = [];\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n parents.push(tempNode);\n tempNode = tempNode.parentNode;\n }\n return parents;\n };\n const nodeAtIndex = (container, offset) => {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n const getCaretCandidatePosition = (direction, node) => {\n if (isForwards(direction)) {\n if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$2(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n const moveForwardFromBr = (root, nextNode) => {\n const nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$3(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n const findCaretPosition$1 = (direction, startPos, root) => {\n let node;\n let nextNode;\n let innerNode;\n let caretPosition;\n if (!isElement$1(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n caretPosition = CaretPosition.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n const container = caretPosition.container();\n let offset = caretPosition.offset();\n if (isText$3(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate(nextNode)) {\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, nextNode.data.length);\n }\n return CaretPosition.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate(nextNode)) {\n if (isBr$2(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n const rootContentEditableFalseElm = last$2(filter$5(getParents$3(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n const CaretWalker = root => ({\n next: caretPosition => {\n return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n });\n\n const walkToPositionIn = (forward, root, start) => {\n const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n const isBeforeOrStart = position => {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n const isAfterOrEnd = position => {\n if (CaretPosition.isTextPosition(position)) {\n const container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n const shouldSkipPosition = (forward, from, to) => {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n const fromPosition = (forward, root, pos) => {\n const walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Optional.some(to);\n }\n });\n const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n const positionIn = (forward, element) => {\n const startNode = forward ? element.firstChild : element.lastChild;\n if (isText$a(startNode)) {\n return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate$3(startNode)) {\n return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Optional.none();\n }\n };\n const nextPosition = curry(fromPosition, true);\n const prevPosition = curry(fromPosition, false);\n const firstPositionIn = curry(positionIn, true);\n const lastPositionIn = curry(positionIn, false);\n\n const CARET_ID = '_mce_caret';\n const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n const getParentCaretContainer = (body, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== body) {\n if (isCaretNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n\n const isStringPathBookmark = bookmark => isString(bookmark.start);\n const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n const isIdBookmark = bookmark => has$2(bookmark, 'id');\n const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n const addBogus = (dom, node) => {\n if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n node.innerHTML = '
    ';\n }\n return node;\n };\n const resolveCaretPositionBookmark = (dom, bookmark) => {\n const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n return lift2(startPos, endPos, (start, end) => {\n const range = dom.createRng();\n range.setStart(start.container(), start.offset());\n range.setEnd(end.container(), end.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const insertZwsp = (node, rng) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n const isEmpty$1 = node => !node.hasChildNodes();\n const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n const padEmptyCaretContainer = (root, node, rng) => {\n if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n const setEndPoint = (dom, start, bookmark, rng) => {\n const point = bookmark[start ? 'start' : 'end'];\n const root = dom.getRoot();\n if (point) {\n let node = root;\n let offset = point[0];\n for (let i = point.length - 1; node && i >= 1; i--) {\n const children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (isText$a(node)) {\n offset = Math.min(point[0], node.data.length);\n }\n if (isElement$6(node)) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n const isValidTextNode = node => isText$a(node) && node.data.length > 0;\n const restoreEndPoint = (dom, suffix, bookmark) => {\n const marker = dom.get(bookmark.id + '_' + suffix);\n const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n const keep = bookmark.keep;\n if (marker && markerParent) {\n let container;\n let offset;\n if (suffix === 'start') {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n container = marker.nextSibling;\n offset = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker) + 1;\n }\n }\n } else {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n }\n }\n }\n if (!keep) {\n const prev = marker.previousSibling;\n const next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), node => {\n if (isText$a(node)) {\n node.data = node.data.replace(/\\uFEFF/g, '');\n }\n });\n let otherMarker;\n while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(otherMarker, true);\n }\n if (isText$a(next) && isText$a(prev) && !Env.browser.isOpera()) {\n const idx = prev.data.length;\n prev.appendData(next.data);\n dom.remove(next);\n container = prev;\n offset = idx;\n }\n }\n return Optional.some(CaretPosition(container, offset));\n } else {\n return Optional.none();\n }\n };\n const resolvePaths = (dom, bookmark) => {\n const range = dom.createRng();\n if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n return Optional.some({\n range,\n forward: isForwardBookmark(bookmark)\n });\n } else {\n return Optional.none();\n }\n };\n const resolveId = (dom, bookmark) => {\n const startPos = restoreEndPoint(dom, 'start', bookmark);\n const endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n const range = dom.createRng();\n range.setStart(addBogus(dom, spos.container()), spos.offset());\n range.setEnd(addBogus(dom, epos.container()), epos.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n const range = dom.createRng();\n range.selectNode(elm);\n return {\n range,\n forward: true\n };\n });\n const resolve = (selection, bookmark) => {\n const dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return resolveCaretPositionBookmark(dom, bookmark);\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Optional.some({\n range: bookmark.rng,\n forward: isForwardBookmark(bookmark)\n });\n }\n }\n return Optional.none();\n };\n\n const getBookmark$1 = (selection, type, normalized) => {\n return getBookmark$2(selection, type, normalized);\n };\n const moveToBookmark = (selection, bookmark) => {\n resolve(selection, bookmark).each(({range, forward}) => {\n selection.setRng(range, forward);\n });\n };\n const isBookmarkNode$1 = node => {\n return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n const is = expected => actual => expected === actual;\n const isNbsp = is(nbsp);\n const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$1(chr);\n\n const hexColour = value => ({ value });\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n\n const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n const getRanges$1 = selection => {\n const ranges = [];\n if (selection) {\n for (let i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n const getSelectedNodes = ranges => {\n return bind$3(ranges, range => {\n const node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n const hasMultipleRanges = selection => {\n return getRanges$1(selection).length > 1;\n };\n\n const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n const getCellsFromElementOrRanges = (ranges, element) => {\n const selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n const getClosestTable = (cell, isRoot) => ancestor$2(cell, 'table', isRoot);\n\n const getStartNode = rng => {\n const sc = rng.startContainer, so = rng.startOffset;\n if (isText$a(sc)) {\n return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n } else {\n return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n }\n };\n const getEndNode = rng => {\n const ec = rng.endContainer, eo = rng.endOffset;\n if (isText$a(ec)) {\n return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n } else {\n return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n }\n };\n const getFirstChildren = node => {\n return firstChild(node).fold(constant([node]), child => {\n return [node].concat(getFirstChildren(child));\n });\n };\n const getLastChildren = node => {\n return lastChild(node).fold(constant([node]), child => {\n if (name(child) === 'br') {\n return prevSibling(child).map(sibling => {\n return [node].concat(getLastChildren(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(child));\n }\n });\n };\n const hasAllContentsSelected = (elm, rng) => {\n return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n const end = find$2(getLastChildren(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n const moveEndPoint = (dom, rng, node, start) => {\n const root = node;\n const walker = new DomTreeWalker(node, root);\n const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase()));\n let currentNode = node;\n do {\n if (isText$a(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n if (start) {\n rng.setStart(currentNode, 0);\n } else {\n rng.setEnd(currentNode, currentNode.data.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n if (start) {\n rng.setStartBefore(currentNode);\n } else {\n if (currentNode.nodeName === 'BR') {\n rng.setEndBefore(currentNode);\n } else {\n rng.setEndAfter(currentNode);\n }\n }\n return;\n }\n } while (currentNode = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n const hasAnyRanges = editor => {\n const sel = editor.selection.getSel();\n return isNonNullable(sel) && sel.rangeCount > 0;\n };\n const runOnRanges = (editor, executor) => {\n const fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$e(fakeSelectionNodes, elem => {\n const node = elem.dom;\n const fakeNodeRng = editor.dom.createRng();\n fakeNodeRng.setStartBefore(node);\n fakeNodeRng.setEndAfter(node);\n executor(fakeNodeRng, true);\n });\n } else {\n executor(editor.selection.getRng(), false);\n }\n };\n const preserve = (selection, fillBookmark, executor) => {\n const bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n const isElementDirectlySelected = (dom, node) => {\n if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n const value = parseInt(selectedAttr, 10);\n return !isNaN(value) && value > 0;\n } else {\n return false;\n }\n };\n const isEditable$3 = elm => elm.isContentEditable === true;\n const preserveSelection = (editor, action, shouldMoveStart) => {\n const {selection, dom} = editor;\n const selectedNodeBeforeAction = selection.getNode();\n const isSelectedBeforeNodeNoneditable = isContentEditableFalse$a(selectedNodeBeforeAction);\n preserve(selection, true, () => {\n action();\n });\n const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$a(selectedNodeBeforeAction);\n if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n editor.selection.select(selectedNodeBeforeAction);\n } else if (shouldMoveStart(selection.getStart())) {\n moveStartToNearestText(dom, selection);\n }\n };\n const moveStartToNearestText = (dom, selection) => {\n var _a, _b;\n const rng = selection.getRng();\n const {startContainer, startOffset} = rng;\n const selectedNode = selection.getNode();\n if (isElementDirectlySelected(dom, selectedNode)) {\n return;\n }\n if (isElement$6(startContainer)) {\n const nodes = startContainer.childNodes;\n const root = dom.getRoot();\n let walker;\n if (startOffset < nodes.length) {\n const startNode = nodes[startOffset];\n walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n } else {\n const startNode = nodes[nodes.length - 1];\n walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n walker.next(true);\n }\n for (let node = walker.current(); node; node = walker.next()) {\n if (dom.getContentEditable(node) === 'false') {\n return;\n } else if (isText$a(node) && !isWhiteSpaceNode$1(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n const getNonWhiteSpaceSibling = (node, next, inc) => {\n if (node) {\n const nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n return node;\n }\n }\n }\n return undefined;\n };\n const isTextBlock$1 = (editor, name) => {\n if (isNode(name)) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n const isValid = (ed, parent, child) => {\n return ed.schema.isValidChild(parent, child);\n };\n const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n if (isNonNullable(node) && isText$a(node)) {\n const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n const isEmptyTextNode$1 = node => {\n return isNonNullable(node) && isText$a(node) && node.length === 0;\n };\n const isWrapNoneditableTarget = (editor, node) => {\n const baseDataSelector = '[data-mce-cef-wrappable]';\n const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n return is$1(SugarElement.fromDom(node), selector);\n };\n const isWrappableNoneditable = (editor, node) => {\n const dom = editor.dom;\n return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n };\n const replaceVars = (value, vars) => {\n if (isFunction(value)) {\n return value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, (str, name) => {\n return vars[name] || str;\n });\n }\n return value;\n };\n const isEq$5 = (str1, str2) => {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n const normalizeStyleValue = (value, name) => {\n if (isNullable(value)) {\n return null;\n } else {\n let strValue = String(value);\n if (name === 'color' || name === 'backgroundColor') {\n strValue = rgbaToHexString(strValue);\n }\n if (name === 'fontWeight' && value === 700) {\n strValue = 'bold';\n }\n if (name === 'fontFamily') {\n strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return strValue;\n }\n };\n const getStyle = (dom, node, name) => {\n const style = dom.getStyle(node, name);\n return normalizeStyleValue(style, name);\n };\n const getTextDecoration = (dom, node) => {\n let decoration;\n dom.getParent(node, n => {\n if (isElement$6(n)) {\n decoration = dom.getStyle(n, 'text-decoration');\n return !!decoration && decoration !== 'none';\n } else {\n return false;\n }\n });\n return decoration;\n };\n const getParents$2 = (dom, node, selector) => {\n return dom.getParents(node, selector, dom.getRoot());\n };\n const isFormatPredicate = (editor, formatName, predicate) => {\n const formats = editor.formatter.get(formatName);\n return isNonNullable(formats) && exists(formats, predicate);\n };\n const isVariableFormatName = (editor, formatName) => {\n const hasVariableValues = format => {\n const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n return exists([\n 'styles',\n 'attributes'\n ], key => get$a(format, key).exists(field => {\n const fieldValues = isArray$1(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n }));\n };\n return isFormatPredicate(editor, formatName, hasVariableValues);\n };\n const areSimilarFormats = (editor, formatName, otherFormatName) => {\n const validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n return isFormatPredicate(editor, formatName, fmt1 => {\n const filteredFmt1 = filterObj(fmt1);\n return isFormatPredicate(editor, otherFormatName, fmt2 => {\n const filteredFmt2 = filterObj(fmt2);\n return equal$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n const isBlockFormat = format => hasNonNullableKey(format, 'block');\n const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n\n const isBookmarkNode = isBookmarkNode$1;\n const getParents$1 = getParents$2;\n const isWhiteSpaceNode = isWhiteSpaceNode$1;\n const isTextBlock = isTextBlock$1;\n const isBogusBr = node => {\n return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n const findParentContentEditable = (dom, node) => {\n let parent = node;\n while (parent) {\n if (isElement$6(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n const walkText = (start, node, offset, predicate) => {\n const str = node.data;\n for (let i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) {\n if (predicate(str.charAt(i))) {\n return start ? i + 1 : i;\n }\n }\n return -1;\n };\n const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n let lastTextNode;\n const rootNode = dom.getParent(container, dom.isBlock) || body;\n const walk = (container, offset, pred) => {\n const textSeeker = TextSeeker(dom);\n const walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, (text, textOffset) => {\n if (isBookmarkNode(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n const spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none());\n };\n const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n const sibling = container[siblingName];\n if (isText$a(container) && isEmpty$3(container.data) && sibling) {\n container = sibling;\n }\n const parents = getParents$1(dom, container);\n for (let i = 0; i < parents.length; i++) {\n for (let y = 0; y < formatList.length; y++) {\n const curFormat = formatList[y];\n if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n const findBlockEndPoint = (editor, formatList, container, siblingName) => {\n var _a;\n let node = container;\n const dom = editor.dom;\n const root = dom.getRoot();\n const format = formatList[0];\n if (isBlockFormat(format)) {\n node = format.wrapper ? null : dom.getParent(container, format.block, root);\n }\n if (!node) {\n const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH')) !== null && _a !== void 0 ? _a : root;\n node = dom.getParent(isText$a(container) ? container.parentNode : container, node => node !== root && isTextBlock(editor, node), scopeRoot);\n }\n if (node && isBlockFormat(format) && format.wrapper) {\n node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node && node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq$5(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n const parent = container.parentNode;\n if (isNonNullable(container[siblingName])) {\n return false;\n } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n return true;\n } else {\n return isAtBlockBoundary$1(dom, root, parent, siblingName);\n }\n };\n const findParentContainer = (dom, formatList, container, offset, start) => {\n let parent = container;\n const siblingName = start ? 'previousSibling' : 'nextSibling';\n const root = dom.getRoot();\n if (isText$a(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (parent) {\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$a(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n const expandRng = (editor, rng, formatList, includeTrailingSpace = false) => {\n let {startContainer, startOffset, endContainer, endOffset} = rng;\n const dom = editor.dom;\n const format = formatList[0];\n if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$a(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$a(endContainer)) {\n endOffset = endContainer.data.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isSelfOrParentBookmark(startContainer)) {\n startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (isText$a(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isSelfOrParentBookmark(endContainer)) {\n endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (isText$a(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n const startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(({container, offset}) => {\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$a(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$a(endContainer) || endOffset === endContainer.data.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(editor, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n }\n if (isElement$6(startContainer) && startContainer.parentNode) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$6(endContainer) && endContainer.parentNode) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const walk$3 = (dom, rng, callback) => {\n var _a;\n const startOffset = rng.startOffset;\n const startContainer = getNode$1(rng.startContainer, startOffset);\n const endOffset = rng.endOffset;\n const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n const exclude = nodes => {\n const firstNode = nodes[0];\n if (isText$a(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n const lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$a(lastNode)) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n const collectSiblings = (node, name, endNode) => {\n const siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n const walkBoundary = (startNode, endNode, next) => {\n const siblingName = next ? 'nextSibling' : 'previousSibling';\n for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\n if (dom.isChildOf(startContainer, endContainer)) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (dom.isChildOf(endContainer, startContainer)) {\n return walkBoundary(endContainer, ancestor);\n }\n const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n const siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n\n const validBlocks = [\n 'pre[class*=language-][contenteditable=\"false\"]',\n 'figure.image',\n 'div[data-ephox-embed-iri]',\n 'div.tiny-pageembed',\n 'div.mce-toc',\n 'div[data-mce-toc]'\n ];\n const isZeroWidth = elem => isText$b(elem) && get$3(elem) === ZWSP$1;\n const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', parent => {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem.dom)) {\n return 'caret';\n } else if (exists(validBlocks, selector => is$1(elem, selector))) {\n return 'valid-block';\n } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n\n const applyWordGrab = (editor, rng) => {\n const r = expandRng(editor, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n const {uid = masterUId, ...otherData} = data;\n add$2(elem, annotation());\n set$2(elem, `${ dataAnnotationId() }`, uid);\n set$2(elem, `${ dataAnnotation() }`, annotationName);\n const {attributes = {}, classes = []} = decorate(uid, otherData);\n setAll$1(elem, attributes);\n add(elem, classes);\n if (directAnnotation) {\n if (classes.length > 0) {\n set$2(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n }\n const attributeNames = keys(attributes);\n if (attributeNames.length > 0) {\n set$2(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n }\n }\n };\n const removeDirectAnnotation = elem => {\n remove$8(elem, annotation());\n remove$b(elem, `${ dataAnnotationId() }`);\n remove$b(elem, `${ dataAnnotation() }`);\n remove$b(elem, `${ dataAnnotationActive() }`);\n const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => remove$b(elem, name));\n remove$5(elem, customClasses);\n remove$b(elem, `${ dataAnnotationClasses() }`);\n remove$b(elem, `${ dataAnnotationAttributes() }`);\n };\n const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n const master = SugarElement.fromTag('span', eDoc);\n applyAnnotation(master, uid, data, annotationName, decorate, false);\n return master;\n };\n const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n const newWrappers = [];\n const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n const wrapper = value$2();\n const finishWrapper = () => {\n wrapper.clear();\n };\n const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n const nu = shallow$1(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n const processElements = elems => {\n each$e(elems, processElement);\n };\n const processElement = elem => {\n const ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n const children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid-block': {\n finishWrapper();\n applyAnnotation(elem, uid, data, annotationName, decorate, true);\n break;\n }\n case 'valid': {\n const w = getOrOpenWrapper();\n wrap$2(elem, w);\n break;\n }\n }\n };\n const processNodes = nodes => {\n const elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$3(editor.dom, rng, nodes => {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n const annotateWithBookmark = (editor, name, settings, data) => {\n editor.undoManager.transact(() => {\n const selection = editor.selection;\n const initialRng = selection.getRng();\n const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n const masterUid = generate$1('mce-annotation');\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n const wrapper = makeAnnotation(editor.getDoc(), masterUid, data, name, settings.decorate);\n set(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom);\n selection.select(wrapper.dom);\n } else {\n preserve(selection, false, () => {\n runOnRanges(editor, selectionRng => {\n annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n const Annotator = editor => {\n const registry = create$c();\n setup$w(editor, registry);\n const changes = setup$x(editor, registry);\n const isSpan = isTag('span');\n const removeAnnotations = elements => {\n each$e(elements, element => {\n if (isSpan(element)) {\n unwrap(element);\n } else {\n removeDirectAnnotation(element);\n }\n });\n };\n return {\n register: (name, settings) => {\n registry.register(name, settings);\n },\n annotate: (name, data) => {\n registry.lookup(name).each(settings => {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: (name, callback) => {\n changes.addListener(name, callback);\n },\n remove: name => {\n const bookmark = editor.selection.getBookmark();\n identify(editor, Optional.some(name)).each(({elements}) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n removeAll: name => {\n const bookmark = editor.selection.getBookmark();\n each$d(findAll(editor, name), (elements, _) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n getAll: name => {\n const directory = findAll(editor, name);\n return map$2(directory, elems => map$3(elems, elem => elem.dom));\n }\n };\n };\n\n const BookmarkManager = selection => {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n const isXYWithinRange = (clientX, clientY, range) => {\n if (range.collapsed) {\n return false;\n } else {\n return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n }\n };\n\n const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n const fireRemove = editor => {\n editor.dispatch('remove');\n };\n const fireDetach = editor => {\n editor.dispatch('detach');\n };\n const fireSwitchMode = (editor, mode) => {\n editor.dispatch('SwitchMode', { mode });\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const firePreInit = editor => {\n editor.dispatch('PreInit');\n };\n const firePostRender = editor => {\n editor.dispatch('PostRender');\n };\n const fireInit = editor => {\n editor.dispatch('Init');\n };\n const firePlaceholderToggle = (editor, state) => {\n editor.dispatch('PlaceholderToggle', { state });\n };\n const fireError = (editor, errorType, error) => {\n editor.dispatch(errorType, error);\n };\n const fireFormatApply = (editor, format, node, vars) => {\n editor.dispatch('FormatApply', {\n format,\n node,\n vars\n });\n };\n const fireFormatRemove = (editor, format, node, vars) => {\n editor.dispatch('FormatRemove', {\n format,\n node,\n vars\n });\n };\n const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n const fireAutocompleterStart = (editor, args) => {\n editor.dispatch('AutocompleterStart', args);\n };\n const fireAutocompleterUpdate = (editor, args) => {\n editor.dispatch('AutocompleterUpdate', args);\n };\n const fireAutocompleterEnd = editor => {\n editor.dispatch('AutocompleterEnd');\n };\n const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n content: html,\n internal\n });\n const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n node,\n internal\n });\n const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n\n const VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n modifierPressed: e => {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: e => {\n return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n const elementSelectionAttr = 'data-mce-selected';\n const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object';\n const abs = Math.abs;\n const round$1 = Math.round;\n const resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n const ControlSelection = (selection, editor) => {\n const dom = editor.dom;\n const editableDoc = editor.getDoc();\n const rootDocument = document;\n const rootElement = editor.getBody();\n let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n let width;\n let height;\n let startScrollWidth;\n let startScrollHeight;\n const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n const isEventOnImageOutsideRange = (evt, range) => {\n if (isTouchEvent(evt)) {\n const touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n const contextMenuSelectImage = evt => {\n const target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n const getResizeTargets = elm => {\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else {\n return [elm];\n }\n };\n const isResizable = elm => {\n const selector = getObjectResizing(editor);\n if (!selector) {\n return false;\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$1(SugarElement.fromDom(elm), selector);\n }\n };\n const createGhostElement = elm => {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else {\n return elm.cloneNode(true);\n }\n };\n const setSizeProp = (element, name, value) => {\n if (isNonNullable(value)) {\n const targets = getResizeTargets(element);\n each$e(targets, target => {\n if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n dom.setStyle(target, name, value);\n } else {\n dom.setAttrib(target, name, '' + value);\n }\n });\n }\n };\n const setGhostElmSize = (ghostElm, width, height) => {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n const resizeGhostElement = e => {\n let deltaX, deltaY, proportional;\n let resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round$1(width * ratio);\n width = round$1(height / ratio);\n } else {\n width = round$1(height / ratio);\n height = round$1(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n const endGhostResize = () => {\n const wasResizeStarted = resizeStarted;\n resizeStarted = false;\n if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n const showResizeRect = targetElm => {\n unbindResizeHandleEvents();\n const position = dom.getPos(targetElm, rootElement);\n const selectedElmX = position.x;\n const selectedElmY = position.y;\n const rect = targetElm.getBoundingClientRect();\n const targetWidth = rect.width || rect.right - rect.left;\n const targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n const e = editor.dispatch('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each$d(resizeHandles, (handle, name) => {\n const startDrag = e => {\n const target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(selectedElm);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = 'false';\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n selectedElmGhost.removeAttribute(elementSelectionAttr);\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n let handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n dom.bind(handleElm, 'mousedown', e => {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect(false);\n }\n };\n const throttledShowResizeRect = first$1(showResizeRect, 0);\n const hideResizeRect = (removeSelected = true) => {\n throttledShowResizeRect.cancel();\n unbindResizeHandleEvents();\n if (selectedElm && removeSelected) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$d(resizeHandles, (value, name) => {\n const handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n const updateResizeRect = e => {\n if (resizeStarted || editor.removed || editor.composing) {\n return;\n }\n const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).getOrUndefined();\n const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n img.removeAttribute(elementSelectionAttr);\n });\n if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n const startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n throttledShowResizeRect.throttle(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n const unbindResizeHandleEvents = () => {\n each$d(resizeHandles, handle => {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n const disableGeckoResize = () => {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', () => {\n disableGeckoResize();\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n editor.on('keyup compositionend', e => {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n updateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n const destroy = () => {\n throttledShowResizeRect.cancel();\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable,\n showResizeRect,\n hideResizeRect,\n updateResizeRect,\n destroy\n };\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$a = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$a };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n };\n const availableSearch = (() => {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return Optional.none;\n }\n })();\n const fromPoint$1 = (win, x, y) => {\n const doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$2 = situ => situ.fold(identity, identity, identity);\n const before$1 = adt$2.before;\n const on = adt$2.on;\n const after$1 = adt$2.after;\n const Situ = {\n before: before$1,\n on,\n after: after$1,\n cata,\n getStart: getStart$2\n };\n\n const adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart$1 = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$1.domRange;\n const relative = adt$1.relative;\n const exact = adt$1.exact;\n const getWin = selection => {\n const start = getStart$1(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n const preprocess = selection => selection.match({\n domRange: rng => {\n const start = SugarElement.fromDom(rng.startContainer);\n const finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$e(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const toNative = selection => {\n const win = SimSelection.getWin(selection).dom;\n const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n const filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n const fromPoint = (clientX, clientY, doc) => {\n const win = defaultView(SugarElement.fromDom(doc));\n return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n const rng = doc.createRange();\n rng.setStart(simRange.start.dom, simRange.soffset);\n rng.setEnd(simRange.finish.dom, simRange.foffset);\n return rng;\n }).getOrUndefined();\n };\n\n const isEq$4 = (rng1, rng2) => {\n return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n const findParent = (node, rootNode, predicate) => {\n let currentNode = node;\n while (currentNode && currentNode !== rootNode) {\n if (predicate(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n const hasBrBeforeAfter = (dom, node, left) => {\n const parentNode = node.parentNode;\n if (parentNode) {\n const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n let currentNode;\n while (currentNode = walker[left ? 'prev' : 'next']()) {\n if (isBr$6(currentNode)) {\n return true;\n }\n }\n }\n return false;\n };\n const isPrevNode = (node, name) => {\n var _a;\n return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n };\n const hasContentEditableFalseParent = (root, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== root) {\n if (isContentEditableFalse$a(currentNode)) {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n };\n const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n const body = dom.getRoot();\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n const parentNode = startNode.parentNode;\n let lastInlineElement;\n let node;\n if (!parentNode) {\n return Optional.none();\n }\n const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n }\n const walker = new DomTreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Optional.none();\n }\n if (isText$a(node) && node.data.length > 0) {\n if (!hasParentWithName(node, body, 'A')) {\n return Optional.some(CaretPosition(node, left ? node.data.length : 0));\n }\n return Optional.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Optional.none();\n }\n lastInlineElement = node;\n }\n if (isComment(lastInlineElement)) {\n return Optional.none();\n }\n if (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n const normalizeEndPoint = (dom, collapsed, start, rng) => {\n const body = dom.getRoot();\n let node;\n let normalized = false;\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n let directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$6(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (isDocument$1(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer$2(node)) {\n return Optional.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Optional.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = isText$a(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && !isTable$2(container)) {\n node = container;\n const walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$a(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$a(node) && node.data.length > 0) {\n offset = directionLeft ? 0 : node.data.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (isText$a(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$6(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$a(container) && offset === container.data.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n const normalize$2 = (dom, rng) => {\n const collapsed = rng.collapsed, normRng = rng.cloneRange();\n const startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(pos => {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(pos => {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n };\n\n const splitText = (node, offset) => {\n return node.splitText(offset);\n };\n const split = rng => {\n let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$a(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.data.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n startContainer = endContainer = newContainer;\n endOffset = newContainer.data.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$a(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$a(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n endContainer = newContainer;\n endOffset = newContainer.data.length;\n }\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const RangeUtils = dom => {\n const walk = (rng, callback) => {\n return walk$3(dom, rng, callback);\n };\n const split$1 = split;\n const normalize = rng => {\n return normalize$2(dom, rng).fold(never, normalizedRng => {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk,\n split: split$1,\n normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$7(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$7(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$2 = element => api.get(element);\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner = element => documentOrOwner(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n const find = element => {\n const doc = getDocument();\n const scroll = get$5(doc);\n const frames = pathTo(element, Navigation);\n const offset = viewport(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n };\n\n const excludeFromDescend = element => name(element) === 'textarea';\n const fireScrollIntoViewEvent = (editor, data) => {\n const scrollEvent = editor.dispatch('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n const fireAfterScrollIntoViewEvent = (editor, data) => {\n editor.dispatch('AfterScrollIntoView', data);\n };\n const descend = (element, offset) => {\n const children$1 = children(element);\n if (children$1.length === 0 || excludeFromDescend(element)) {\n return {\n element,\n offset\n };\n } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n return {\n element: children$1[offset],\n offset: 0\n };\n } else {\n const last = children$1[children$1.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element,\n offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$b(last)) {\n return {\n element: last,\n offset: get$3(last).length\n };\n } else {\n return {\n element: last,\n offset: children(last).length\n };\n }\n }\n }\n };\n const markerInfo = (element, cleanupFun) => {\n const pos = absolute(element);\n const height = get$2(element);\n return {\n element,\n bottom: pos.top + height,\n height,\n pos,\n cleanup: cleanupFun\n };\n };\n const createMarker$1 = (element, offset) => {\n const startPoint = descend(element, offset);\n const span = SugarElement.fromHtml('' + ZWSP$1 + '');\n before$3(startPoint.element, span);\n return markerInfo(span, () => remove$6(span));\n };\n const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n const withMarker = (editor, f, rng, alignToTop) => {\n preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n };\n const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n const data = {\n elm: marker.element.dom,\n alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n const scrollTop = get$5(doc).top;\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n const applyWithMarker = (editor, f, rng, alignToTop) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n const withElement = (editor, element, f, alignToTop) => {\n const doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n const preserveWith = (editor, f, rng) => {\n const startElement = rng.startContainer;\n const startOffset = rng.startOffset;\n const endElement = rng.endContainer;\n const endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n const newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n const scrollToMarker = (marker, viewHeight, alignToTop, doc) => {\n const pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n const y = pos.top - viewHeight + marker.height;\n to(pos.left, y, doc);\n }\n };\n const intoWindowIfNeeded = (doc, scrollTop, viewHeight, marker, alignToTop) => {\n const viewportBottom = viewHeight + scrollTop;\n const markerTop = marker.pos.top;\n const markerBottom = marker.bottom;\n const largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n }\n };\n const intoWindow = (doc, scrollTop, marker, alignToTop) => {\n const viewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n const intoFrame = (doc, scrollTop, marker, alignToTop) => {\n const frameViewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n const op = find(marker.element);\n const viewportBounds = getBounds(window);\n if (op.top < viewportBounds.y) {\n intoView(marker.element, alignToTop !== false);\n } else if (op.top > viewportBounds.bottom) {\n intoView(marker.element, alignToTop === true);\n }\n };\n const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n const scrollElementIntoView = (editor, element, alignToTop) => {\n const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n const scrollRangeIntoView = (editor, rng, alignToTop) => {\n const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n const focus$1 = element => element.dom.focus();\n const hasFocus$1 = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const clamp$1 = (offset, element) => {\n const max = isText$b(element) ? get$3(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n const shouldStore = editor => editor.inline;\n const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const readRange = win => {\n const selection = win.getSelection();\n const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n const getBookmark = root => {\n const win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n const bookmarkToNativeRng = bookmark => {\n const rng = document.createRange();\n try {\n rng.setStart(bookmark.start.dom, bookmark.soffset);\n rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n return Optional.some(rng);\n } catch (_) {\n return Optional.none();\n }\n };\n const store = editor => {\n const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n const getRng = editor => {\n const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n };\n const restore = editor => {\n getRng(editor).each(rng => editor.selection.setRng(rng));\n };\n\n const isEditorUIElement$1 = elm => {\n const className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n const wrappedSetTimeout = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n const wrappedSetInterval = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setInterval(callback, time);\n };\n const Delay = {\n setEditorTimeout: (editor, callback, time) => {\n return wrappedSetTimeout(() => {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: (editor, callback, time) => {\n const timer = wrappedSetInterval(() => {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n }\n };\n\n const isManualNodeChange = e => {\n return e.type === 'nodechange' && e.selectionChange;\n };\n const registerPageMouseUp = (editor, throttledStore) => {\n const mouseUpPage = () => {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', () => {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n const registerMouseUp = (editor, throttledStore) => {\n editor.on('mouseup touchend', _e => {\n throttledStore.throttle();\n });\n };\n const registerEditorEvents = (editor, throttledStore) => {\n registerMouseUp(editor, throttledStore);\n editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n const register$6 = editor => {\n const throttledStore = first$1(() => {\n store(editor);\n }, 0);\n editor.on('init', () => {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', () => {\n throttledStore.cancel();\n });\n };\n\n let documentFocusInHandler;\n const DOM$9 = DOMUtils.DOM;\n const isEditorUIElement = elm => {\n return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n };\n const isEditorContentAreaElement = elm => {\n const classList = elm.classList;\n if (classList !== undefined) {\n return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n } else {\n return false;\n }\n };\n const isUIElement = (editor, elm) => {\n const customSelector = getCustomUiSelector(editor);\n const parent = DOM$9.getParent(elm, elm => {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n const getActiveElement = editor => {\n try {\n const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(root).fold(() => document.body, x => x.dom);\n } catch (ex) {\n return document.body;\n }\n };\n const registerEvents$1 = (editorManager, e) => {\n const editor = e.editor;\n register$6(editor);\n editor.on('focusin', () => {\n const focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.dispatch('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.dispatch('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', () => {\n Delay.setEditorTimeout(editor, () => {\n const focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = e => {\n const activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(target => {\n const elem = target;\n if (elem.ownerDocument === document) {\n if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n activeEditor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$9.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n const unregisterDocumentEvents = (editorManager, e) => {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor && documentFocusInHandler) {\n DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n const setup$v = editorManager => {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (!contains(root, node)) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n const normalizeSelection = (editor, rng) => {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n return firstPositionIn(elm.dom);\n }).fold(() => {\n editor.selection.normalize();\n }, caretPos => editor.selection.setRng(caretPos.toRange()));\n };\n const focusBody = body => {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n const hasInlineFocus = editor => {\n const rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n const hasUiFocus = editor => {\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n };\n const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n const focusEditor = editor => {\n const selection = editor.selection;\n const body = editor.getBody();\n let rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n getRng(editor).each(bookmarkRng => {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.browser.isOpera()) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.browser.isFirefox() || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n const activateEditor = editor => editor.editorManager.setActive(editor);\n const focus = (editor, skipFocus) => {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n const getEndpointElement = (root, rng, start, real, resolve) => {\n const container = start ? rng.startContainer : rng.endContainer;\n const offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n };\n const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n const getEnd$1 = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n const skipEmptyTextNodes = (node, forwards) => {\n const orig = node;\n while (node && isText$a(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n const getNode = (root, rng) => {\n if (!rng) {\n return root;\n }\n let startContainer = rng.startContainer;\n let endContainer = rng.endContainer;\n const startOffset = rng.startOffset;\n const endOffset = rng.endOffset;\n let node = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n node = startContainer.childNodes[startOffset];\n }\n }\n }\n if (isText$a(startContainer) && isText$a(endContainer)) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n node = startContainer;\n }\n }\n }\n const elm = isText$a(node) ? node.parentNode : node;\n return isElement$6(elm) ? elm : root;\n };\n const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n const selectedBlocks = [];\n const root = dom.getRoot();\n const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n const end = dom.getParent(endElm || getEnd$1(root, rng, rng.collapsed), dom.isBlock);\n if (start && start !== root) {\n selectedBlocks.push(start);\n }\n if (start && end && start !== end) {\n let node = start;\n const walker = new DomTreeWalker(start, root);\n while ((node = walker.next()) && node !== end) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (end && start !== end && end !== root) {\n selectedBlocks.push(end);\n }\n return selectedBlocks;\n };\n const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n const idx = dom.nodeIndex(node);\n const rng = dom.createRng();\n rng.setStart(parent, idx);\n rng.setEnd(parent, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n }));\n\n const processRanges = (editor, ranges) => map$3(ranges, range => {\n const evt = editor.dispatch('GetSelectionRange', { range });\n return evt.range !== range ? evt.range : range;\n });\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem));\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children$1 = children(element);\n for (let i = children$1.length - 1; i >= 0; i--) {\n const child = children$1[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const autocompleteSelector = '[data-mce-autocompleter]';\n const create$9 = (editor, range) => {\n if (findIn(SugarElement.fromDom(editor.getBody())).isNone()) {\n const wrapper = SugarElement.fromHtml('', editor.getDoc());\n append$1(wrapper, SugarElement.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom);\n parent(wrapper).each(elm => elm.dom.normalize());\n last(wrapper).map(last => {\n editor.selection.setCursorLocation(last.dom, getEnd(last));\n });\n }\n };\n const detect$1 = elm => closest$3(elm, autocompleteSelector);\n const findIn = elm => descendant(elm, autocompleteSelector);\n const remove$3 = (editor, elm) => findIn(elm).each(wrapper => {\n const bookmark = editor.selection.getBookmark();\n unwrap(wrapper);\n editor.selection.moveToBookmark(bookmark);\n });\n\n const typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n const walk$2 = (node, root, prev) => {\n const startName = prev ? 'lastChild' : 'firstChild';\n const siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n return undefined;\n };\n const isEmptyTextNode = node => {\n var _a;\n const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (!isWhitespaceText(text)) {\n return false;\n }\n const parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n return false;\n }\n return true;\n };\n const isNonEmptyElement = node => {\n const isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n };\n class AstNode {\n constructor(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n static create(name, attrs) {\n const node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$d(attrs, (value, attrName) => {\n node.attr(attrName, value);\n });\n }\n return node;\n }\n replace(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n }\n attr(name, value) {\n const self = this;\n if (!isString(name)) {\n if (isNonNullable(name)) {\n each$d(name, (value, key) => {\n self.attr(key, value);\n });\n }\n return self;\n }\n const attrs = self.attributes;\n if (attrs) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name,\n value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n return undefined;\n }\n clone() {\n const self = this;\n const clone = new AstNode(self.name, self.type);\n const selfAttrs = self.attributes;\n if (selfAttrs) {\n const cloneAttrs = [];\n cloneAttrs.map = {};\n for (let i = 0, l = selfAttrs.length; i < l; i++) {\n const selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n return clone;\n }\n wrap(wrapper) {\n const self = this;\n if (self.parent) {\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n }\n return self;\n }\n unwrap() {\n const self = this;\n for (let node = self.firstChild; node;) {\n const next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n }\n remove() {\n const self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else if (prev) {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else if (next) {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n }\n append(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n const last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n }\n insert(node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n const parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else if (refNode.prev) {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else if (refNode.next) {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n }\n getAll(name) {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n }\n children() {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n }\n empty() {\n const self = this;\n if (self.firstChild) {\n const nodes = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n }\n isEmpty(elements, whitespace = {}, predicate) {\n var _a;\n const self = this;\n let node = self.firstChild;\n if (isNonEmptyElement(self)) {\n return false;\n }\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attr('data-mce-bogus')) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !isEmptyTextNode(node)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n }\n walk(prev) {\n return walk$2(this, null, prev);\n }\n }\n\n const isConditionalComment = (html, startIndex) => /^\\s*\\[if [\\w\\W]+\\]>.*/.test(html.substr(startIndex));\n const findCommentEndIndex = (html, isBogus, startIndex = 0) => {\n const lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n const endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n const endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n const endCommentRegexp = /--!?>/g;\n endCommentRegexp.lastIndex = startIndex;\n const match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n const findMatchingEndTagIndex = (schema, html, startIndex) => {\n const startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n const endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n const voidElements = schema.getVoidElements();\n let count = 1, index = startIndex;\n while (count !== 0) {\n startTagRegExp.lastIndex = index;\n while (true) {\n const startMatch = startTagRegExp.exec(html);\n if (startMatch === null) {\n return index;\n } else if (startMatch[1] === '!') {\n if (startsWith(startMatch[2], '--')) {\n index = findCommentEndIndex(html, false, startMatch.index + '!--'.length);\n } else {\n index = findCommentEndIndex(html, true, startMatch.index + 1);\n }\n break;\n } else {\n endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n const endMatch = endTagRegExp.exec(html);\n if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n continue;\n }\n if (startMatch[1] === '/') {\n count -= 1;\n } else if (!has$2(voidElements, startMatch[2])) {\n count += 1;\n }\n index = startTagRegExp.lastIndex + endMatch[0].length;\n break;\n }\n }\n }\n return index;\n };\n const trimHtml$1 = (tempAttrs, html) => {\n const trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n return html.replace(trimContentRegExp, '');\n };\n const trimInternal = (serializer, html) => {\n const bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n const schema = serializer.schema;\n let content = trimHtml$1(serializer.getTempAttrs(), html);\n const voidElements = schema.getVoidElements();\n let matches;\n while (matches = bogusAllRegExp.exec(content)) {\n const index = bogusAllRegExp.lastIndex;\n const matchLength = matches[0].length;\n let endTagIndex;\n if (voidElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = findMatchingEndTagIndex(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$1(content);\n };\n const trimExternal = trimInternal;\n\n const trimEmptyContents = (editor, html) => {\n const blockName = getForcedRootBlock(editor);\n const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>( | |\\\\s|\\u00a0|
    |)<\\\\/${ blockName }>[\\r\\n]*|
    [\\r\\n]*)$`);\n return html.replace(emptyRegExp, '');\n };\n const getPlainTextContent = (editor, body) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$2(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0'\n });\n set(offscreenDiv, body.innerHTML);\n const bogusElements = descendants(offscreenDiv, '[data-mce-bogus]');\n each$e(bogusElements, elem => {\n const bogusValue = get$9(elem, 'data-mce-bogus');\n if (bogusValue === 'all') {\n remove$6(elem);\n } else if (isBr$5(elem)) {\n before$3(elem, SugarElement.fromText(zeroWidth));\n remove$6(elem);\n } else {\n unwrap(elem);\n }\n });\n const root = getContentContainer(dos);\n append$1(root, offscreenDiv);\n const content = trim$1(offscreenDiv.dom.innerText);\n remove$6(offscreenDiv);\n return content;\n };\n const getContentFromBody = (editor, args, body) => {\n let content;\n if (args.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = getPlainTextContent(editor, body);\n } else if (args.format === 'tree') {\n content = editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n return shouldTrim && isString(content) ? Tools.trim(content) : content;\n };\n const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n const makeMap$1 = Tools.makeMap;\n const Writer = settings => {\n const html = [];\n settings = settings || {};\n const indent = settings.indent;\n const indentBefore = makeMap$1(settings.indent_before || '');\n const indentAfter = makeMap$1(settings.indent_after || '');\n const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n const htmlOutput = settings.element_format !== 'xhtml';\n return {\n start: (name, attrs, empty) => {\n if (indent && indentBefore[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: name => {\n let value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: (text, raw) => {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: text => {\n html.push('');\n },\n comment: text => {\n html.push('');\n },\n pi: (name, text) => {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: text => {\n html.push('', indent ? '\\n' : '');\n },\n reset: () => {\n html.length = 0;\n },\n getContent: () => {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n const HtmlSerializer = (settings = {}, schema = Schema()) => {\n const writer = Writer(settings);\n settings.validate = 'validate' in settings ? settings.validate : true;\n const serialize = node => {\n const validate = settings.validate;\n const handlers = {\n 3: node => {\n var _a;\n writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n },\n 8: node => {\n var _a;\n writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 7: node => {\n writer.pi(node.name, node.value);\n },\n 10: node => {\n var _a;\n writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 4: node => {\n var _a;\n writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 11: node => {\n let tempNode = node;\n if (tempNode = tempNode.firstChild) {\n do {\n walk(tempNode);\n } while (tempNode = tempNode.next);\n }\n }\n };\n writer.reset();\n const walk = node => {\n var _a;\n const handler = handlers[node.type];\n if (!handler) {\n const name = node.name;\n const isEmpty = name in schema.getVoidElements();\n let attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n const sortedAttrs = [];\n sortedAttrs.map = {};\n const elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n const attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(name, attrs, isEmpty);\n if (!isEmpty) {\n let child = node.firstChild;\n if (child) {\n if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n writer.text('\\n', true);\n }\n do {\n walk(child);\n } while (child = child.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else if (node.type === 3) {\n handlers[3](node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize };\n };\n\n const nonInheritableStyles = new Set();\n (() => {\n const nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each$e(nonInheritableStylesArr, style => {\n nonInheritableStyles.add(style);\n });\n })();\n const shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n const getStyleProps = (dom, node) => keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n const hasInheritableStyles = (dom, node) => forall(getStyleProps(dom, node), style => !isNonInheritableStyle(style));\n const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n const hasStyleConflict = (dom, node, parentNode) => {\n const nodeStyleProps = getStyleProps(dom, node);\n const parentNodeStyleProps = getStyleProps(dom, parentNode);\n const valueMismatch = prop => {\n var _a, _b;\n const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, nodeStyleProp => {\n const propExists = props => exists(props, prop => prop === nodeStyleProp);\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$a).exists(text => {\n const delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n const isAfterSpace = curry(isChar, false, isWhiteSpace);\n const isEmptyText = pos => {\n const container = pos.container();\n return isText$a(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n const isCefNode = node => isContentEditableFalse$a(node) && !isBogusAll$1(node);\n const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n const isAfterMedia = matchesElementPosition(false, isMedia$2);\n const isBeforeTable = matchesElementPosition(true, isTable$2);\n const isAfterTable = matchesElementPosition(false, isTable$2);\n const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n const dropLast = xs => xs.slice(0, -1);\n const parentsUntil = (start, root, predicate) => {\n if (contains(root, start)) {\n return dropLast(parents$1(start, elm => {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n const parents = (start, root) => parentsUntil(start, root, never);\n const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n const getClosestBlock$1 = (root, pos) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n const isAtBeforeAfterBlockBoundary = (forward, root, pos) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n const isAtBlockBoundary = (forward, root, pos) => getClosestBlock$1(root, pos).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n const findBr = (forward, root, pos) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n const scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n };\n const isBeforeBr$1 = (root, pos) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos).isSome();\n const isAfterBr = (root, pos) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos).isSome();\n const findPreviousBr = curry(findBr, false);\n const findNextBr = curry(findBr, true);\n\n const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n const getClosestBlock = (root, pos) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n return head(parentBlocks).getOr(root);\n };\n const hasSpaceBefore = (root, pos) => {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos).dom, pos).exists(isAfterSpace);\n }\n };\n const hasSpaceAfter = (root, pos) => {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos).dom, pos).exists(isBeforeSpace);\n }\n };\n const isPreValue = value => contains$2([\n 'pre',\n 'pre-wrap'\n ], value);\n const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n const isAtLineBoundary = (root, pos) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(root, pos);\n const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$a(node) && isBlockLike(node);\n const isSiblingCefBlock = (root, direction) => container => {\n return isCefBlock(new DomTreeWalker(container, root)[direction]());\n };\n const isBeforeCefBlock = (root, pos) => {\n const nextPos = nextPosition(root.dom, pos).getOr(pos);\n const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n };\n const isAfterCefBlock = (root, pos) => {\n const prevPos = prevPosition(root.dom, pos).getOr(pos);\n const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n };\n const needsToHaveNbsp = (root, pos) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n const needsToBeNbspLeft = (root, pos) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos) || isAfterCefBlock(root, pos);\n }\n };\n const leanRight = pos => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$a(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n const needsToBeNbspRight = (root, pos) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr$1(root, pos) || hasSpaceAfter(root, pos) || isBeforeCefBlock(root, pos);\n }\n };\n const needsToBeNbsp = (root, pos) => needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n const hasNbsp = pos => {\n const container = pos.container();\n return isText$a(container) && contains$1(container.data, nbsp);\n };\n const normalizeNbspMiddle = text => {\n const chars = text.split('');\n return map$3(chars, (chr, i) => {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n const normalizeNbspAtStart = (root, node, makeNbsp) => {\n const text = node.data;\n const firstPos = CaretPosition(node, 0);\n if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos)) {\n node.data = nbsp + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspInMiddleOfTextNode = node => {\n const text = node.data;\n const newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspAtEnd = (root, node, makeNbsp) => {\n const text = node.data;\n const lastPos = CaretPosition(node, text.length - 1);\n if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos)) {\n node.data = text.slice(0, -1) + nbsp;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbsps = (root, pos) => {\n const container = pos.container();\n if (!isText$a(container)) {\n return Optional.none();\n }\n if (hasNbsp(pos)) {\n const normalized = normalizeNbspAtStart(root, container, false) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false);\n return someIf(normalized, pos);\n } else if (needsToBeNbsp(root, pos)) {\n const normalized = normalizeNbspAtStart(root, container, true) || normalizeNbspAtEnd(root, container, true);\n return someIf(normalized, pos);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbspsInEditor = editor => {\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n const normalize$1 = (node, offset, count) => {\n if (count === 0) {\n return;\n }\n const elm = SugarElement.fromDom(node);\n const root = ancestor$3(elm, isBlock$2).getOr(elm);\n const whitespace = node.data.slice(offset, offset + count);\n const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n };\n const normalizeWhitespaceAfter = (node, offset) => {\n const content = node.data.slice(offset);\n const whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount);\n };\n const normalizeWhitespaceBefore = (node, offset) => {\n const content = node.data.slice(0, offset);\n const whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n const mergeTextNodes = (prevNode, nextNode, normalizeWhitespace, mergeToPrev = true) => {\n const whitespaceOffset = rTrim(prevNode.data).length;\n const newNode = mergeToPrev ? prevNode : nextNode;\n const removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$6(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset);\n }\n return newNode;\n };\n\n const needsReposition = (pos, elm) => {\n const container = pos.container();\n const offset = pos.offset();\n return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n const beforeOrStartOf = node => isText$a(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n const afterOrEndOf = node => isText$a(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n const getPreviousSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.previousSibling)) {\n return Optional.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n }\n };\n const getNextSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.nextSibling)) {\n return Optional.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n }\n };\n const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n };\n const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n const setSelection$1 = (editor, forward, pos) => {\n pos.fold(() => {\n editor.focus();\n }, pos => {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n const eqRawNode = rawNode => elm => elm.dom === rawNode;\n const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n const paddEmptyBlock = elm => {\n if (isEmpty$2(elm)) {\n const br = SugarElement.fromHtml('
    ');\n empty(elm);\n append$1(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n const deleteNormalized = (elm, afterDeletePosOpt, normalizeWhitespace) => {\n const prevTextOpt = prevSibling(elm).filter(isText$b);\n const nextTextOpt = nextSibling(elm).filter(isText$b);\n remove$6(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n const prevNode = prev.dom, nextNode = next.dom;\n const offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(() => {\n if (normalizeWhitespace) {\n prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length));\n nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0));\n }\n return afterDeletePosOpt;\n });\n };\n const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n const deleteElement$2 = (editor, forward, elm, moveCaret = true) => {\n const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n const parentBlock = ancestor$3(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(paddEmptyBlock).fold(() => {\n if (moveCaret) {\n setSelection$1(editor, forward, normalizedAfterDeletePos);\n }\n }, paddPos => {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n const hasStrongRtl = text => strongRtl.test(text);\n\n const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor));\n const isRtl = element => {\n var _a;\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n };\n const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n const findRootInline = (isInlineTarget, rootNode, pos) => {\n const parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n const hasSameParentBlock = (rootNode, node1, node2) => {\n const block1 = getParentBlock$3(node1, rootNode);\n const block2 = getParentBlock$3(node2, rootNode);\n return isNonNullable(block1) && block1 === block2;\n };\n const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n const normalizePosition = (forward, pos) => {\n const container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$a(container.nextSibling)) {\n return CaretPosition(container.nextSibling, 0);\n } else {\n return CaretPosition.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (isText$a(container.previousSibling)) {\n return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n }\n }\n };\n const normalizeForwards = curry(normalizePosition, true);\n const normalizeBackwards = curry(normalizePosition, false);\n\n const execCommandIgnoreInputEvents = (editor, command) => {\n const inputBlocker = e => e.stopImmediatePropagation();\n editor.on('beforeinput input', inputBlocker, true);\n editor.getDoc().execCommand(command);\n editor.off('beforeinput input', inputBlocker);\n };\n const execEditorDeleteCommand = editor => {\n editor.execCommand('delete');\n };\n const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n const getParentBlock$2 = (rootNode, elm) => {\n if (contains(rootNode, elm)) {\n return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n } else {\n return Optional.none();\n }\n };\n const paddEmptyBody = (editor, moveSelection = true) => {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('', { no_selection: !moveSelection });\n }\n };\n const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n const normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n } else {\n return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n }\n }).getOr(true);\n const freefallRtl = root => {\n const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n };\n const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n var _a;\n rng.deleteContents();\n const lastNode = freefallRtl(root).getOr(root);\n const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n if (lastBlock.dom === editor.getBody()) {\n paddEmptyBody(editor, moveSelection);\n } else if (isEmpty$2(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n if (moveSelection) {\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n }\n if (!eq(root, lastBlock)) {\n const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n each$e(additionalCleanupNodes.concat(children(root)), node => {\n if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(node)) {\n remove$6(node);\n }\n });\n }\n };\n\n const isRootFromElement = root => cur => eq(root, cur);\n const getTableCells = table => descendants(table, 'td,th');\n const getTableDetailsFromRange = (rng, isRoot) => {\n const getTable = node => getClosestTable(SugarElement.fromDom(node), isRoot);\n const startTable = getTable(rng.startContainer);\n const endTable = getTable(rng.endContainer);\n const isStartInTable = startTable.isSome();\n const isEndInTable = endTable.isSome();\n const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return {\n startTable,\n endTable,\n isStartInTable,\n isEndInTable,\n isSameTable,\n isMultiTable\n };\n };\n\n const tableCellRng = (start, end) => ({\n start,\n end\n });\n const tableSelection = (rng, table, cells) => ({\n rng,\n table,\n cells\n });\n const deleteAction = Adt.generate([\n {\n singleCellTable: [\n 'rng',\n 'cell'\n ]\n },\n { fullTable: ['table'] },\n {\n partialTable: [\n 'cells',\n 'outsideDetails'\n ]\n },\n {\n multiTable: [\n 'startTableCells',\n 'endTableCells',\n 'betweenRng'\n ]\n }\n ]);\n const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n const rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n const getCellRng = (rng, isRoot) => {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$3(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n const unselectCells = (rng, selectionDetails) => {\n const {startTable, endTable} = selectionDetails;\n const otherContentRng = rng.cloneRange();\n startTable.each(table => otherContentRng.setStartAfter(table.dom));\n endTable.each(table => otherContentRng.setEndBefore(table.dom));\n return otherContentRng;\n };\n const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n const {isSameTable} = selectionDetails;\n const selectedCells = getSelectedCells(tableSelection).getOr([]);\n if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n return Optional.some(deleteAction.fullTable(tableSelection.table));\n } else if (selectedCells.length > 0) {\n if (isSameTable) {\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n } else {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n ...selectionDetails,\n rng: otherContentRng\n })));\n }\n } else {\n return Optional.none();\n }\n });\n const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n const getActionFromRange = (root, rng) => {\n const isRoot = isRootFromElement(root);\n const optCellRng = getCellRng(rng, isRoot);\n const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\n } else if (selectionDetails.isMultiTable) {\n return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n } else {\n return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n }\n };\n\n const cleanCells = cells => each$e(cells, cell => {\n remove$b(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n emptyBlock.each(block => {\n if (startInTable) {\n remove$6(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n const insideTableRng = rng.cloneRange();\n if (isFirstCellInSelection) {\n insideTableRng.setStart(rng.startContainer, rng.startOffset);\n insideTableRng.setEndAfter(cell.dom.lastChild);\n } else {\n insideTableRng.setStartBefore(cell.dom.firstChild);\n insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n }\n deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n };\n const collapseAndRestoreCellSelection = editor => {\n const selectedCells = getCellsFromEditor(editor);\n const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n if (isTableCell$3(selectedNode.dom) && isEmpty$2(selectedNode)) {\n editor.selection.setCursorLocation(selectedNode.dom, 0);\n } else {\n editor.selection.collapse(true);\n }\n if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n set$2(selectedNode, 'data-mce-selected', '1');\n }\n };\n const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n const editorRng = editor.selection.getRng();\n const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(endPointCell)) {\n return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n } else {\n return Optional.none();\n }\n }).getOr(cells);\n cleanCells(cellsToClean);\n collapseAndRestoreCellSelection(editor);\n });\n const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n const rng = editor.selection.getRng();\n const startCell = startTableCells[0];\n const endCell = endTableCells[endTableCells.length - 1];\n deleteContentInsideCell(editor, startCell, rng, true);\n deleteContentInsideCell(editor, endCell, rng, false);\n const startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n const endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n betweenRng.deleteContents();\n collapseAndRestoreCellSelection(editor);\n });\n const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n deleteRangeContents(editor, rng, cell, moveSelection);\n });\n const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n const deleteRange$2 = (editor, startElm, selectedCells) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n const emptyElement = (editor, elm) => Optional.some(() => {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n });\n const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n };\n const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n const isBeforeOrAfterTable = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n };\n const deleteCaret$3 = (editor, forward, startElm) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n };\n const backspaceDelete$9 = (editor, forward) => {\n const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n const cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells);\n };\n\n const getContentEditableRoot$1 = (root, node) => {\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$a(tempNode)) {\n return tempNode;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n\n const internalAttributesPrefixes = [\n 'data-ephox-',\n 'data-mce-',\n 'data-alloy-',\n 'data-snooker-',\n '_'\n ];\n const each$9 = Tools.each;\n const ElementUtils = editor => {\n const dom = editor.dom;\n const internalAttributes = new Set(editor.serializer.getTempAttrs());\n const compare = (node1, node2) => {\n if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n return false;\n }\n const getAttribs = node => {\n const attribs = {};\n each$9(dom.getAttribs(node), attr => {\n const name = attr.nodeName.toLowerCase();\n if (name !== 'style' && !isAttributeInternal(name)) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n const compareObjects = (obj1, obj2) => {\n for (const name in obj1) {\n if (has$2(obj1, name)) {\n const value = obj2[name];\n if (isUndefined(value)) {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (const name in obj2) {\n if (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\n if (isElement$6(node1) && isElement$6(node2)) {\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n return {\n compare,\n isAttributeInternal\n };\n };\n\n const traverse = (root, fn) => {\n let node = root;\n while (node = node.walk()) {\n fn(node);\n }\n };\n const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n const name = node.name;\n for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n const filter = nodeFilters[ni];\n if (filter.name === name) {\n const match = matches.nodes[name];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.nodes[name] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n if (node.attributes) {\n for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n const filter = attributeFilters[ai];\n const attrName = filter.name;\n if (attrName in node.attributes.map) {\n const match = matches.attributes[attrName];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.attributes[attrName] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n }\n };\n const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n const matches = {\n nodes: {},\n attributes: {}\n };\n if (node.firstChild) {\n traverse(node, childNode => {\n matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n });\n }\n return matches;\n };\n const runFilters = (matches, args) => {\n const run = (matchRecord, filteringAttributes) => {\n each$d(matchRecord, match => {\n const nodes = from(match.nodes);\n each$e(match.filter.callbacks, callback => {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n if (!valueMatches || isNullable(node.parent)) {\n nodes.splice(i, 1);\n }\n }\n if (nodes.length > 0) {\n callback(nodes, match.filter.name, args);\n }\n });\n });\n };\n run(matches.nodes, false);\n run(matches.attributes, true);\n };\n const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n runFilters(matches, args);\n };\n\n const paddEmptyNode = (settings, args, blockElements, node) => {\n if (args.insert && blockElements[node.name]) {\n const astNode = new AstNode('br', 1);\n astNode.attr('data-mce-bogus', '1');\n node.empty().append(astNode);\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n const isPaddedWithNbsp = node => {\n var _a;\n return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n };\n const hasOnlyChild = (node, name) => {\n const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n };\n const isPadded = (schema, node) => {\n const rule = schema.getElementRule(node.name);\n return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n };\n const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n const isLineBreakNode = (node, blockElements) => isNonNullable(node) && (node.name in blockElements || node.name === 'br');\n\n const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n if (schema.getSpecialElements()[node.name]) {\n node.empty().remove();\n } else {\n const children = node.children();\n for (const childNode of children) {\n if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n }\n }\n node.unwrap();\n }\n };\n const cleanInvalidNodes = (nodes, schema, onCreate = noop) => {\n const textBlockElements = schema.getTextBlockElements();\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table');\n const fixed = new Set();\n for (let ni = 0; ni < nodes.length; ni++) {\n const node = nodes[ni];\n let parent;\n let newParent;\n let tempNode;\n if (!node.parent || fixed.has(node)) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n let sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n fixed.add(sibling);\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap();\n continue;\n }\n const parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplittableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n if (schema.isValidChild(parent.name, node.name)) {\n parents.reverse();\n newParent = parents[0].clone();\n onCreate(newParent);\n let currentNode = newParent;\n for (let i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = parents[i].clone();\n onCreate(tempNode);\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n const nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n let sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol') && sibling.firstChild) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n const wrapper = new AstNode('ul', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n const wrapper = new AstNode('div', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n }\n }\n };\n\n const createRange = (sc, so, ec, eo) => {\n const rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n const normalizeBlockSelectionRange = rng => {\n const startPos = CaretPosition.fromRangeStart(rng);\n const endPos = CaretPosition.fromRangeEnd(rng);\n const rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(newEndPos => {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n const hasOnlyOneChild$1 = node => {\n return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n };\n const isPaddingNode = node => {\n return node.name === 'br' || node.value === nbsp;\n };\n const isPaddedEmptyBlock = (schema, node) => {\n const blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n const isEmptyFragmentElement = (schema, node) => {\n const nonEmptyElements = schema.getNonEmptyElements();\n return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n const isListFragment = (schema, fragment) => {\n let firstChild = fragment.firstChild;\n let lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild === null || lastChild === void 0 ? void 0 : lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n const cleanupDomFragment = domFragment => {\n var _a, _b;\n const firstChild = domFragment.firstChild;\n const lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n }\n return domFragment;\n };\n const toDomFragment = (dom, serializer, fragment) => {\n const html = serializer.serialize(fragment);\n const domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n const listItems = elm => {\n var _a;\n return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n return child.nodeName === 'LI';\n });\n };\n const isPadding = node => {\n return node.data === nbsp || isBr$6(node);\n };\n const isListItemPadded = node => {\n return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n const isEmptyOrPadded = elm => {\n return !elm.firstChild || isListItemPadded(elm);\n };\n const trimListItems = elms => {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n const getParentLi = (dom, node) => {\n const parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n const isParentBlockLi = (dom, node) => {\n return !!getParentLi(dom, node);\n };\n const getSplit = (parentNode, rng) => {\n const beforeRng = rng.cloneRange();\n const afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n const findFirstIn = (node, rootNode) => {\n const caretPos = CaretPosition.before(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const findLastOf = (node, rootNode) => {\n const caretPos = CaretPosition.after(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const insertMiddle = (target, elms, rootNode, rng) => {\n const parts = getSplit(target, rng);\n const parentElm = target.parentNode;\n if (parentElm) {\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, li => {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n }\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n const insertBefore$1 = (target, elms, rootNode) => {\n const parentElm = target.parentNode;\n if (parentElm) {\n Tools.each(elms, elm => {\n parentElm.insertBefore(elm, target);\n });\n }\n return findFirstIn(target, rootNode);\n };\n const insertAfter$1 = (target, elms, rootNode, dom) => {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n const domFragment = toDomFragment(dom, serializer, fragment);\n const liTarget = getParentLi(dom, rng.startContainer);\n const liElms = trimListItems(listItems(domFragment.firstChild));\n const BEGINNING = 1, END = 2;\n const rootNode = dom.getRoot();\n const isAt = location => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(dom.getRoot());\n const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n };\n if (!liTarget) {\n return null;\n } else if (isAt(BEGINNING)) {\n return insertBefore$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(liTarget, liElms, rootNode, dom);\n } else {\n return insertMiddle(liTarget, liElms, rootNode, rng);\n }\n };\n\n const mergeableWrappedElements = ['pre'];\n const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n var _a;\n const firstNode = fragment.firstChild;\n const lastNode = fragment.lastChild;\n const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n const isPastingSingleElement = firstNode === last;\n const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n if (isPastingSingleElement && isWrappedElement) {\n const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n } else {\n return false;\n }\n };\n const isTableCell = isTableCell$3;\n const isTableCellContentSelected = (dom, rng, cell) => {\n if (isNonNullable(cell)) {\n const endCell = dom.getParent(rng.endContainer, isTableCell);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n const validInsertion = (editor, value, parentNode) => {\n var _a;\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n const node = parentNode.firstChild;\n const node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm) => {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n };\n const reduceInlineTextElements = (editor, merge) => {\n const textInlineElements = editor.schema.getTextInlineElements();\n const dom = editor.dom;\n if (merge) {\n const root = editor.getBody();\n const elementUtils = ElementUtils(editor);\n Tools.each(dom.select('*[data-mce-fragment]'), node => {\n const isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n if (isInline && hasInheritableStyles(dom, node)) {\n for (let parentNode = node.parentElement; isNonNullable(parentNode) && parentNode !== root; parentNode = parentNode.parentElement) {\n const styleConflict = hasStyleConflict(dom, node, parentNode);\n if (styleConflict) {\n break;\n }\n if (elementUtils.compare(parentNode, node)) {\n dom.remove(node, true);\n break;\n }\n }\n }\n });\n }\n };\n const markFragmentElements = fragment => {\n let node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n const unmarkFragmentElements = elm => {\n Tools.each(elm.getElementsByTagName('*'), elm => {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n const isPartOfFragment = node => {\n return !!node.getAttribute('data-mce-fragment');\n };\n const canHaveChildren = (editor, node) => {\n return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n };\n const moveSelectionToMarker = (editor, marker) => {\n var _a, _b, _c;\n let nextRng;\n const dom = editor.dom;\n const selection = editor.selection;\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n dom.remove(marker);\n selection.select(parentEditableElm);\n return;\n }\n let rng = dom.createRng();\n const node = marker.previousSibling;\n if (isText$a(node)) {\n rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n const node2 = marker.nextSibling;\n if (isText$a(node2)) {\n node.appendData(node2.data);\n (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n const findNextCaretRng = rng => {\n let caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n };\n const parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n empty(SugarElement.fromDom(parentBlock));\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n const deleteSelectedContent = editor => {\n const dom = editor.dom;\n const rng = normalize(editor.selection.getRng());\n editor.selection.setRng(rng);\n const startCell = dom.getParent(rng.startContainer, isTableCell);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else {\n editor.getDoc().execCommand('Delete', false);\n }\n };\n const insertHtmlAtCaret = (editor, value, details) => {\n var _a, _b, _c;\n const selection = editor.selection;\n const dom = editor.dom;\n const parser = editor.parser;\n const merge = details.merge;\n const serializer = HtmlSerializer({ validate: true }, editor.schema);\n const bookmarkHtml = '';\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n let rng = selection.getRng();\n const caretElement = rng.startContainer;\n const body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n deleteSelectedContent(editor);\n }\n const parentNode = selection.getNode();\n const parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n const fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n if (rng) {\n selection.setRng(rng);\n }\n return value;\n }\n if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n }\n markFragmentElements(fragment);\n let node = fragment.lastChild;\n if (node && node.attr('id') === 'mce_marker') {\n const marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (node.parent && editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n editor.selection.setContent(bookmarkHtml);\n let parentNode = selection.getNode();\n let tempNode;\n const rootNode = editor.getBody();\n if (isDocument$1(parentNode)) {\n parentNode = tempNode = rootNode;\n } else {\n tempNode = parentNode;\n }\n while (tempNode && tempNode !== rootNode) {\n parentNode = tempNode;\n tempNode = tempNode.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n const root = parser.parse(value);\n for (let markerNode = root; markerNode; markerNode = markerNode.walk()) {\n if (markerNode.attr('id') === 'mce_marker') {\n markerNode.replace(fragment);\n break;\n }\n }\n const toExtract = fragment.children();\n const parent = (_c = (_b = fragment.parent) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : root.name;\n fragment.unwrap();\n const invalidChildren = filter$5(toExtract, node => !editor.schema.isValidChild(parent, node.name));\n cleanInvalidNodes(invalidChildren, editor.schema);\n filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n value = serializer.serialize(root);\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(dom, selection.getStart());\n return value;\n };\n\n const isTreeNode = content => content instanceof AstNode;\n\n const moveSelection = editor => {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const setEditorHtml = (editor, html, noSelection) => {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n const setContentString = (editor, body, content, args) => {\n if (content.length === 0 || /^\\s+$/.test(content)) {\n const padd = '
    ';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n } else if (!content) {\n content = padd;\n }\n setEditorHtml(editor, content, args.no_selection);\n return {\n content,\n html: content\n };\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content: trimmedHtml,\n html: trimmedHtml\n };\n }\n };\n const setContentTree = (editor, body, content, args) => {\n filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content,\n html: trimmedHtml\n };\n };\n const setContentInternal = (editor, content, args) => {\n return Optional.from(editor.getBody()).map(body => {\n if (isTreeNode(content)) {\n return setContentTree(editor, body, content, args);\n } else {\n return setContentString(editor, body, content, args);\n }\n }).getOr({\n content,\n html: isTreeNode(args.content) ? '' : args.content\n });\n };\n\n const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n };\n\n const isEq$3 = isEq$5;\n const matchesUnInheritedFormatSelector = (ed, node, name) => {\n const formatList = ed.formatter.get(name);\n if (formatList) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n return true;\n }\n }\n }\n return false;\n };\n const matchParents = (editor, node, name, vars, similar) => {\n const root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n const matchedNode = editor.dom.getParent(node, elm => {\n if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n return true;\n }\n return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n });\n return !!matchNode(editor, matchedNode, name, vars, similar);\n };\n const matchName = (dom, node, format) => {\n if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n return true;\n }\n if (isBlockFormat(format) && isEq$3(node, format.block)) {\n return true;\n }\n if (isSelectorFormat(format)) {\n return isElement$6(node) && dom.is(node, format.selector);\n }\n return false;\n };\n const matchItems = (dom, node, format, itemName, similar, vars) => {\n const items = format[itemName];\n const matchAttributes = itemName === 'attributes';\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (!isArrayLike(items)) {\n for (const key in items) {\n if (has$2(items, key)) {\n const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n const expectedValue = replaceVars(items[key], vars);\n const isEmptyValue = isNullable(value) || isEmpty$3(value);\n if (isEmptyValue && isNullable(expectedValue)) {\n continue;\n }\n if (similar && isEmptyValue && !format.exact) {\n return false;\n }\n if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (let i = 0; i < items.length; i++) {\n if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n const matchNode = (ed, node, name, vars, similar) => {\n const formatList = ed.formatter.get(name);\n const dom = ed.dom;\n if (formatList && isElement$6(node)) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n const classes = format.classes;\n if (classes) {\n for (let x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n return undefined;\n };\n const match$2 = (editor, name, vars, node, similar) => {\n if (node) {\n return matchParents(editor, node, name, vars, similar);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars, similar)) {\n return true;\n }\n const startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars, similar)) {\n return true;\n }\n }\n return false;\n };\n const matchAll = (editor, names, vars) => {\n const matchedFormatNames = [];\n const checkedMap = {};\n const startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, node => {\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n const closest$1 = (editor, names) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$2(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n };\n const canApply = (editor, name) => {\n const formatList = editor.formatter.get(name);\n const dom = editor.dom;\n if (formatList) {\n const startNode = editor.selection.getStart();\n const parents = getParents$2(dom, startNode);\n for (let x = formatList.length - 1; x >= 0; x--) {\n const format = formatList[x];\n if (!isSelectorFormat(format)) {\n return true;\n }\n for (let i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], format.selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n const matchSimilar = isVariableFormatName(editor, name);\n if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n return acc.concat([name]);\n } else {\n return acc;\n }\n }, []);\n\n const ZWSP = ZWSP$1;\n const importNode = (ownerDocument, node) => {\n return ownerDocument.importNode(node, true);\n };\n const getEmptyCaretContainers = node => {\n const nodes = [];\n let tempNode = node;\n while (tempNode) {\n if (isText$a(tempNode) && tempNode.data !== ZWSP || tempNode.childNodes.length > 1) {\n return [];\n }\n if (isElement$6(tempNode)) {\n nodes.push(tempNode);\n }\n tempNode = tempNode.firstChild;\n }\n return nodes;\n };\n const isCaretContainerEmpty = node => {\n return getEmptyCaretContainers(node).length > 0;\n };\n const findFirstTextNode = node => {\n if (node) {\n const walker = new DomTreeWalker(node, node);\n for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n if (isText$a(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const createCaretContainer = fill => {\n const caretContainer = SugarElement.fromTag('span');\n setAll$1(caretContainer, {\n 'id': CARET_ID,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append$1(caretContainer, SugarElement.fromText(ZWSP));\n }\n return caretContainer;\n };\n const trimZwspFromCaretContainer = caretContainerNode => {\n const textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.data.charAt(0) === ZWSP) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n const removeCaretContainerNode = (editor, node, moveCaret = true) => {\n const dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret);\n } else {\n const rng = selection.getRng();\n const block = dom.getParent(node, dom.isBlock);\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n const textNode = trimZwspFromCaretContainer(node);\n dom.remove(node, true);\n if (startContainer === textNode && startOffset > 0) {\n rng.setStart(textNode, startOffset - 1);\n }\n if (endContainer === textNode && endOffset > 0) {\n rng.setEnd(textNode, endOffset - 1);\n }\n if (block && dom.isEmpty(block)) {\n fillWithPaddingBr(SugarElement.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n const removeCaretContainer = (editor, node, moveCaret = true) => {\n const dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n var _a, _b;\n const dom = editor.dom;\n const block = dom.getParent(formatNode, curry(isTextBlock$1, editor));\n if (block && dom.isEmpty(block)) {\n (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n const appendNode = (parentNode, node) => {\n parentNode.appendChild(node);\n return node;\n };\n const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n var _a;\n const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n };\n const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n const formatter = editor.formatter;\n const dom = editor.dom;\n const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n if (uniqueFormats.length > 0) {\n const clonedFormatNode = formatNode.cloneNode(false);\n dom.add(caretContainer, clonedFormatNode);\n formatter.remove(name, vars, clonedFormatNode, similar);\n dom.remove(clonedFormatNode);\n return Optional.some(clonedFormatNode);\n } else {\n return Optional.none();\n }\n };\n const applyCaretFormat = (editor, name, vars) => {\n let caretContainer;\n const selection = editor.selection;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const selectionRng = selection.getRng();\n let offset = selectionRng.startOffset;\n const container = selectionRng.startContainer;\n const text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n const bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n let rng = expandRng(editor, selectionRng, formatList);\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== ZWSP) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n const removeCaretFormat = (editor, name, vars, similar) => {\n const dom = editor.dom;\n const selection = editor.selection;\n let hasContentAfter = false;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n let node = container;\n if (isText$a(container)) {\n if (offset !== container.data.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n const parents = [];\n let formatNode;\n while (node) {\n if (matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n const bookmark = selection.getBookmark();\n rng.collapse(true);\n let expandedRng = expandRng(editor, rng, formatList, true);\n expandedRng = split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n const newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n const caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n if (caretContainer) {\n removeCaretContainerNode(editor, caretContainer, false);\n }\n selection.setCursorLocation(caretTextNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n const disableCaretContainer = (editor, keyCode) => {\n const selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n const setup$u = editor => {\n editor.on('mouseup keydown', e => {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n const replaceWithCaretFormat = (targetNode, formatNodes) => {\n const caretContainer = createCaretContainer(false);\n const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n before$3(SugarElement.fromDom(targetNode), caretContainer);\n remove$6(SugarElement.fromDom(targetNode));\n return CaretPosition(innerMost, 0);\n };\n const isFormatElement = (editor, element) => {\n const inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n };\n const isEmptyCaretFormatElement = element => {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n const postProcessHooks = {};\n const isPre = matchNodeNames(['pre']);\n const addPostProcessHook = (name, hook) => {\n const hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n const postProcess$1 = (name, editor) => {\n if (has$2(postProcessHooks, name)) {\n each$e(postProcessHooks[name], hook => {\n hook(editor);\n });\n }\n };\n addPostProcessHook('pre', editor => {\n const rng = editor.selection.getRng();\n const hasPreSibling = blocks => pre => {\n const prev = pre.previousSibling;\n return isPre(prev) && contains$2(blocks, prev);\n };\n const joinPre = (pre1, pre2) => {\n const sPre2 = SugarElement.fromDom(pre2);\n const doc = documentOrOwner(sPre2).dom;\n remove$6(sPre2);\n append(SugarElement.fromDom(pre1), [\n SugarElement.fromTag('br', doc),\n SugarElement.fromTag('br', doc),\n ...children(sPre2)\n ]);\n };\n if (!rng.collapsed) {\n const blocks = editor.selection.getSelectedBlocks();\n const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n each$e(preBlocks, pre => {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n const listItemStyles = [\n 'fontWeight',\n 'fontStyle',\n 'color',\n 'fontSize',\n 'fontFamily'\n ];\n const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n const getExpandedListItemFormat = (formatter, format) => {\n const formatList = formatter.get(format);\n return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n };\n const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n const isRngEndAtEndOfElement = (rng, elm) => {\n return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n };\n const isEditableListItem = dom => elm => isListItem$2(elm) && dom.getContentEditableParent(elm) !== 'false';\n const getFullySelectedBlocks = selection => {\n const blocks = selection.getSelectedBlocks();\n const rng = selection.getRng();\n if (selection.isCollapsed()) {\n return [];\n }\n if (blocks.length === 1) {\n return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n } else {\n const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n const last = last$3(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n const middle = blocks.slice(1, -1);\n return first.concat(middle).concat(last);\n }\n };\n const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n const each$8 = Tools.each;\n const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n const findElementSibling = (node, siblingName) => {\n for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$a(sibling) && isNotEmpty(sibling.data)) {\n return node;\n }\n if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n const mergeSiblingsNodes = (editor, prev, next) => {\n const elementUtils = ElementUtils(editor);\n const isPrevEditable = isElement$6(prev) && isEditable$3(prev);\n const isNextEditable = isElement$6(next) && isEditable$3(next);\n if (isPrevEditable && isNextEditable) {\n const prevSibling = findElementSibling(prev, 'previousSibling');\n const nextSibling = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prevSibling, nextSibling)) {\n for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n const tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prevSibling.appendChild(tmpSibling);\n }\n editor.dom.remove(nextSibling);\n Tools.each(Tools.grep(nextSibling.childNodes), node => {\n prevSibling.appendChild(node);\n });\n return prevSibling;\n }\n }\n return next;\n };\n const mergeSiblings = (editor, format, vars, node) => {\n var _a;\n if (node && format.merge_siblings !== false) {\n const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n const clearChildStyles = (dom, format, node) => {\n if (format.clear_child_styles) {\n const selector = format.links ? '*:not(a)' : '*';\n each$8(dom.select(selector, node), childNode => {\n if (isElementNode(childNode) && isEditable$3(childNode)) {\n each$8(format.styles, (_value, name) => {\n dom.setStyle(childNode, name, '');\n });\n }\n });\n }\n };\n const processChildElements = (node, filter, process) => {\n each$8(node.childNodes, node => {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n const unwrapEmptySpan = (dom, node) => {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n const applyStyle = (dom, name, value) => node => {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n\n const removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n const MCE_ATTR_RE = /^(src|href|style)$/;\n const each$7 = Tools.each;\n const isEq$2 = isEq$5;\n const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n const getContainer = (ed, rng, start) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$6(container)) {\n const lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$a(container) && start && offset >= container.data.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$a(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n const normalizeTableSelection = (node, start) => {\n const prop = start ? 'firstChild' : 'lastChild';\n const childNode = node[prop];\n if (isTableCellOrRow(node) && childNode) {\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n const wrap$1 = (dom, node, name, attrs) => {\n var _a;\n const wrapper = dom.create(name, attrs);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n const wrapWithSiblings = (dom, node, next, name, attrs) => {\n const start = SugarElement.fromDom(node);\n const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n const siblings = next ? nextSiblings(start) : prevSiblings(start);\n append(wrapper, siblings);\n if (next) {\n before$3(start, wrapper);\n prepend(wrapper, start);\n } else {\n after$4(start, wrapper);\n append$1(wrapper, start);\n }\n return wrapper.dom;\n };\n const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n const removeNode = (ed, node, format) => {\n const parentNode = node.parentNode;\n let rootBlockElm;\n const dom = ed.dom;\n const forcedRootBlock = getForcedRootBlock(ed);\n if (isBlockFormat(format)) {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$2(node, format.list_block)) {\n each$e(from(node.childNodes), node => {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = null;\n }\n });\n }\n }\n }\n if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n const processFormatAttrOrStyle = (name, value, vars) => {\n if (isNumber(name)) {\n return {\n name: value,\n value: null\n };\n } else {\n return {\n name,\n value: replaceVars(value, vars)\n };\n }\n };\n const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n if (dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n };\n const removeStyles = (dom, elm, format, vars, compareNode) => {\n let stylesModified = false;\n each$7(format.styles, (value, name) => {\n const {\n name: styleName,\n value: styleValue\n } = processFormatAttrOrStyle(name, value, vars);\n const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n dom.setStyle(elm, styleName, '');\n }\n stylesModified = true;\n });\n if (stylesModified) {\n removeEmptyStyleAttributeIfNeeded(dom, elm);\n }\n };\n const removeListStyleFormats = (editor, name, vars) => {\n if (name === 'removeformat') {\n each$e(getPartiallySelectedListItems(editor.selection), li => {\n each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n });\n } else {\n getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n });\n }\n };\n const removeFormatInternal = (ed, format, vars, node, compareNode) => {\n const dom = ed.dom;\n const elementUtils = ElementUtils(ed);\n if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n return removeResult.keep();\n }\n if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n const elm = node;\n const preserveAttributes = format.preserve_attributes;\n if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n dom.removeAllAttribs(elm);\n each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n removeStyles(dom, elm, format, vars, compareNode);\n each$7(format.attributes, (value, name) => {\n const {\n name: attrName,\n value: attrValue\n } = processFormatAttrOrStyle(name, value, vars);\n if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n if (attrName === 'class') {\n const currentValue = dom.getAttrib(elm, attrName);\n if (currentValue) {\n let valueOut = '';\n each$e(currentValue.split(/\\s+/), cls => {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, attrName, valueOut);\n return;\n }\n }\n }\n if (MCE_ATTR_RE.test(attrName)) {\n elm.removeAttribute('data-mce-' + attrName);\n }\n if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(attrName);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (attrName === 'class') {\n elm.removeAttribute('className');\n }\n elm.removeAttribute(attrName);\n }\n });\n each$7(format.classes, value => {\n value = replaceVars(value, vars);\n if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n const attrs = dom.getAttribs(elm);\n for (let i = 0; i < attrs.length; i++) {\n const attrName = attrs[i].nodeName;\n if (!elementUtils.isAttributeInternal(attrName)) {\n return removeResult.keep();\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode(ed, elm, format);\n return removeResult.removed();\n }\n return removeResult.keep();\n };\n const removeFormat$1 = (ed, format, vars, node, compareNode) => removeFormatInternal(ed, format, vars, node, compareNode).fold(never, newName => {\n ed.dom.rename(node, newName);\n return true;\n }, always);\n const findFormatRoot = (editor, container, name, vars, similar) => {\n let formatRoot;\n if (container.parentNode) {\n each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n const format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n }\n return formatRoot;\n };\n const removeFormatFromClone = (editor, format, vars, clone) => removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n const fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n var _a, _b;\n let lastClone;\n let firstClone;\n const dom = editor.dom;\n if (formatRoot) {\n const formatRootParent = formatRoot.parentNode;\n for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n let clone = dom.clone(parent, false);\n for (let i = 0; i < formatList.length; i++) {\n clone = removeFormatFromClone(editor, formatList[i], vars, clone);\n if (clone === null) {\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n }\n if (lastClone && firstClone) {\n (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (isInlineFormat(format)) {\n mergeSiblings(editor, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n const remove$2 = (ed, name, vars, node, similar) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const dom = ed.dom;\n const selection = ed.selection;\n const splitToFormatRoot = container => {\n const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n const removeNodeFormat = node => exists(formatList, fmt => removeFormat$1(ed, fmt, vars, node, node));\n const process = node => {\n const children = from(node.childNodes);\n const removed = removeNodeFormat(node);\n const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n const parentNode = node.parentNode;\n if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n removeNodeFormat(parentNode);\n }\n if (format.deep) {\n if (children.length) {\n for (let i = 0; i < children.length; i++) {\n process(children[i]);\n }\n }\n }\n const textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each$e(textDecorations, decoration => {\n if (isElement$6(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeFormat$1(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, undefined, node);\n }\n });\n };\n const unwrap = start => {\n const node = dom.get(start ? '_start' : '_end');\n if (node) {\n let out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$a(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n } else {\n return null;\n }\n };\n const removeRngStyle = rng => {\n let startContainer;\n let endContainer;\n let expandedRng = expandRng(ed, rng, formatList, rng.collapsed);\n if (format.split) {\n expandedRng = split(expandedRng);\n startContainer = getContainer(ed, expandedRng, true);\n endContainer = getContainer(ed, expandedRng);\n if (startContainer !== endContainer) {\n startContainer = normalizeTableSelection(startContainer, true);\n endContainer = normalizeTableSelection(endContainer, false);\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$1(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$1(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n const newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$3(dom, newRng, nodes => {\n each$e(nodes, n => {\n if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n splitToFormatRoot(n);\n }\n });\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n expandedRng.startOffset = dom.nodeIndex(startContainer);\n expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n walk$3(dom, expandedRng, nodes => {\n each$e(nodes, process);\n });\n };\n if (node) {\n if (isNode(node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n fireFormatRemove(ed, name, node, vars);\n return;\n }\n if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n removeListStyleFormats(ed, name, vars);\n fireFormatRemove(ed, name, node, vars);\n };\n\n const each$6 = Tools.each;\n const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n const processTextDecorationsAndColor = n => {\n if (isElement$6(n) && isElement$6(n.parentNode) && isEditable$3(n)) {\n const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', parentTextDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', null);\n }\n }\n };\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n processTextDecorationsAndColor(node);\n }\n };\n const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n if (format.styles && format.styles.backgroundColor) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && isEditable$3(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n const mergeSubSup = (dom, format, vars, node) => {\n if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && isEditable$3(elm), applyStyle(dom, 'fontSize', ''));\n const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), isEditable$3);\n dom.remove(inverseTagDescendants, true);\n }\n };\n const mergeWithChildren = (editor, formatList, vars, node) => {\n each$6(formatList, format => {\n if (isInlineFormat(format)) {\n each$6(editor.dom.select(format.inline, node), child => {\n if (isElementNode(child)) {\n removeFormat$1(editor, format, vars, child, format.exact ? child : null);\n }\n });\n }\n clearChildStyles(editor.dom, format, node);\n });\n };\n const mergeWithParents = (editor, format, name, vars, node) => {\n const parentNode = node.parentNode;\n if (matchNode(editor, parentNode, name, vars)) {\n if (removeFormat$1(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents && parentNode) {\n editor.dom.getParent(parentNode, parent => {\n if (matchNode(editor, parent, name, vars)) {\n removeFormat$1(editor, format, vars, node);\n return true;\n } else {\n return false;\n }\n });\n }\n };\n\n const each$5 = Tools.each;\n const canFormatBR = (editor, format, node, parentName) => {\n if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n const validBRParentElements = getTextRootBlockElements(editor.schema);\n const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n const applyStyles = (dom, elm, format, vars) => {\n each$5(format.styles, (value, name) => {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (format.styles) {\n const styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n };\n const applyFormat$1 = (ed, name, vars, node) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const isCollapsed = !node && ed.selection.isCollapsed();\n const dom = ed.dom;\n const selection = ed.selection;\n const setElementFormat = (elm, fmt = format) => {\n if (isFunction(fmt.onformat)) {\n fmt.onformat(elm, fmt, vars, node);\n }\n applyStyles(dom, elm, fmt, vars);\n each$5(fmt.attributes, (value, name) => {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$5(fmt.classes, value => {\n const newValue = replaceVars(value, vars);\n if (!dom.hasClass(elm, newValue)) {\n dom.addClass(elm, newValue);\n }\n });\n };\n const applyNodeStyle = (formatList, node) => {\n let found = false;\n each$5(formatList, format => {\n if (!isSelectorFormat(format)) {\n return false;\n }\n if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n return true;\n }\n if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n return true;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n return true;\n });\n return found;\n };\n const createWrapElement = wrapName => {\n if (isString(wrapName)) {\n const wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n return wrapElm;\n } else {\n return null;\n }\n };\n const applyRngStyle = (dom, rng, nodeSpecific) => {\n const newWrappers = [];\n let contentEditable = true;\n const wrapName = format.inline || format.block;\n const wrapElm = createWrapElement(wrapName);\n const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n const canRenameBlock = (nodeName, parentName, isEditableDescendant) => {\n const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName);\n return isEditableDescendant && isValidBlockFormatForNode;\n };\n const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n const nodeName = node.nodeName.toLowerCase();\n const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n const isZwsp$1 = !nodeSpecific && isText$a(node) && isZwsp(node.data);\n const isCaret = isCaretNode(node);\n const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp$1 && !isCaret && isCorrectFormatForNode;\n };\n walk$3(dom, rng, nodes => {\n let currentWrapElm;\n const process = node => {\n let hasContentEditableState = false;\n let lastContentEditable = contentEditable;\n let isWrappableNoneditableElm = false;\n const nodeName = node.nodeName.toLowerCase();\n const parentNode = node.parentNode;\n const parentName = parentNode.nodeName.toLowerCase();\n const contentEditableValue = dom.getContentEditable(node);\n if (isNonNullable(contentEditableValue)) {\n lastContentEditable = contentEditable;\n contentEditable = contentEditableValue === 'true';\n hasContentEditableState = true;\n isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n }\n const isEditableDescendant = contentEditable && !hasContentEditableState;\n if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (isMatchingWrappingBlock(node)) {\n currentWrapElm = null;\n return;\n }\n if (canRenameBlock(nodeName, parentName, isEditableDescendant)) {\n const elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n let found = applyNodeStyle(formatList, node);\n if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n found = applyNodeStyle(formatList, parentNode);\n }\n if (!isInlineFormat(format) || found) {\n currentWrapElm = null;\n return;\n }\n }\n if (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n if (isWrappableNoneditableElm && hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$e(from(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$e(nodes, process);\n });\n if (format.links === true) {\n each$e(newWrappers, node => {\n const process = node => {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$e(from(node.childNodes), process);\n };\n process(node);\n });\n }\n each$e(newWrappers, node => {\n const getChildCount = node => {\n let count = 0;\n each$e(node.childNodes, node => {\n if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n const mergeStyles = node => {\n const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n return childElement.map(child => {\n const clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n return clone;\n }).getOr(node);\n };\n const childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n mergeWithChildren(ed, formatList, vars, node);\n mergeWithParents(ed, format, name, vars, node);\n mergeBackgroundColorAndFontSize(dom, format, vars, node);\n mergeTextDecorationsAndColor(dom, format, vars, node);\n mergeSubSup(dom, format, vars, node);\n mergeSiblings(ed, format, vars, node);\n }\n });\n };\n const targetNode = isNode(node) ? node : selection.getNode();\n if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n node = targetNode;\n applyNodeStyle(formatList, node);\n fireFormatApply(ed, name, node, vars);\n return;\n }\n if (format) {\n if (node) {\n if (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(ed, rng, formatList), true);\n }\n } else {\n applyRngStyle(dom, node, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n selection.setRng(normalize(selection.getRng()));\n preserveSelection(ed, () => {\n runOnRanges(ed, (selectionRng, fake) => {\n const expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n applyRngStyle(dom, expandedRng, false);\n });\n }, always);\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n });\n }\n postProcess$1(name, ed);\n }\n fireFormatApply(ed, name, node, vars);\n };\n\n const hasVars = value => has$2(value, 'vars');\n const setup$t = (registeredFormatListeners, editor) => {\n registeredFormatListeners.set({});\n editor.on('NodeChange', e => {\n updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n });\n editor.on('FormatApply FormatRemove', e => {\n const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n });\n };\n const fallbackElement = editor => editor.selection.getStart();\n const matchingNode = (editor, parents, format, similar, vars) => {\n const isMatchingNode = node => {\n const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n return !isUndefined(matchingFormat);\n };\n const isUnableToMatch = node => {\n if (matchesUnInheritedFormatSelector(editor, node, format)) {\n return true;\n } else {\n if (!similar) {\n return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n } else {\n return false;\n }\n }\n };\n return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n };\n const getParents = (editor, elm) => {\n const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$2(node));\n };\n const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n const parents = getParents(editor, elm);\n each$d(registeredCallbacks, (data, format) => {\n const runIfChanged = spec => {\n const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n const isSet = match.isSome();\n if (spec.state.get() !== isSet) {\n spec.state.set(isSet);\n const node = match.getOr(elm);\n if (hasVars(spec)) {\n spec.callback(isSet, {\n node,\n format,\n parents\n });\n } else {\n each$e(spec.callbacks, callback => callback(isSet, {\n node,\n format,\n parents\n }));\n }\n }\n };\n each$e([\n data.withSimilar,\n data.withoutSimilar\n ], runIfChanged);\n each$e(data.withVars, runIfChanged);\n });\n };\n const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => {\n const group = get$a(formatChangeItems, format).getOrThunk(() => {\n const base = {\n withSimilar: {\n state: Cell(false),\n similar: true,\n callbacks: []\n },\n withoutSimilar: {\n state: Cell(false),\n similar: false,\n callbacks: []\n },\n withVars: []\n };\n formatChangeItems[format] = base;\n return base;\n });\n const getCurrent = () => {\n const parents = getParents(editor);\n return matchingNode(editor, parents, format, similar, vars).isSome();\n };\n if (isUndefined(vars)) {\n const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n toAppendTo.callbacks.push(callback);\n if (toAppendTo.callbacks.length === 1) {\n toAppendTo.state.set(getCurrent());\n }\n } else {\n group.withVars.push({\n state: Cell(getCurrent()),\n similar,\n vars,\n callback\n });\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n const removeListeners = (registeredFormatListeners, formats, callback) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n formatChangeItems[format] = {\n withSimilar: {\n ...group.withSimilar,\n callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n },\n withoutSimilar: {\n ...group.withoutSimilar,\n callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n },\n withVars: filter$5(group.withVars, item => item.callback !== callback)\n };\n }));\n registeredFormatListeners.set(formatChangeItems);\n };\n const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n };\n\n const toggle = (editor, name, vars, node) => {\n const fmt = editor.formatter.get(name);\n if (fmt) {\n if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$2(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n }\n };\n\n function _typeof(obj) {\n '@babel/helpers - typeof';\n return _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && 'function' == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n }, _typeof(obj);\n }\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n function _isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct)\n return false;\n if (Reflect.construct.sham)\n return false;\n if (typeof Proxy === 'function')\n return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {\n }));\n return true;\n } catch (e) {\n return false;\n }\n }\n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class)\n _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr))\n return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null || iter['@@iterator'] != null)\n return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o)\n return;\n if (typeof o === 'string')\n return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor)\n n = o.constructor.name;\n if (n === 'Map' || n === 'Set')\n return Array.from(o);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length)\n len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++)\n arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze, seal = Object.seal, create$8 = Object.create;\n var _ref = typeof Reflect !== 'undefined' && Reflect, apply = _ref.apply, construct = _ref.construct;\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return _construct(Func, _toConsumableArray(args));\n };\n }\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n var regExpTest = unapply(RegExp.prototype.test);\n var typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n function addToSet(set, array) {\n if (setPrototypeOf) {\n setPrototypeOf(set, null);\n }\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n function clone(object) {\n var newObject = create$8(null);\n var property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n }\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n return fallbackValue;\n }\n var html$1 = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr'\n ]);\n var svg$1 = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern'\n ]);\n var svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence'\n ]);\n var svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use'\n ]);\n var mathMl$1 = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover'\n ]);\n var mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none'\n ]);\n var text = freeze(['#text']);\n var html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot'\n ]);\n var svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan'\n ]);\n var mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns'\n ]);\n var xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink'\n ]);\n var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm);\n var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n var DOCTYPE_NAME = seal(/^html$/i);\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html) {\n return html;\n }\n });\n } catch (_) {\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n DOMPurify.version = '2.3.8';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== 9) {\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n var originalDocument = window.document;\n var document = window.document;\n var DocumentFragment = window.DocumentFragment, HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter, _window$NamedNodeMap = window.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window.HTMLFormElement, DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n var ElementPrototype = Element.prototype;\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n var _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {\n }\n var hooks = {};\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n var FORBID_TAGS = null;\n var FORBID_ATTR = null;\n var ALLOW_ARIA_ATTR = true;\n var ALLOW_DATA_ATTR = true;\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n var SAFE_FOR_TEMPLATES = false;\n var WHOLE_DOCUMENT = false;\n var SET_CONFIG = false;\n var FORCE_BODY = false;\n var RETURN_DOM = false;\n var RETURN_DOM_FRAGMENT = false;\n var RETURN_TRUSTED_TYPE = false;\n var SANITIZE_DOM = true;\n var KEEP_CONTENT = true;\n var IN_PLACE = false;\n var USE_PROFILES = {};\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp'\n ]);\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track'\n ]);\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns'\n ]);\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n var PARSER_MEDIA_TYPE;\n var SUPPORTED_PARSER_MEDIA_TYPES = [\n 'application/xhtml+xml',\n 'text/html'\n ];\n var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n var transformCaseFunc;\n var CONFIG = null;\n var formElement = document.createElement('form');\n var isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n if (!cfg || _typeof(cfg) !== 'object') {\n cfg = {};\n }\n cfg = clone(cfg);\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n RETURN_DOM = cfg.RETURN_DOM || false;\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n FORCE_BODY = cfg.FORCE_BODY || false;\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n IN_PLACE = cfg.IN_PLACE || false;\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) {\n return x;\n } : stringToLowerCase;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, [\n 'html',\n 'head',\n 'body'\n ]);\n }\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext'\n ]);\n var HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml'\n ]);\n var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script'\n ]);\n var ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n if (element.namespaceURI === SVG_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n return false;\n };\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {\n }\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {\n }\n }\n }\n };\n var _initDocument = function _initDocument(dirty) {\n var doc;\n var leadingWhitespace;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n dirty = '' + dirty + '';\n }\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {\n }\n }\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n }\n }\n var body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n var _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function');\n };\n var _isNode = function _isNode(object) {\n return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content;\n _executeHook('beforeSanitizeElements', currentNode, null);\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n _forceRemove(currentNode);\n return true;\n }\n var tagName = transformCaseFunc(currentNode.nodeName);\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n if (tagName === 'select' && regExpTest(/