{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./src/components/tinymce/plugins/floatingtoolbar/index.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/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/cssfilter/lib/index.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/hr/index.js","webpack:///./node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/tinymce/plugins/visualchars/index.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/plugins/textpattern/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/xss/lib/xss.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/xss/lib/parser.js","webpack:///./node_modules/xss/lib/index.js","webpack:///./src/components/common/Editor.vue?e7a1","webpack:///./node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/plugins/save/index.js","webpack:///./node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/tinymce/plugins/autoresize/index.js","webpack:///./node_modules/tinymce/plugins/save/plugin.js","webpack:///./src/components/common/Editor.vue?df38","webpack:///./src/components/common/Editor.vue","webpack:///./src/components/common/Editor.vue?9420","webpack:///./node_modules/tinymce/plugins/textpattern/index.js","webpack:///./node_modules/cssfilter/lib/default.js","webpack:///./node_modules/tinymce/plugins/paste/plugin.js","webpack:///./src/components/tinymce/langs/pl.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/cssfilter/lib/util.js","webpack:///./src/settings/permissions.ts","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/lodash/head.js","webpack:///./node_modules/cssfilter/lib/parser.js","webpack:///./node_modules/tinymce/plugins/autoresize/plugin.js","webpack:///./node_modules/tinymce/plugins/paste/index.js","webpack:///./node_modules/cssfilter/lib/css.js","webpack:///./node_modules/xss/lib/default.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/plugins/visualchars/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/tinymce/plugins/directionality/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/xss/lib/util.js","webpack:///./node_modules/tinymce/icons/default/index.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/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","webpack:///./src/components/tinymce/plugins/floatingtoolbar/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/index.js"],"names":["noop","noarg","f","compose","fa","fb","args","_i","arguments","length","apply","compose1","fbc","fab","a","constant","value","identity","x","curry","fn","initialArgs","restArgs","all","concat","not","t","die","msg","Error","never","always","global$1","tinymce","util","Tools","resolve","__assign","Object","assign","s","i","n","p","prototype","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","Array","k","j","jl","SimpleResultType","none","NONE","eq","o","isNone","thunk","id","me","fold","_s","is","isSome","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","undefined","or","orThunk","map","each","bind","exists","forall","filter","equals","equals_","toArray","toString","some","constant_a","self","v","elementEq","b","from","Optional","typeOf","isPrototypeOf","constructor","name","String","isType","type","isSimpleType","isString","isObject","isArray","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","len","nativeSlice","slice","nativeIndexOf","nativePush","push","rawIndexOf","ts","xs","contains","range","num","chunk","array","size","eachr","partition","pass","fail","arr","foldr","acc","foldl","findUntil","until","find","findIndex","flatten","reverse","difference","a1","a2","mapToObject","sort","comparator","copy","get","head","last","from$1","findMap","_opt","_f","mapError","_","onValue","toOptional","isValue","isError","error","message","opt","onError","fromOption","err","Result","res","stype","serror","svalue","partition$1","results","values","errors","obj","val","map$1","Value","bind$1","bindError","toResult","fromResult","SimpleResult","keys","each$1","props","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","filter$1","mapToArray","find$1","get$1","key","has","hasNonNullableKey","generate","cases","constructors","adt","acase","count","keys$1","argLength","match","branches","branchKeys","join","allReqd","reqKey","foldArgs","target","log","label","console","params","Adt","hasOwnProperty$1","shallow","old","nu","deep","bothObjects","deepMerge","baseMerge","merger","objects","ret","curObject","merge","cached","called","strict","defaultedThunk","asOption","asDefaultedOptionThunk","mergeWithThunk","defaulted","fallback","mergeWith","base","partition$2","bothErrors","firstError","secondError","bothValues","result","exclude","fields","wrap","_a","wrapAll","keyvalues","kv","exclude$1","wrap$1","wrapAll$1","mergeValues","mergeErrors","consolidate","objs","partitions","mergeValues$1","mergeErrors$1","consolidateObj","consolidateArr","ResultCombine","formatObj","input","JSON","stringify","formatErrors","es","path","getErrorInfo","missingStrict","missingKey","missingBranch","branch","unsupportedFields","unsupported","custom","adt$1","field","state","strictAccess","fallbackAccess","fallbackThunk","optionAccess","optionDefaultedAccess","cExtractOne","strength","okey","presence","prop","bundle","av","extract","bundleAsOption","optValue","outcome","ov","baseThunk","instantiator","cExtract","valueThunk","getDelegate","value$1","validator","getSetKeys","objOfOnly","delegate","objOf","fieldNames","extra","fieldStrings","_instantiator","arrOf","oneOf","props_1","setOf","validateKeys","validatedKeys","validKeys","schema","vk","desc","processor","getP","anyValue","arrOfObj","chooseFrom","ch","vp","choose","choice","chosen","_anyValue","arrOfObj$1","objFields","arrOfVal","valueThunkOf","valueOf","setOf$1","errs","asRaw","extraction","errInfo","formatError","asRawOrDie","chooseProcessor","choose$1","thunkOf","anyValue$1","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","isPostMessageable","every","iter","callbackFn","next","done","postMessageable","validateEnum","strict$1","strictOf","strictNumber","strictString","strictStringEnum","strictBoolean","strictFunction","forbid","_v","strictObjOf","objSchema","strictArrayOfObj","strictArrayOf","option","optionOf","optionNumber","optionString","optionFunction","optionArrayOf","optionObjOf","optionObjOfOnly","defaulted$1","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedPostMsg","defaultedArrayOf","defaultedObjOf","state$1","Cell","initial","set","fromHtml","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","fromDom","fromTag","tag","node","fromText","text","createTextNode","dom","fromPoint","docElm","y","elementFromPoint","SugarElement","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiOS","test","isiPhone","isMobile","isAndroid","isTouch","isTablet","isPhone","iOSwebview","isSafari","isDesktop","isWebView","firstMatch","regexes","find$2","agent","major","minor","group","Number","replace","nu$1","detect","versionRegexes","cleanedAgent","toLowerCase","unknown","Version","detect$1","candidates","candidate","search","detectBrowser","browsers","version","current","detectOs","oses","UaString","checkRange","str","substr","start","contains$1","endsWith","suffix","blank","trim","normalVersionRegex","checkContains","uastring","PlatformInfo","edge","chrome","ie","opera","firefox","safari","unknown$1","nu$2","info","isBrowser","isEdge","isChrome","isIE","isOpera","isFirefox","Browser","windows","ios","android","linux","osx","solaris","freebsd","chromeos","unknown$2","nu$3","isOS","isWindows","isOSX","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","detect$2","deviceType","PlatformDetection","query","window","matchMedia","matches","platform","navigator","detect$3","compareDocumentPosition","documentPositionContainedBy","Node","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","element","selector","nodeType","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","querySelectorAll","one","querySelector","eq$1","e1","e2","regularContains","d1","d2","ieContains","contains$2","ensureIsRoot","isRoot","ancestor","transform","stop","parentNode","el","transformed","closest","isSource","component","simulatedEvent","event","nu$4","parts","all$1","handlers","handler","any","read","can","abort","run","fuse","constant$1","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitionend","selectstart","prefixName","alloy","tap","focus","postBlur","postPaste","receive","execute","focusItem","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","changeTab","dismissTab","highlight","dehighlight","emit","dispatchWith","emitWith","properties","emitExecute","dispatch","data","getSystem","triggerEvent","dispatchEvent","derive","configs","predicate","preventDefault","prevent","runActionExtra","action","runOnName","runOnSourceName","redirectToUid","uid","getByUid","redirectee","redirectToPart","detail","partName","partUids","runWithTarget","ev","getByDom","closest$1","c","cutter","cut","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute","Function","nodeName","isType$1","isElement","isText","isDocument","isDocumentFragment","owner","ownerDocument","documentOrOwner","dos","documentElement","defaultView","parent","offsetParent","nextSibling","children","child","index","cs","firstChild","isShadowRoot","host","supported","Element","attachShadow","getRootNode","isSupported","getContentContainer","body","isInShadowRoot","getShadowRoot","getShadowHost","getOriginalEventTarget","isOpenShadowHost","composed","composedPath","shadowRoot","before","marker","parent$1","insertBefore","after","sibling","append","prepend","firstChild$1","appendChild","appendAt","before$1","elements","append$1","empty","textContent","rogue","remove","removeChild","unwrap","wrapper","children$1","fromHtml$1","get$2","content","owner$1","docDom","fragment","createDocumentFragment","contentElements","getOuter","container","clone","cloneNode","rawSet","setAttribute","set$1","setAll","attrs","get$3","getAttribute","getOpt","has$1","hasAttribute","remove$1","removeAttribute","original","isDeep","shallow$1","getHtml","isRecursive","originator","events","warn","DefaultEvents","freeze","__proto__","unique","generate$1","prefix","date","Date","time","getTime","random","Math","floor","idAttr","prefix$1","idAttr$1","write","writeOnly","defineProperty","writable","read$1","generate$2","make","NoContextApi","getComp","debugInfo","triggerFocus","triggerEscape","build","addToWorld","removeFromWorld","addToGui","removeFromGui","broadcast","broadcastOn","broadcastEvent","isConnected","singleton","markAsBehaviourApi","apiName","apiFunction","endIndex","openBracketIndex","parameters","substring","split","toFunctionAnnotation","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","premadeTag","premade","comp","getPremade","spec","makeApi","rest","getApis","NoState","init","nu$5","readState","generateFrom","validated","behaviours","list","optBlobThunk","output","blob","config","getBehaviours","bData","getData","byInnerKey","indexKey","chain","nu$6","classes","attributes","styles","merge$1","defnA","mod","combine","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","eventName","tuples","fuse$1","sortedTuples","combined","assembled","baseBehaviour","toInfo","toDefinition","domChildren","components","toModification","domModification","toEvents","read$2","attr","add","remove$2","supports","classList","get$4","add$1","clazz","remove$3","add$2","cleanClass","remove$4","has$2","add$3","remove$5","isSupported$1","style","getPropertyValue","inBody","getBody","internalSet","property","setProperty","internalRemove","removeProperty","set$2","setAll$1","css","setOptions","get$5","getComputedStyle","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","item","isValidValue","remove$6","reflow","offsetWidth","get$6","set$3","renderToDom","definition","subject","innerHtml","getBehaviours$1","generateFrom$1","generate$3","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","subs","hasConfigured","apis","behaviourName","buildSubcomponents","build$1","buildFromSpec","userSpec","specEvents","completeSpec","external","extSpec","uids","userSpecWithUid","prebuilt","premade$1","Dimension","getOffset","h","parseFloat","aggregate","parseInt","isNaN","max","cumulativeInclusions","absoluteMax","api","getBoundingClientRect","height","offsetHeight","get$7","getOuter$1","setMax","inclusions","absMax","left","top","translate","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute","win","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","api$1","set$4","get$8","getOuter$2","setMax$1","mkEvent","kill","fromRawEvent","rawEvent","stopPropagation","clientX","clientY","handle","binder","useCapture","wrapped","addEventListener","unbind","bind$2","capture","removeEventListener","get$9","_DOC","to","scrollTo","get$a","_win","bounds","width","right","bottom","getBounds","scroll","clientWidth","clientHeight","visualViewport","pageLeft","pageTop","walkUp","navigation","frame","view","pathTo","d","paths","frameElement","Navigation","find$3","frames","offset","loc","pointed","point","rect","bounds$1","xy","w","absolute$1","position","ClosestOrAncestor","EventConfiguration","ancestor$1","descendant","descend","child_1","closest$2","ancestor$2","descendant$1","closest$3","is$1","find$4","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf","unknown$3","AttributeValue","eventConfig","makeEventLogger","initialTarget","sequence","startTime","logEventCut","_name","logEventStopped","logNoParent","logEventNoHandlers","logEventResponse","finishTime","processEvent","status","patterns","NORMAL","noLogger","LOGGING","logger","STOP","getTrace","stack","lines","line","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema","_initSize","itemMarkers","tieredMenuMarkers","markers","required","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","snapshot","initSize","nu$7","bubble","direction","boundsRestriction","adt$2","southeast","southwest","northeast","northwest","south","north","east","west","cata","cataVertical","middle","cataHorizontal","getRestriction","anchor","restriction","restrictions","dir","adjustBounds","boundsRestrictions","bubbleOffsets","applyRestriction","bubbleOffset","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","eastX","middleX","westX","northY","southY","centreY","eastEdgeX","westEdgeX","southeast$1","bubbles","southwest$1","northeast$1","northwest$1","north$1","south$1","east$1","west$1","all$2","allRtl","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","chooseChannels","channels","universal","events$1","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","executeEvent","bConfig","bState","executor","loadEvent","_simulatedEvent","create","active","configSchema","schemaSchema","doCreate","createModes","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","wrappedExtra","extraF","revoke","prepared","configAsRaw","initialConfig","behaviourInfo","exhibitor","derive$1","capabilities","simpleSchema","create$1","modeSchema","createModes$1","branchKey","Receiving","posConfig","useFixed","ActivePosition","getDocument","focus$1","blur","hasFocus","root","activeElement","preserve","refocus","focused","oldFocus","newFocus","NuPositionCss","applyPositionCss","addPx","adt$3","relative","fixed","positionWithDirection","posName","decision","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","reposition","origin","toBox","rel","viewport$1","pos","removeScroll","outerScroll","cata$1","onNone","onRelative","onFixed","anchorBox","box$1","cycleBy","delta","min","clamp","adt$4","fit","nofit","calcReposition","newX","newY","boundsX","boundsY","boundsWidth","boundsHeight","xInBounds","yInBounds","originInBounds","xFit","yFit","sizeInBounds","deltaW","abs","deltaH","maxX","maxY","limitX","limitY","attempt","candidateX","candidateY","bubbleLeft","bubbleTop","adjustedBounds","boundsBottom","boundsRight","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","maxWidth","on","classesOn","off","classesOff","candidateYforTest","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newDeltaW","newDeltaH","improved","abc","bestNext","elementSize","options","preference","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","setMaxHeight","anchored","available","expandable","defaultOr","dephault","simple","layouts","overrideOptions","go","allAlignments","nu$8","yoffset","getClasses","xDelta","yDelta","alignmentsOn","alignmentsOff","innerNorthwest","innerNortheast","innerNorth","innerSouthwest","innerSoutheast","innerSouth","innerWest","innerEast","nu$9","onDirection","isLtr","isRtl","getDirection","FocusInsideModes","Attribute","isBottomToTopDir","BottomToTop","schema$1","get$b","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","onLtr","customRtl","onRtl","ltr","onBottomLtr","rtl","onBottomRtl","placement","anchorInfo","hotspot","overrides","placer","HotspotAnchor","placement$1","MakeshiftAnchor","adt$5","screen","toFixed","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$2","hasSameOwner","frameOwner","compOwner","getRootPoint","capRect","newLeft","newTop","newWidth","newHeight","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","placement$2","nodeBox","NodeAnchor","zeroWidth","nbsp","create$2","soffset","finish","foffset","SimRange","adt$6","cata$2","onBefore","onOn","onAfter","getStart","situ","before$2","after$1","Situ","adt$7","domRange","exact","exactFromRange","simRange","getStart$1","selection","rng","startContainer","startSitu","_finishSitu","_soffset","_finish","_foffset","relative$1","getWin","range$1","SimSelection","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","finishSitu","createRange","exactToNative","toRect","getFirstRect","rects","getClientRects","adt$8","fromRange","startOffset","endContainer","endOffset","getRanges","doDiagnose","ranges","collapsed","reversed","rev","diagnose","asLtrRange","diagnosis","NodeValue","getOption","nodeValue","api$2","get$c","getEnd","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","last$1","descendantRtl","descendants","makeRange","after$2","same","getNativeSelection","getSelection","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","focus_1","anchorOffset","focusOffset","getExact","sel","getFirstRect$1","descendOnce","descendOnce$1","getAnchorSelection","modStart","modFinish","placement$3","selectionBox","optRect","rawRect","targetElement","SelectionAnchor","eastX$1","westX$1","northY$1","southY$1","southeast$2","southwest$2","northeast$2","northwest$2","all$3","allRtl$1","placement$4","submenuInfo","SubmenuAnchor","AnchorSchema","submenu","makeshift","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","position$1","posState","positionWithin","boxElement","boundsBox","positionWithinBounds","anchorage","oldVisibility","doPlace","vis","getMode","pConfig","_pState","PositionApis","PositionSchema","Positioning","fireDetaching","fireAttaching","attach","detachChildren","childComp","replaceChildren","newChildren","deleted","attach$1","attachWith","insertion","doDetach","detach","detachChildren$1","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","_data","getAttachPoint","built","open","newState","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close","onClose","clear","isOpen","_sandbox","_sConfig","isPartOf$1","getState","store","cssKey","newValue","restore","oldValue","_sState","sink","cloakVisibilityAttr","hasPosition","SandboxApis","events$2","sandboxConfig","sandboxState","ActiveSandbox","SandboxSchema","contents","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$2","receivingChannel","rawSpec","isPart","isExtraPart","fireEventInstead","fe","schema$3","receivingChannel$1","doReposition","onLoad","repConfig","repState","onUnload","setValue","getValue","getState$1","RepresentApis","events$3","resetOnDom","_se","ActiveRepresenting","memory","mode","isNotSet","manual","dataset","dataByValue","dataByText","lookup","itemString","update","items","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","init$1","RepresentState","setValue$1","onSetValue","getValue$1","getDataKey","getFallbackEntry","onLoad$1","initialValue","onUnload$1","DatasetStore","getValue$2","_repState","setValue$2","onLoad$2","ManualStore","setValue$3","getValue$3","onLoad$3","initVal","onUnload$2","MemoryStore","RepresentSchema","Representing","setValueFrom","source","field$1","forbidden","get$d","dump","augment","SketchBehaviours","_placeholder","adt$9","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","req","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","substitutePlaces","ps","ph","placeholder","adt$a","optional","fFactory","sketch","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","part","name$1","asCommon","convert","adtConstructor","partSchema","external$1","PartType","combine$2","partSpec","partValidated","defaults","internals","externals","pname","factory","_partSpec","_partValidated","units","u","generate$4","np","g","doGenerateOne","generateOne","schemas","names","substitutes","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie$1","baseS","single$1","specWithUid","supplyUid","composite","partUidsSchema","components$1","hasUid","isSketchSpec","singleSchema","compositeSchema","single$2","rawConfig","configFields","extraApis","composite$1","partFields","cat","lift2","oa","ob","lift3","oc","mapFrom","someIf","inside","getCurrent","composeConfig","_composeState","ComposeApis","ComposeSchema","Composing","dehighlightAllExcept","hConfig","hState","skip","highlighted","highlightClass","skipComp","onDehighlight","dehighlightAll","dehighlight$1","isHighlighted","highlight$1","onHighlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","targetComp","queryTarget","getHighlighted","_hState","itemClass","getDelta","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$2","transitions","transition","reportFocusShifting","prevFocus","noChange","focusee","highlights","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","keyboardEvents","create$3","cyclicField","isVisible","tabbingConfig","visibilitySelector","findInitial","tabstops","visibles","firstTabstop","findCurrent","focusManager","isTabstop","useTabstopAt","_tabbingState","goFromTabstop","stopIndex","cycle","cyclic","tabstop","optStopIndex","goBackwards","navigate","goForwards","onEnter","exit","onEscape","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","isComplex","stopEventForFirefox","_component","schema$4","execute$1","executeConfig","_executeState","spaceExec","useSpace","enterExec","useEnter","downExec","useDown","execKeys","useControlEnter","ExecutionType","flatgrid","dimensions","setGridSize","numRows","numColumns","getNumRows","getNumColumns","init$2","KeyingState","useH","movement","move","use","west$2","moveLeft","moveRight","east$2","useV","north$2","south$2","isHidden","locate","locateVisible","visible","findIndex$1","withGrid","numCols","oldRow","oldColumn","address","newIndex","row","column","cycleHorizontal","onLastRow","colsInRow","newColumn","cycleVertical","newRow","newCol","cycleRight","cycleLeft","cycleUp","cycleDown","schema$5","gridConfig","_gridState","first","execute$2","doMove","gridState","identified","handleTab","captureTab","doEscape","moveNorth","moveSouth","getKeydownRules$1","getKeyupRules$1","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$6","findCurrent$1","flowConfig","execute$3","focusIn$1","_state","getInitial","moveLeft$1","moveRight$1","doMove$1","flowState","executeOnMove","doEscape$1","getKeydownRules$2","_flowState","westMovers","allowVertical","eastMovers","getKeyupRules$2","FlowType","toCell","matrix","rowIndex","columnIndex","cell","cycleHorizontal$1","startCol","deltaCol","newColIndex","cycleVertical$1","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","moveLeft$2","moveRight$2","moveUp","moveDown","schema$7","focusIn$2","matrixConfig","previousSelector","selectors","execute$4","toMatrix","rows","doMove$2","ifCycle","ifMove","cycles","inRow","cellsInRow","allRows","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$3","getKeyupRules$3","MatrixType","schema$8","execute$5","menuConfig","focusIn$3","moveUp$1","moveDown$1","fireShiftTab","menuState","moveOnTab","fireTab","getKeydownRules$4","getKeyupRules$4","MenuType","schema$9","getKeydownRules$5","specialInfo","onSpace","onShiftEnter","onShiftTab","onTab","onUp","onDown","onLeft","onRight","getKeyupRules$5","stopSpaceKeyup","SpecialType","acyclic","flow","flatgrid$1","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","set$5","replaceConfig","replaceState","insert","childSpec","append$2","appendee","prepend$1","prependee","remove$7","removee","foundChild","_replaceConfig","replaceAt","replaceeIndex","replacer","replacee","replaceBy","replaceePred","ReplaceApis","Replacing","events$4","eventHandlers","focus$2","focusConfig","ignore","onFocus","blur$1","isFocused","FocusApis","exhibit$1","tabindex","events$5","stopMousedown","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","aria","updateClass","toggleClass","toggle","set$6","on$1","isOn","onLoad$4","ToggleApis","exhibit$2","events$6","load","toggleOnExecute","ActiveToggle","updatePressed","syncWithExpanded","updateExpanded","updateSelected","updateChecked","ToggleSchema","pressed","checked","expanded","Toggling","pointerEvents","onClick","events$7","optAction","executeHandler","hoverEvent","focusEvent","onHover","hover","focus$3","builder","toggling","hasSubmenu","itemBehaviours","tConfig","ignoreFocus","schema$a","builder$1","schema$b","owner$2","builder$2","focusWidget","widget","onHorizontalArrow","autofocus","setSource","_widget","widgetBehaviours","schema$c","itemSchema$1","separator","configureGrid","movementInfo","configureMatrix","rowSelector","configureMenu","parts$1","itemInfo","unit","fakeFocus","schema$d","grid","focus$4","make$1","_spec","_externals","menuBehaviours","selectedItem","role","Menu","transpose","trace","byItem","byMenu","triggerItem","triggerMenu","generate$5","menus","expansions","menuItems","menuPaths","_triggerItem","init$3","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","make$2","_rawUiSpec","ExpandHighlightDecision","submenuParentItems","buildMenus","primaryName","makeSketch","nbMenu","layeredState","setup","componentMap","toDirectory","getItemValue","_container","_menuName","setActiveMenu","mv","closeOthers","others","backgroundMenu","stayInDom","getSubmenuParents","parentItems","itemComp","updateAriaExpansions","updateMenuPath","latestMenuName","menuPrep","activeMenu","buildIfRequired","expandRight","HighlightSubmenu","activeMenuPrep","onOpenSubmenu","collapseLeft","onCollapseMenu","updateView","keyOnItem","getSource","onExecute","onOpenMenu","highlightImmediately","navigateOnHover","HighlightParent","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","repositionMenus","maybeActivePrimary","allMenus","preparedMenus","primaryMenu","onRepositionMenu","collapseMenu","tmenuBehaviours","_keyInfo","selectedMenu","collapseItem","tieredData","singleData","collapseItem$1","tieredMenu","tmenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","isPartOfRelated","related","getRelated","thing","showAt","showWithin","showWithinBounds","showMenuAt","showMenuWithinBounds","hide","getContent","inlineBehaviours","onShow","onHide","fireDismissalEventInstead","fireRepositionEventInstead","InlineView","westEdgeX$1","middleX$1","eastEdgeX$1","northY$2","southY$2","southeast$3","southwest$3","northeast$3","northwest$3","north$3","south$3","global$2","factory$1","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","defaultIcon","icons","get$e","getFirst$1","notificationIconMap","success","warning","factory$2","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","text$1","banner","iconChoices","icon","level","memButton","iconProvider","onAction","closeButton","Notification","NotificationManagerImpl","editor","extras","uiMothership","backstage","getLayoutDirection","prePositionNotifications","notifications","notification","moveTo","positionNotifications","firstItem","moveRel","getEl","settings","closeCallback","hideCloseButton","timeout","notificationWrapper","progressBar","shared","providers","getSink","header","isPositionedAtTop","setTimeout","layoutDirection_1","nodeAnchor","anchors","nuText","getArgs","ItemResponse","rate","timer","cancel","clearTimeout","throttle","last$2","global$3","isBoundary","isBlock","getContentEditable","repeatLeft","process","rootNode","backwards","autocompleteSelector","create$4","detect$4","getNode","getDoc","extractContents","insertNode","elm","normalize","setCursorLocation","isValidTextRange","getText","isWhitespace","chr","stripTriggerChar","triggerCh","findChar","char","charAt","findStart","initRange","minChars","findTriggerChIndex","getParent","getRoot","spot","cloneRange","triggerCharIndex","lastIndexOf","triggerChar","getContext","createRng","selectNode","onKeypress","redirectKeyToItem","getItem","getView","isActive","cancelIfNecessary","isMenuOpen","stopImmediatePropagation","isProcessingAction","AutocompleterEditorEvents","global$4","point$1","isText$1","isElement$1","toLast","toLeaf","isPreviousCharContent","leaf","isStartOfWord","getTriggerContext","database","triggerChars","getDatabase","getRng","context","lookupWithContext","fetchOptions","startText","autocompleters","lookupByChar","autocompleter","lookupData","ac","fetchResult","fetch","maxResults","then","matchText","columns","highlightOn","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","autocompleterSchema","createSeparatorItem","createAutocompleterItem","createAutocompleter","baseToolbarButtonFields","toolbarButtonSchema","createToolbarButton","baseToolbarToggleButtonFields","toggleButtonSchema","createToggleButton","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","contextFormSchema","createContextForm","contextToolbarSchema","createContextToolbar","stringArray","register","popups","ui","registry","getAll","popup","datasetValues","dv","ToolbarMode","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","iconClassRtl","containerClass","containerColumnClass","containerRowClass","containerAlignRightClass","containerAlignLeftClass","containerValignTopClass","containerValignMiddleClass","containerValignBottomClass","classForPreset","presets","forMenu","hasIcons","markers$1","menuClasses","dom$1","chunk$1","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","forCollection","initItems","_hasIcons","_item","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_presets","structure","createPartialMenuWithAlloyItems","cardImageFields","cardImageSchema","cardTextFields","cardTextSchema","itemSchema$2","cardimage","cardtext","cardcontainer","cardContainerSchema","commonMenuItemFields","cardMenuItemSchema","createCardMenuItem","choiceMenuItemSchema","createChoiceMenuItem","fancyTypes","fancyMenuItemSchema","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","detectSize","margin","selectorClass","descendants$1","columnLength","thisTop","cTop","ceil","namedEvents","unnamedEvents","SimpleBehaviours","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","hideAllExclusive","_tConfig","_tState","setComponents","tState","specs","getTooltip","tooltip","TooltippingApis","events$8","tooltipConfig","clearTooltip","clearTimer","show","isShowing","tooltipDom","tooltipComponents","setTooltip","resetTimer","delay","ActiveTooltipping","TooltippingSchema","init$4","TooltippingState","Tooltipping","escape","global$5","global$6","nativeDisabled","onLoad$5","disableConfig","disableState","disabled","disable","enable","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","onDisabled","onEnabled","isDisabled","set$7","DisableApis","exhibit$3","events$9","ActiveDisable","DisableSchema","Disabling","global$7","getSkinUrl","skin","getParam","skinUrl","skinName","documentBaseURI","baseURL","isReadOnly","isSkinDisabled","getHeightSetting","getElement","getWidthSetting","DOM","getStyle","getMinWidthSetting","getMinHeightSetting","getMaxWidthSetting","getMaxHeightSetting","getUserStyleFormats","isMergeStyleFormats","getLineHeightFormats","getRemovedMenuItems","isMenubarEnabled","isToolbarEnabled","toolbar","isToolbarTrue","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsSetting","toolbars","toolbarArray","ToolbarLocation","getToolbarMode","getToolbarGroups","getToolbarLocation","auto","isToolbarLocationBottom","fixedContainerSelector","isToolbarPersist","fixedContainerElement","inline","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","isDraggableModal","getMenubar","getToolbar","getFilePickerCallback","getFilePickerTypes","getFileBrowserCallbackTypes","noTypeaheadUrls","getAnchorTop","getAnchorBottom","getFilePickerValidatorHandler","ReadOnlyChannel","ReadOnlyDataSchema","broadcastReadonly","uiComponents","readonly","outerContainer","mothership","setupReadonlyModeSwitch","setMode","receivingConfig","button","splitButton","toolbarButton","DisablingConfigs","runWithApi","getApi","onControlAttached","editorOffCell","onDestroy","onSetup","onControlDetached","onMenuItemExecute","itemResponse","triggersSubmenu","CLOSE_ON_EXECUTE","menuItemEventOrder","componentRenderPipeline","renderCommonItem","providersbackstage","optComponents","buildData","global$8","convertText","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","renderIcon","iconHtml","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderContainer","directionClass","alignClass","align","getValignClass","valign","renderImage","src","renderColorStructure","itemText","iconSvg","providerBackstage","colorPickerCommand","removeColorCommand","getDom","common","title","baseDom","renderItemDomStructure","rtlClass","ariaLabel","domTitle","renderNormalItemStructure","renderIcons","textRender","leftIcon","checkmark","checkMark","htmlContent","menuItem","shortcutContent","caret","rtlIcon","rtlTransform","renderItemStructure","providersBackstage","fallbackIcon","getIconName","iconName","needRtlClass","iconContent","tooltipBehaviour","sharedBackstage","tooltipWorker","_tooltip","encodeText","encode","replaceText","translated","encoded","escapedMatchRegex","RegExp","renderAutocompleteItem","useText","onItemValueHandler","_api","render","shouldHighlight","cardText","renderCardMenuItem","setDisabled","renderChoiceItem","isSelected","setActive","parts$2","hexColour","shorthandRegex","longformRegex","isHexString","hex","getLongForm","hexString","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","fireSkinLoaded","fire","fireSkinLoadError","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","global$9","storageName","ColorCache","storageString","localstorage","parse","prune","diff","cache","unshift","pop","setItem","idx","splice","FocusMode","choiceItem","defaultColors","colorCache","mapColors","colorMap","colors","canvas","ctx","byteAsHex","colorByte","alphaByte","bg","colorByteWithWhiteBg","toUpperCase","asHexColor","clearRect","fillStyle","fillRect","getImageData","getColorCols","defaultCols","hasCustomColors","getColorMap","getColors","unmapped","getCurrentColors","addColor","getCurrentColor","format","getParents","applyFormat","undoManager","transact","formatter","nodeChanged","removeFormat","registerCommands","addCommand","calcCols","sqrt","getColorCols$1","getAdditionalColors","hasCustom","applyColor","onChoice","dialog","colorPickerDialog","colorOpt","execCommand","getColors$1","getFetch","callback","setIconColor","splitButtonApi","newColor","setIconFillAndStroke","pathId","setIconFill","setIconStroke","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","_splitButtonApi","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","getOnSubmit","colorpicker","details","initialData","submit","windowManager","buttons","onSubmit","onCancel","register$1","lastForeColor","lastBackColor","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","colorinput","widgetSpec","cellOverEvent","cellExecuteEvent","makeCell","col","labelId","emitCellOver","se","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","memLabel","fancyMenuItems","inserttable","colorswatch","valueOpt","renderFancyMenuItem","renderNestedItem","downwardsCaret","renderNormalItem","renderSeparatorItem","renderToggleMenuItem","autocomplete","nested","toggle$1","fancy","card","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","createPartialMenu","itemHasIcon","createItem","createPartial","createTieredDataFrom","partialMenu","createMenuFrom","focusMode","ContentFocus","register$2","activeAutocompleter","processingAction","hideIfNecessary","lastElement","getAutocompleters","getCombinedItems","choices","itemMeta","nr","autocompleterApi","reload","BUBBLE_TO_SANDBOX","commenceIfNecessary","matchLength","display","ld","doLookup","newContext","lookupInfo","combinedItems","autocompleterUiApi","hasPlugin","Autocompleter","filter$2","bind$3","capture$1","fromRawEvent$1","closest$4","DelayedFunction","fun","ref","schedule","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","touches","isFarEnough","touch","distX","distY","monitor","startData","longpressFired","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","fireIfReady","isDangerous","keyEv","settingsSchema","bindFocus","bindBlur","setup$1","rawSettings","tapEvent","simpleEvents","tapStopped","stopped","pasteTimeout","onPaste","onKeydown","stopBackspace","onFocusIn","focusoutTimeout","onFocusOut","derive$2","rawTarget","fromSource","isStopped","isCut","fromExternal","adt$b","resume","complete","doTriggerHandler","eventType","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$3","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","destroy","broadcastData","receivers","receiver","renderBar","interpreter","schema$e","parts$3","excludeFactory","factory$4","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","exhibit$4","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","global$a","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","runOnItem","htmlLines","mapItemName","disabledClass","encodeAllRaw","tgt","collectionEvents","currentActive","iterCollectionItems","applyAttributes","childElm","schema$f","focusBehaviours","selectOnFocus","setSelectionRange","inputBehaviours","dom$2","inputAttributes","inputStyles","inputClasses","factory$5","Input","exports$1","module","exports","define","require","amd","global","EphoxContactWrapper","code","1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","Item","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","2","setImmediate","setTimeoutFunc","thisArg","Promise","TypeError","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","reject","promise","finale","_unhandledRejectionFn","Handler","reason","ex","prom","remaining","race","_setImmediateFn","_setUnhandledRejectionFn","3","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","4","promisePolyfill","Global","boltExport","HighlightOnOpen","nu$a","baseFn","callbacks","nCallback","isReady","cbs","pure","LazyValue","errorReporter","make$3","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$b","pure$1","Future","ariaElements","isAriaElement","markValid","invalidConfig","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","_invalidState","validatorInfo","validate","run$1","onValidate","valid","isInvalid","InvalidateApis","events$a","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","getCoupled","coupleConfig","coupleState","getOrCreate","CouplingApis","CouplingSchema","init$5","coupled","CouplingState","Coupling","partType","_a$1","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","tdata","HighlightFirst","open$1","onOpenSync","processed","close$1","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox","ariaOwner","sandboxClasses","sandboxBehaviours","sandboxFields","schema$g","parts$4","factory$6","switchToMenu","HighlightNone","triggerExecute","dropdownBehaviours","Dropdown","exhibit$5","unselectable","events$b","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","inputValue","span","emitSwatchChange","colorBit","memColorButton","colorPicker","colorButton","_field","hsvColour","fromRgb","minRGB","maxRGB","calcHex","rgb","fieldsUpdate","sliderUpdate","paletteUpdate","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent","evt","getEventSource","touchEvent","mouseEvent","r$1","l","minX","minY","min1X","min1Y","max1X","max1Y","range$2","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xValue","yValue","xyValue","fireSliderChange","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","maxOffset","centerMinEdge","centerMaxEdge","getBounds$1","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$1","sliderValue","findValueOfOffset","sliderVal","setToMin","setToMax","moveBy","handleMovement","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue","slider","setPositionFromValue","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","HorizontalModel","fireSliderChange$2","sliderValue$1","findValueOfOffset$1","setValueFrom$1","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue$2","findPositionOfValue$1","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange$3","sliderValue$2","setValueFrom$2","moveBy$2","isVerticalMovement","handleMovement$2","setToMin$2","mX","mY","setToMax$2","getValueFromEvent$2","setPositionFromValue$2","xPos","yPos","thumbXRadius","thumbYRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","TwoDModel","SliderSchema","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","sliderFactory","getClass","_thumb","owner$3","schema$h","getPartName","sketch$1","fSpec","fieldParts","make$4","toResult$1","formBehaviours","form","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","isValid","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","grdWhite","createLinearGradient","addColorStop","grdBlack","setSliderColour","_detail","_slider","saturationBrightnessPaletteSketcher","setRgba","_apis","makeFactory","rgbForm","onInvalidHex","sbPalette","paletteRgba","memPalette","memRgb","updatePalette","palette","updateFields","runUpdates","updates","paletteUpdates","oldRgb","hsvColour$1","newHsvColour","nuHex","sliderUpdates","colourPickerSketcher","self$1","memento","mem","childAt","ComposingConfigs","english","getEnglishText","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","global$b","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","ta","scriptId","scriptUrl","ea","cvalue","ed","global$c","processors","memento$1","rawProcessors","rawValue","postprocess","withComp","optInitialValue","getter","setter","withElement","domValue","domHtml","memory$1","RepresentingConfigs","defaultImageFileTypes","filterByExtension","files","allowedImageFileTypes","explode","getSetting","isFileInAllowedTypes","file","renderDropZone","actions","onDrop","transferEvent","handleFiles","dataTransfer","onSelect","memInput","accept","renderField","inputComp","renderGrid","beforeObject","afterObject","craftWithClasses","outline","craft","triggerTab","onFocus$1","isPseudoStop","platformNeedsSandboxing","getDynamicSource","isSandbox","cachedValue","_frameComponent","frameComponent","contentWindow","renderIFrame","sandboxed","sourcing","create$5","resize","clone$1","tCanvas","get2dContext","drawImage","getWidth","image","naturalWidth","getHeight","naturalHeight","anyWindow","asap","immediateFn","catch","values_1","Promise$1","blobToImage","blobUrl","URL","createObjectURL","Image","removeListeners","loaded","dataUriToBlobSync","uri","mimetype","base64","sliceSize","byteCharacters","atob","bytesLength","slicesCount","byteArrays","sliceIndex","begin","end","bytes","charCodeAt","Uint8Array","Blob","dataUriToBlob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","revokeObjectURL","create$6","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","blobToImageResult","clamp$1","parsedValue","identity$1","DELTA_INDEX","multiply","matrix1","matrix2","out","adjustContrast","adjustBrightness","adjustColors","adjustR","adjustG","adjustB","colorFilter","ir","applyColorFilter","applyMatrix","pixelsData","m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","pixels","putImageData","convoluteFilter","applyConvoluteFilter","pIn","pOut","aMatrix","halfSide","drgba","cy","cx","scx","scy","innerOffset","wt","pixelsIn","pixelsOut","functionColorFilter","colorFn","filterImpl","applyLookup","complexAdjustableColorFilter","matrixAdjustFn","adjust","basicColorFilter","basicConvolutionFilter","kernel","invert","contrast","colorize","sharpen","gamma","pow","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","rotate","angle","applyRotate","translateX","translateY","PI","flip","axis","applyFlip","crop","applyCrop","resize$1","newCanvas","invert$1","sharpen$1","gamma$1","colorize$1","brightness$1","contrast$1","flip$1","crop$1","resize$2","rotate$1","renderIcon$1","renderIconFromPack","iconsProvider","renderReplacableIconFromPack","renderLabel$1","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","buttonApi","toolbarButtonEventOrder","updateMenuText","updateMenuIcon","renderCommonDropdown","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","dropdown","tooltipAttributes","translatedTooltip","memDropdown","displayText","displayIcon","isMenuItemReference","isExpandingMenuItem","separator$1","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","getFromItem","generateValueIfRequired","itemWithValue","newData","build$2","mainMenu","submenus","getMenuButtonApi","renderMenuButton","_comp","getFetch$1","getButton","getMenuItemAction","storage","orig","getMenuItemSetup","renderCommonSpec","actionOpt","domFinal","renderIconButtonSpec","renderIconButton","iconButtonSpec","renderButtonSpec","translatedText","borderless","renderButton","buttonSpec","getAction","buttonType","isMenuFooterButtonSpec","isNormalFooterButtonSpec","renderFooterButton","memButton_1","menuButtonSpec","fixedSpec","renderDialogButton","schema$i","coupledPart","selfName","otherName","lock","onLockedChange","parts$5","locked","lockClass","factory$7","coupledFieldBehaviours","field1Name","field1","field2Name","field2","getField1","getField2","getLock","FormCoupledInputs","formatSize","unitDec","maxDecimal","numText","parseSize","sizeText","numPattern","convertUnit","inInch","noSizeConversion","_input","ratioSizeConversion","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","pLock","formGroup","getFieldPart","isField1","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","undo","redo","zoom","back","swap","tempTransform","transformApply","internal","saveState","disable$1","enable$1","external$2","renderEditPanel","imagePanel","createButton","createIconButton","disableAllComponents","eventcomp","enableAllComponents","panelDom","noop$1","emit$1","emitDisable","emitEnable","emitTransform","emitTempTransform","getBackSwap","memContainer","ButtonPanel","emitTransformApply","createBackButton","createSpacer","createApplyButton","makeCropTransform","getRect","cropPanelComponents","hideCrop","CropPanel","memSize","constrain","makeResizeTransform","resizePanelComponents","sizeInput","ResizePanel","makeValueTransform","horizontalFlip","verticalFlip","counterclockwiseRotate","clockwiseRotate","flipRotateOnAction","operation","flipRotateComponents","FlipRotatePanel","makeSlider","makeVariableSlider","valTransform","variableFilterPanelComponents","createVariableFilterPanel","filterPanelComponents","FilterPanel","BrightnessPanel","ContrastPanel","GammaPanel","makeColorTransform","makeColorSlider","redOpt","memRed","blueOpt","memBlue","greenOpt","memGreen","colorizePanelComponents","ColorizePanel","getTransformPanelEvent","panel","cropPanelUpdate","_anyInSystem","showCrop","resizePanelUpdate","measurements","getMeasurements","sharpenTransform","invertTransform","buttonPanelComponents","getApplyButton","global$d","global$e","global$f","global$g","getDocumentSize","scrollWidth","scrollHeight","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","startX","startY","handleElement","getElementById","cursor","docSize","handleElm","screenX","screenY","runtimeStyle","zIndex","opacity","appendTo","drag","deltaX","deltaY","create$7","currentRect","viewPortRect","clampRect","containerElm","dragHelpers","handles","xMul","yMul","blockers","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","instance","setInnerRect","createDragHelper","blocker","repaint","activeHandle","moveAndBlock","keyCode","SPACEBAR","toggleVisibility","updateElementRect","setRect","setViewPortRect","setClampRect","helper","extend","CropRect","loadImage","renderImagePanel","initialUrl","memBg","zoomState","cropRect","rectState","viewRectState","repaintImg","img","panelW","panelH","cRect","zoomFit","updateSrc","url","aImg","lastViewRect","viewRect","inflate","currentZoom","newZoom","newRect","setButtonEnabled","enabled","renderSideBar","updateButtonUndoStates","undoEnabled","redoEnabled","memUndo","memRedo","UndoStack","removed","canUndo","canRedo","Delimiter","makeState","blobState","tempState","undoStack","getBlobState","setBlobState","getTempState","temp","updateTempState","newTempState","createState","destroyTempState","destroyState","destroyStates","states","addBlobState","addTempState","applyTempState","postApply","currentState","getHistoryStates","renderImageTools","historyStates","sideBar","disableUndoRedo","_oImg","unblock","imageResultToBlob","block","editPanel","applyButton","blobManipulate","oImg","manipulate","tempManipulate","manipulateApply","currentUrl","renderLabel$2","backstageShared","isSingleListItem","dataAttribute","fetchItems","dropdownComp","selectedValue","findItemByValue","renderListBox","initialItem","sketchSpec","listBoxWrap","renderPanel","factory$8","initialValues","selectClasses","selectAttributes","selectBehaviours","found","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","renderTable","renderTh","renderHeader","renderTd","renderTr","renderRows","baseInputBehaviours","multiline","validatingBehaviours","vl","inputMode","inputmode","classname","flex","extraClasses2","maximized","renderInput","renderTextarea","events$c","streamConfig","streamState","streams","stream","cancelEvent","ActiveStreaming","_config","setTimer","init$6","StreamingState","setup$2","streamInfo","sInfo","throttler","onStream","stopEvent","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","selectsOver","inputDisplay_1","getDisplayText","itemDisplay","itemExecute","make$5","navigateList","highlighter","previewing","focusBehaviours$1","responseTime","focusInInput","previousValue_1","pv","sandboxIsOpen","openClass","onItemExecute","dismissOnBlur","typeahead","typeaheadBehaviours","schema$j","parts$6","populateFromBrowse","Typeahead","wrap$2","bindFuture","resA","bindResult","mapResult","foldResult","whenError","whenValue","withTimeout","errorThunk","timedOut","nu$c","worker","value$2","error$1","fromResult$1","fromFuture","future","fromPromise","completer","FutureResult","separator$2","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","memUrlBox","_newValue","getValidationHandler","memInvalidIcon","invalidComp","_menu","_entry","makeIcon","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderAlertBanner","iconTooltip","renderCheckbox","repBehaviour","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","make$6","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","listbox","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagetools","table","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","bubbleAlignments","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor","getAnchors","isToolbarTop","useFixedToolbarContainer","getContentAreaContainer","inlineDialog","hasCustomColors$1","getColors$2","getColorCols$2","ColorInputBackstage","isDraggableModal$1","DialogBackstage","HeaderBackstage","getDockingMode","setDockingMode","defaultStyleFormats","isNestedFormat","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","formatNameWithPrefix","registerCustomFormats","registerFormats","getStyleFormats","registeredUserFormats","processBasic","isSelectedFor","getPreviewFor","formatterSpec","getStylePreview","register$3","enrichSupported","enrichMenu","submenuSpec","enrichCustom","customSpec","newItem","doEnrich","newItems_1","getStyleItems","init$7","parseStyle","getCssText","settingsFormats","settingsFlattenedFormats","eventsFormats","eventsFlattenedFormats","replaceSettings","_e","enriched","modifications","fromSettings","fromEvents","getFlattenedKeys","isElement$2","trim$1","hasContentEditableState","contentEditable","isContentEditableTrue","isContentEditableFalse","create$8","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isAnchor","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","elms","getAnchorTargets","getTargetElements","hasTitle","find$5","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","SyntaxError","setAllHistory","itemsWithoutUrl","isTruthy","makeMap","getPicker","getPickerTypes","optFileTypes","optLegacyTypes","optTypes","_picker","types","getPickerSetting","pickerTypes","entry","getTextSetting","UrlInputBackstage","init$8","contextMenuState","styleselect","isContextMenuOpen","setContextMenuState","expandable$1","showContextToolbarEvent","hideContextToolbarEvent","schema$k","enhanceGroups","parts$7","factory$9","setGroups","groups","getGroupContainer","shell","toolbarBehaviours","Toolbar","generate$6","output$1","within","withinWidth","apportion","total","parray","toUnit","fitLast","fits","overflow","overflower","fitAll","tryFit","divide","partition$3","storedGroups","bGroups","findFocusedComp","focusedElm","setOverflow","overflowGroup","builtGroups","focusedComp","availableWidth","overflows","schema$l","schema$m","parts$8","schema$n","parts$9","toggledClass","toggle$2","toolbarSandbox","position$2","bounder","setGroups$1","makeSandbox$1","factory$a","FloatingToolbarButton","schema$o","parts$a","factory$b","tgroupBehaviours","itemSelector","ToolbarGroup","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$c","getOverflowBounds","overflowToggledClass","splitToolbarBehaviours","getOverflow","SplitFloatingToolbar","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$2","isExpanded","grow","shrink","immediateShrink","hasGrown","hasShrunk","isCollapsed","isGrowing","_slideState","isShrinking","isTransitioning","toggleGrow","SlidingApis","exhibit$6","events$d","propertyName","onGrown","ActiveSliding","SlidingSchema","init$9","SlidingState","Sliding","schema$p","parts$b","onClosed","onOpened","isOpen$1","toggleToolbar","overf","refresh$3","factory$d","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","toolbarHeightChange","renderToolbarGroupCommon","toolbarGroup","renderToolbarGroup","getToolbarbehaviours","toolbarSpec","modeName","onAttached","initGroups","renderMoreToolbarCommon","cyclicKeying","renderFloatingMoreToolbar","baseSpec","overflowXOffset","headerElem","moreDrawerData","lazyHeader","headerBounds","docElem","docBounds","renderSlidingMoreToolbar","renderToolbar","scrolling","groupToolbarButtonSchema","createGroupToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","events$e","reflectingConfig","reflectingState","updateState","renderComponents","newComponents","channel","rawData","ActiveReflecting","getState$2","reflectState","ReflectingApis","ReflectingSchema","init$a","optS","ReflectingState","Reflecting","schema$q","arrowPart","arrow","buttonPart","btn","splitDropdown","parts$c","factory$e","openMenu","executeOnButton","buttonEvents","ariaDescriptor","splitDropdownBehaviours","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","rtlIcon$1","rtlTransform$1","renderCommonStructure","_d","needsRtlClass","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","buttonComp","_b","_c","getFormApi","runOnExecute$1","formApi","renderContextButton","bridged","renderContextToggleButton","generateOne$1","generate$7","mementos","asSpecs","findPrimary","compInSystem","buildInitGroups","commands","renderContextForm","toolbarType","ContextForm","getHorizontalBounds","contentAreaBox","viewportBounds","contentBoxWidth","maxViewportWidth","getVerticalBounds","isToolbarLocationTop","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","matchTargetWith","ctxs","toolbarApi","contextToolbars","contextForms","filterByPositionForStartNode","doesPositionExist","filterToolbarsByPosition","hasSelectionToolbars","hasNodeToolbars","nodeToolbars","selectionToolbars","filterByPositionForAncestorNode","findPosition_1","basePosition","matchStartNode","nodeCandidates","editorCandidates","nodeMatches","editorMatches","matchAncestor","startNode","scopes","ancestorElem","inNodeScope","lookup$1","rootElem","isOutsideRoot","inEditorScope","categorise","forms","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","contextToolbar","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newContents","oldContents","forwardContents","generateSelectItems","_editor","generateItem","rawItem","response","si","invalid","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","setInitialValue","nodeChangeHandler","rawFormats","buildBasicStaticDataset","ResizeTypes","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","command","getSpec","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignSelect","alignSelectMenu","defaultFontsFormats","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$1","getFirstFont","queryCommandValue","matchOpt","updateSelectMenuText","createFontSelect","fontSelectMenu","defaultFontsizeFormats","legacyFontSizes","keywordFontSizes","round$1","precision","factor","toPt","fontSize","toLegacy","getSpec$2","_loop_1","pt","legacy","Space","createFontsizeSelect","fontsizeSelectMenu","findNearest","getStyles","revocable","doRevoke","isSet","destroyable","unbindable","value$3","onSetupFormatToggle","boundCallback","formatChanged","initialized","onActionToggleFormat","defaultBlocks","getSpec$3","detectedFormat","createFormatSelect","formatSelectMenu","getSpec$4","getFormatItems","flattenedItems","createStyleSelect","styleSelectMenu","defaultToolbar","renderFromBridge","bridgeBuilder","togglebutton","menubutton","splitbutton","grouptoolbarbutton","identify","allowToolbarGroups","TopToBottom","floating","styleSelectButton","fontsizeSelectButton","fontSelectButton","formatButton","alignMenuButton","extractFrom","bespokeButtons","fontsizeselect","fontselect","formatselect","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","prefixes","toolbarGroups","bubbleSize","bubbleAlignments$1","anchorOverrides","desktopAnchorSpecLayouts","mobileAnchorSpecLayouts","getAnchorLayout","register$4","registryContextToolbars","contextbar","isRangeOverlapping","aTop","aBottom","bTop","bBottom","getLastElementVerticalBound","nodeBounds","ele","diffTop","shouldContextToolbarHide","lastElementBounds","contextToolbarBounds","lastAnchor","forceHide","hideOrRepositionIfNecessary","contextBarEle","wrapInPopDialog","shortcuts","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextMenuGroups","default","toolbarKey","launchContext","sElem","launchContextToolbar","asyncOpen","setEditorTimeout","setup$3","ship","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onWindowScroll","onWindowResize","onEditorResize","onEditorProgress","parts$d","partType$1","schema$r","customListDetail","itemsPart","parts$e","name$2","factory$f","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","listBehaviours","CustomList","setup$4","isDocked","getBehaviours$2","StaticHeader","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPosition","storePrior","setInitialPosition","revertToOriginal","offsetBox_1","_left","_top","_right","_bottom","morphToOriginal","getModes","morphToFixed","winBox","top_1","isTop","getMorph","getMorphToOriginal","morphToStatic","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","setDocked","resetInternal","refresh$4","reset","isDocked$1","setModes","DockingApis","events$f","dockInfo","dockState","onShown","onHidden","ActiveDocking","DockingSchema","init$b","docked","initialBounds","DockingState","Docking","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","focusedElem","ownerDoc","activeElm","findFocusedElem","rootElm","setup$5","isDocked$2","getIframeBehaviours","getBehaviours$3","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","StickyHeader","sticky","factory$g","setMenus","activeButton","hoveredButton","activeComp","hoveredComp","prev","SilverMenubar","owner$4","schema$s","getPartName$1","sketch$2","sSpec","slot","make$7","getSlotNames","getSlot","onSlot","def","onSlots","doShowing","_key","doShow","doHide","hideSlot","hideSlots","hideAllSlots","showSlot","slotBehaviours","slotApis","SlotContainer","sidebarSchema","createSidebar","setup$6","sidebars","addToggleButton","handleToggle","makePanels","panelConfigs","sidepanel","optSidePanelSpec","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","optSlider","toggleSidebar","optSlotContainer","whichSidebar","sidebarOpen","fixSize","autoSize","renderSidebar","getAttrs","fromHtml$2","renderSpinner","toggleThrobber","renderThrobber","setup$7","lazyThrobber","throbberState","timerId","factory$h","getSocket","getHeader","setToolbar","setToolbars","mToolbar","refreshToolbar","toggleToolbarDrawer","isToolbarDrawerToggled","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","partMultipleToolbar","_mToolbar","tc","_index","partToolbar","renderer","lazyToolbar","lazyMoreButton","partHeader","partSocket","partSidebar","partThrobber","OuterContainer","grps","grp","renderedToolbars","defaultMenubar","defaultMenus","edit","tools","help","make$8","removedMenuItems","itemName","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","menuData","isNotSeparator","fireSkinLoaded$1","_skinLoaded","fireSkinLoadError$1","loadStylesheet","stylesheetUrl","styleSheetLoader","unload","loadUiSkins","skinUiCss","loadShadowDomUiSkins","isInShadowRoot$1","shadowDomSkinCss","loadSkin","isInline","contentCSS","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents","initialDocEle","lastWindowDimensions","innerWidth","lastDocumentDimensions","resizeWindow","outer","resizeDocument","docEle","inner","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$1","baseHeight","minHeight","getHeightWithFallback","getWidth$1","baseWidth","minWidth","getWidthWithFallback","InlineHeader","targetElm","floatContainer","isSticky","editorMaxWidthOpt","headerBackstage","isSplitToolbar","calcToolbarOffset","tbar","calcMode","toolbar_1","toolbarHeight","targetBounds","roomAtTop","docHeight","roomAtBottom","winBounds","isRoomAtBottomViewport","setupMode","verticalDir","updateChromeWidth","bodyMargin","updateChromePosition","repositionPopups$1","updateChromeUi","resetDocking","floatContainerComp","updateMode","updateUi","currentMode","newMode","addClass","removeClass","getTargetPosAndBounds","setupEvents$1","toolbarPersist","prevPosAndBounds","resizeContent","prevPos","prevBounds","hasResized","requestAnimationFrame","render$2","uiContainer","Inline","register$5","alignToolbarButtons","cmd","alignNoneToolbarButton","addButton","register$6","toggleOutdentState","queryCommandState","onNodeChange","registerButtons","register$7","unsupportedLength","decimalDigits","signedInteger","exponentPart","dot","unsignedDecimalLiteral","float","isUnit","accepted","check","unitRaw","normalise","normaliseLineHeight","getLineHeights","Map","lastApi","registerMenuItems","registerButtons$1","addMenuButton","register$8","toggleFormat","registerFormatButtons","_idx","name_1","registerCommandButtons","registerCommandToggleButtons","registerButtons$2","registerMenuItems$1","addMenuItem","register$9","toggleUndoRedoState","checkState","onUndoStateChange","registerMenuItems$2","registerButtons$3","register$a","toggleVisualAidState","hasVisual","onVisualAid","registerMenuItems$3","addToggleMenuItem","registerToolbarButton","register$b","setup$8","nu$d","transpose$1","dx","dy","isTouchEvent$1","fromPageXY","pageX","pageY","fromClientXY","transposeContentAreaContainer","containerPos","getPos","getPointAnchor","getSelectionAnchor","getNodeAnchor$1","initAndShow","buildMenu","contextmenu","useNodeAnchor","anchorSpec","bubbleSize$1","bubbleAlignments$2","isTouchWithinSelection","touch_1","rngRectOpt","rngRect","getPointAnchorSpec","setupiOSOverrides","originalSelection","selectionReset","setRng","unbindEventListeners","preventMousedown","clearSelectionReset","initAndShow$1","shouldHighlightImmediately","openiOS_1","patchPipeConfig","shouldNeverUseNative","getMenuItems","defaultItems","contextMenus","isContextMenuDisabled","getContextMenu","getAvoidOverlapSelector","isSeparator$1","separator$3","makeContextItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","pointerType","getSelectedElement","shouldUseNodeAnchor","setup$9","hideContextMenu","showContextMenu","initAndShow$2","hideEvents","adt$c","subtract","add$4","transform$1","changes","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","translate$2","absolute$3","fixed$1","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","NaN","get$f","snapsInfo","leftAttr","topAttr","set$8","getCoords","snapInfo","moveOrSnap","newCoord","mustSnap","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","inRange","getSnapPoints","matchSnap","bestSnap","deltas","bestDeltas","currAvg","bestAvg","snapTo","snapTo$1","dragConfig","getTarget","repositionTarget","scroll_1","origin_1","snapPin","DraggingApis","initialAttribute","resetZIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$t","getCurrentCoord","location","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","onSensor","dragBy","onDrag","calcStartData","move$1","dragState","dragMode","dragStartData","getStartData","dlt","updateStartState","setStartData","init$c","dragApi","forceDrop","drop","delayDrop","getData$1","getDelta$1","MouseData","events$g","stop$1","schema$u","init$d","getDataFrom","getData$2","getDelta$2","TouchData","events$h","blockerCell","schema$v","events$i","schema$w","mouse","mouseOrTouch","DraggingBranches","init$e","previous","calculateDelta","dragEvent","nuData","DragState","Dragging","dragger","snapWidth","snapOffset","calcSnap","selectorOpt","td","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","isSameCell","cellOpt","currentTd","createSelector","setup$a","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","getDimensions","resizeType","originalHeight","originalWidth","Both","resize$3","dim","isHidden$1","renderElementPath","getDataPath","newPathElements","_btn","divider","newAcc","updatePath","parents","newPath","parent_1","isDefaultPrevented","isPropagationStopped","renderWordCount","replaceCountText","words","characters","currentVal","wordCount","renderStatusbar","renderResizeHandlerIcon","renderBranding","linkHtml","getResizeType","None","Vertical","getTextComponents","getComponents","setup$b","lazyOuterContainer","platformClasses","touchPlatformClass","deviceClasses","isToolbarBottom","dirAttributes","verticalDirAttributes","isHeaderDocked","resizeUiMothership","makeSinkDefinition","isGridUiContainer","sinkSpec","reactiveWidthSpec","memAnchorBar","lazyAnchorBar","throbber","sb","statusbar","socketSidebarContainer","hasMultipleToolbar","hasToolbar","hasMenubar","getPartToolbar","editorComponents","containerComponents","border","addQueryStateHandler","getUi","broadcastAll","setEditorSize","parsedHeight","parsedWidth","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","describedBy","describedElement","describeElement","describeId","labelledBy","labelledElement","labelElement","schema$x","basic","parts$f","dragBlockClass","getDragBounds","getBusySpec","blockerBehaviours","blockSpec","isBlocked","onBlock","blockWith","onUnblock","BlockingApis","BlockingSchema","init$f","BlockingState","Blocking","factory$i","dialogComp","showDialog","externalBlocker","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseFooterButtonFields","dialogFooterButtonFields","normalFooterButtonFields","menuFooterButtonFields","dialogFooterButtonSchema","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","checkboxFields","checkboxSchema","checkboxDataProcessor","formComponentFields","formComponentWithLabelFields","collectionFields","collectionSchema","collectionDataProcessor","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerFields","colorPickerSchema","colorPickerDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","htmlPanelFields","htmlPanelSchema","iframeFields","iframeSchema","iframeDataProcessor","imageToolsFields","imageToolsSchema","inputFields","inputSchema","inputDataProcessor","createLabelFields","listBoxSingleItemFields","listBoxNestedItemFields","listBoxItemSchema","listBoxFields","listBoxSchema","listBoxDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","tableFields","tableSchema","textAreaFields","textAreaSchema","textAreaDataProcessor","urlInputFields","urlInputSchema","urlInputDataProcessor","createItemsField","itemSchema$3","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogButtonFields","dialogButtonSchema","dialogSchema","tabpanel","createDialog","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","getAllObjects","isNamedItem","dataProcessors","togglemenuitem","getDataProcessor","getNamedItems","createDataValidator","namedItems","extract$1","internalDialog","dataValidator","DialogManager","openUrl","redial","toValidValues","renderBodyPanel","memForm","formValue","vals","factory$j","tabButtonBehaviours","TabButton","schema$y","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","clickToDismiss","tabClass","parts$g","factory$k","tabbarBehaviours","selectedClass","tab","Tabbar","factory$l","tabviewBehaviours","Tabview","schema$z","barPart","tabs","viewPart","parts$h","factory$m","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","smartTabHeight","extraEvents","maxTabHeightOpt","oldHeight","naiveTabHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","formData","validData","currentData","setDataOnForm","oldTab","tabMode","_viewItems","oldName","tsection","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","renderBody","ariaAttrs","incoming","isTabPanel","ariaAttributes","renderInlineBody","contentId","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","footer","pFooterGroup","startButtons","endButtons","renderDialog","dialogClass","blockerBackdropClass","scrollLockClass","extraStyles","dialogEvents","renderClose","renderTitle","renderDragHandle","renderInlineHeader","titleId","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","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","lookup$2","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","getCompByName","form_1","getFormWrapper","footerState","validateData","dialogState","getDialogApi","doRedial","menuItemStates","withRoot","valueComp","representedValues","menuItemCurrentState","setData","prevData","instanceApi","mergedData","newInternalData","bodyState","tabSection","dialogInit","getDialogSizeClasses","renderDialog$1","storagedMenuButtons","objOfCells","dialogSize","modalAccess","getForm","outerForm","renderInlineDialog","dialogLabelId","dialogContentId","memHeader","memBody","memFooter","global$h","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$c","closeDialog","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","setup$d","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData$1","isAlertOrConfirmDialog","inlineAdditionalBehaviours","setup$e","isStickyToolbar$1","openInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","refreshDocking","dialogUi","inlineDialogComp","confirm","alert","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getContentStyle","shouldUseContentCssCors","getTemplateReplaceValues","getTemplates","getCdateFormat","getMdateFormat","getBodyClassFromHash","bodyClass","getBodyClass","addZeros","getDateTime","daysShort","daysLong","monthsShort","monthsLong","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","createTemplateList","templateList","send","replaceTemplateValues","templateValues","replaceVals","hasClass","insertTemplate","addVisual","dateFormat","entitiesAttr","'","htmlEscape","getPreviewContent","contentCssEntries_1","contentStyle","cors_1","isMetaKeyPressed","preventClicksOnLinksScript","directionality","dirAttr","getURI","createTemplates","notificationManager","template","isUrlTemplate","createSelectBoxItems","templates","findTemplate","templateTitle","loadFailedAlert","getTemplateContent","updateDialog","newTemplateTitle","previewHtml","openDialog","selectBoxItems","buildDialogSpec","bodyItems","dialogApi","optTemplates","Plugin","allowHtmlInNamedAnchor","namedAnchorSelector","isEmptyString","getIdFromAnchor","isNamedAnchor","isEmptyNamedAnchor","removeEmptyNamedAnchorsInSelection","walk","nodes","isValidId","getNamedAnchor","getId","createAnchor","createHTML","updateAnchor","anchorElement","insertAnchor","newId","currentId","isNamedAnchorNode","isEmptyNamedAnchorNode","setContentEditable","parser","addNodeFilter","serializer","onmatch","_fmt","_itemName","selectorChangedWithUnbind","fireInsertCustomChar","insertChar","evtChr","getCharMap","getCharMapAppend","isArray$1","UserDefined","getDefaultCharMap","charmapFilter","charmap","grep","getCharsFromSetting","settingValue","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap$1","insertChar$1","nativeFromCodePoint","fromCodePoint","codePoints","codeUnits","codeLen","codePoint","RangeError","fromCharCode","charMatches","charCode","lowerCasePattern","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","SEARCH_DELAY","updateFilter","bridgeSpec","changeData","addAutocompleter","_maxResults","_reject","autocompleteApi","DEFAULT","FilterCSS","filterCSS","xss","groupBy","wasType","lastChild","shallowAs","mutate","matchNodeName","matchNodeNames","regex","isTextNode","isListNode","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","isEmpty","keepBookmarks","isChildOfBody","isChildOf","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","textBlock","hasContentNode","getBlockElements","createFragment","blockName","tagName","setAttribs","splitList","ul","li","removeAndKeepBookmarks","bookmarks","newBlock","tmpRng","insertAfter","outdentDlItem","dl","indentDlItem","dlIndentation","indentation","dlItems","getNormalizedPoint","normalizeRange","outRng","rangeStart","rangeEnd","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","parentTableCell","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","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","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","listToggleActionFromListName","listName","isCustomList","listState","activate","inList","updateListStyle","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","selectedTextBlocks","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","toggleSingleList","toggleList","selectedSubLists","DOM$2","normalizeList","normalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","walker","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","mergeLiElements","listNode","$","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","rng_1","otherLi_1","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_2","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","DELETE","currentList","getAttrib","setAttrib","queryListCommandState","setupTabKey","metaKeyPressed","listProperties","addContextMenu","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","rangeEqualsDelimiterOrSpace","rangeString","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","rngText","autoLinkPattern","defaultLinkTarget","autoUrlDetectState","punctuationStr","punctuation","punctuation$1","documentPositionPreceding","DOCUMENT_POSITION_PRECEDING","isSimpleBoundary","getShortEndedElements","isContentEditableTrueInCef","getContentEditableParent","getWhiteSpaceElements","nuSection","sOffset","fOffset","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","findSpansByIndex","spans","getElementsByTagName","moveSelection","forward","searchState","testIndex","scrollIntoView","removeNode","escapeSearchText","wholeWord","escapedText","wordRegex","matchCase","isMatchSpan","currentMatchIndex","currentIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","done$1","next$1","prev$1","replace$1","selectedText","updateButtonStates","updateNext","updatePrev","updateSearchState","matchcase","wholewords","inselection","disableAll","notFoundAlert","focusButtonIfRequired","doFind","findtext","replacetext","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","getVideoScriptMatch","trimPx","getEphoxEmbedData","altsource","poster","htmlToData","isEphoxEmbed","allow_conditional_comments","movie","videoScript","guess","mimes","mp3","m4a","wav","mp4","webm","ogg","swf","fileEnd","mime","setAttributes","updatedAttrs","updateEphoxEmbed","styleMap","serializeStyle","sources","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","imgAttrs","urlPatterns","allowFullscreen","getProtocol","protocolMatches","getUrl","newUrl","matchPattern","getIframeHtml","allowfullscreen","getFlashHtml","getAudioHtml","audioTemplateCallback","altsourcemime","getVideoHtml","videoTemplateCallback","sourcemime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","snippetToData","embedSnippet","isMediaElement","getEditorData","snippet","serialize","addEmbedHtml","snippetData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","generalTab","embedTextarea","embedTab","advancedFormItems","advancedTab","showDialog$1","sanitize","blocked","attrName","isLiveEmbedNode","defaultValue","setDimensions","previewNode","useDefaults","defaultWidth","fallbackHeight","defaultHeight","appendNodeContent","newNode","forced_root_block","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewNode","filteredStyles","previewWrapper","class","frameborder","sanitizedHtml","shimNode","sourceNode","attribs","ai","attrValue","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","ceFalse","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","innerNode","realElmName","unescape","$elm","selectedNode","objectType","stateSelectorAdapter","isInlinePattern","isBlockPattern","sortPatterns","normalizePattern","formatOrCmd","onFormat","onCommand","start_1","end_1","replacement","commandValue","denormalizePattern","createPatternSet","inlinePatterns","blockPatterns","patternsState","setPatterns","newPatterns","normalized","getPatterns","defaultPatterns","getPatternSet","TEXT_NODE","cleanEmptyNodes","deleteRng","clean","startParent","endParent","deleteContents","isBlockFormatName","formatSet","isReplacementPattern","getParentBlock","parentBlockOpt","alwaysNext","textBefore","textSeeker","textAfter","scanLeft","prevText","scanRight","generatePath","generatePathRange","resolvePath","nodePath","resolvedNode","optNode","resolvePathRange","generatePathRangeFromRange","stripPattern","firstTextNode","applyPattern","findPattern","findPatterns","forcedRootBlock","matchesForcedRootBlock","blockText","matchedPattern","applyMatches","newMarker","rangeFromMarker","createMarker","markerPrefix","pathRange","textEnd","textStart","removeMarker","matchesPattern","patternContent","searchText","startEndIndex","startIndex","findPatternStartFromSpot","startPattern","startSpot","nextSpot","findPatternStart","requireGap","startRange","findPattern$1","endPathRng","startRng","endRng","resultsOpt","findPatternsRec","remainingPatterns","results_1","startPathRng","endSpot","patternsWithoutCurrent","applyPattern$1","patternRange","applyReplacementPattern","markerRange","applyPatternWithContent","startMarker","endMarker","markerEndRange","markerStartRange","patternMarker","addMarkers","matchesWithEnds","findPatterns$1","space","applyMatches$1","matchesWithMarkers","patternSet","inlineMatches","blockMatches","deleteData","handleInlineKey","checkKeyEvent","codes","checkKeyCode","modifierPressed","checkCharCode","chars","charCodes","keyCodes","parseTag","parseAttr","isNull","spaceIndex","closing","isClosing","shallowCopyObject","FilterXSS","stripIgnoreTag","onIgnoreTag","onIgnoreTagStripAll","whiteList","onTag","onTagAttr","onIgnoreTagAttr","safeAttrValue","escapeHtml","cssFilter","stripBlankChar","allowCommentTag","stripCommentTag","stripIgnoreTagBody","StripTagBody","retHtml","sourcePosition","isWhite","whiteAttrList","attrsHtml","isWhiteAttr","fireVisualBlocks","toggleVisualBlocks","pluginUrl","enabledState","isEnabledByDefault","toggleActiveState","editorEventCallback","getTagName","rethtml","lastPos","tagStart","quoteStart","currentPos","currentTagName","currentHtml","chariterator","ic","REGEXP_ILLEGAL_ATTR_NAME","onAttr","retAttrs","tmpName","addAttr","findNextEqual","findBeforeEqual","stripQuoteWrap","isQuoteWrapString","filterXSS","isWorkerEnv","DedicatedWorkerGlobalScope","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","save","formObj","isDirty","execCallback","setDirty","onsubmit","startContent","resetContent","stateToggle","addShortcut","_hoisted_1","_hoisted_2","_hoisted_3","_ctx","_cache","$props","$setup","$data","$options","_component_filemanager","modal","media","filemanager","xssWhiteList","xssOptions","allowed","includes","$permissions","Storage","View","$events","$on","closeModal","callbackValue","$off","updateImage","publicId","StorageService","previewResource","displayImages","forEach","serializeImages","removeAttr","base_url","language","$i18n","shortLocale","skin_url","content_css","mobile","theme","toolbar_mode","plugins","relative_urls","paste_data_images","browser_spellcheck","entity_encoding","min_height","autoresize_bottom_margin","autoresize_on_init","nowrap","table_style_by_css","media_alt_source","media_poster","image_advtab","floatingtoolbar_selectors","file_picker_callback","modelValue","updateModel","source_view","startsWith","editorOptions","$filters","filesize","contentLength","$t","__exports__","getDefaultWhiteList","onIgnoreAttr","REGEXP_URL_JAVASCRIPT","hasProPlugin","clipboard","quirks","repeat","firePastePreProcess","isWordHtml","wordContent","firePastePostProcess","firePastePlainTextToggle","firePaste","ieFake","shouldBlockDrop","shouldPasteDataImages","shouldFilterDrop","getPreProcess","getPostProcess","getWebkitStyles","shouldRemoveWebKitStyles","shouldMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getRetainStyleProps","getWordValidElements","defaultValidElements","shouldConvertWordFakeLists","shouldUseDefaultFilters","getValidate","getAllowHtmlDataUrls","getPasteDataImages","getImagesDataImgFilter","getImagesReuseFilename","getTabSpaces","getAllowedImageFileTypes","internalMimeType","internalMark","unmark","isMarked","internalHtmlMime","isPlainText","toBRs","openContainer","rootTag","rootAttrs","toBlockElements","blocks","tagOpen","tagClose","paragraphs","stitch","domParser","shortEndedElements","ignoreElements","currentNode","trimHtml","trimSpaces","s1","s2","createIdGenerator","getImageMimeType","ext","lowerExt","mimeOverrides","jpg","jpe","jfi","jif","jfif","pjpeg","pjp","svg","hasOwn","isWordContent","isNumericList","isBulletList","convertFakeListsToProperLists","currentListNode","prevListNode","lastLevel","txt","trimListStart","regExp","removeIgnoredNodes","_listIgnore","convertParagraphToLi","paragraphNode","_listLevel","nodeText","filterStyles","validStyles","styleValue","outputStyles","filterWordContent","retainStyleProperties","spaces","validElements","valid_elements","valid_children","attributesOrder","preProcess","preProcess$1","isRootContent","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","hasEventListeners","pasteHtml","paste","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","pasteAsText","isCollapsibleWhitespace","isNewLineChar","isNewline","normalizeWhitespace","tabSpace","normalizedText","pcIsSpace","doPaste","pasteHtml$1","internalFlag","pasteText","encodedText","getDataTransferItems","mceInternalUrlPrefix","legacyText","contentType","getClipboardContent","clipboardEvent","clipboardData","hasContentType","clipboardContent","mimeType","hasHtmlOrText","parseDataUri","decodeURIComponent","isValidDataUriImage","imgElm","extractFilename","uniqueId","pasteImage","imageItem","blobCache","editorUpload","blobInfo","existingBlobInfo","getByData","useFileName","filename","blobUri","isClipboardEvent","isDataTransferItem","getAsFile","readFilesAsDataUris","onload","isImage","allowedExtensions","extension","getImagesFromDataTransfer","pasteImageData","images","fileResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","registerEventHandlers","pasteBin","pasteFormat","keyboardPastePlainTextState","keyboardPasteEvent","keyboardPastePressed","removePasteBinOnKeyUp","webkit","insertClipboardContent","isKeyBoardPaste","plainTextMode","isDefaultContent","isPlainTextHtml","getLastRng","isKeyboardPaste","registerEventsAndFilters","isPasteInsert","isWebKitFakeUrl","isDataUri","getPasteBinParent","isExternalPasteBin","delegatePasteEvents","pasteBinElm","pasteBinDefaultContent","isDefault","lastRngCell","gecko","pasteBinClone","copyAndRemove","pasteBinClones","dirtyWrappers","cleanWrapper","isPasteBin","PasteBin","Clipboard","togglePlainTextPaste","hasWorkingClipboardApi","iOS","setHtml5Clipboard","clearData","setClipboardData","markedHtml","contenteditable","setStyles","offscreenRange","selectNodeContents","isTableSelection","hasSelectedContent","getCaretRangeFromEvent","getCaretRangeFromPoint","isPlainTextFileUrl","plainTextContent","setFocusedRange","draggingInternallyState","dropContent","content_1","plugin","postProcess","addPreProcessFilter","filterFunc","addPostProcessFilter","removeExplorerBrElementsAfterBlocks","explorerBlocksRegExp","removeWebKitStyles","webKitStyles","webKitStylesSetting","dom_1","node_1","decode","removeUnderlineAndFontInAnchor","makeSetupHandler","pastePlainTextToggleHandler","addI18n","trimRight","Permissions","Standard","AdminAccess","Superuser","Core","Users","Edit","Delete","Roles","Teams","Organization","Substitutions","DataSources","DynamicForms","Categories","Accept","EditAll","DeleteAll","AcceptAll","Filters","Manage","Admin","Security","Authlog","Changelog","Finance","Invoices","Add","Coordinator","Accountant","Cms","Pages","Layouts","Compose","Publish","Websites","Articles","PublishAll","Informations","Faq","Tags","ContactForms","Saas","Databases","Storages","Tenants","Trash","Recover","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","styleValueToText","isWithinList","tableCellIndex","iconStyle","listStyleType","listStyle","_styles","addControl","fireRestoreDraft","fireStoreDraft","fireRemoveDraft","timeString","defaultTime","multiples","toParse","parsedTime","shouldAskBeforeUnload","getAutoSavePrefix","pathname","hash","shouldRestoreWhenEmpty","getAutoSaveInterval","getAutoSaveRetention","trimmedHtml","DOMParser","parseFromString","hasDraft","removeDraft","removeItem","storeDraft","no_events","restoreDraft","startStoreDraft","interval","setEditorInterval","restoreLastDraft","editorManager","autosave","returnValue","isNotEmpty","COMMENT","validSectionList","isValidSection","parentName","rowspan","colspan","detailnew","isNew","extended","isLocked","rowdata","elementnew","rowdatanew","rowcells","rowdetails","finishRow","finishCol","columnext","isComment","isTag","rawParent","prevSibling","ancestors","ancestors$1","children$2","child$1","child$2","sourceDom","targetDom","cssText","getAttrValue","getSpan","hasColspan","hasRowspan","getCssValue","firstLayer","filterFirstLayer","tags","isRootOrUpperTable","columnGroups","columnGroup","fromRowsOrColGroups","elems","getSection","cells$1","getParentSection","fromTable","rows$1","columnGroups$1","fromPastedRows","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cols","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","lockedArr","_val","getAt","warehouse","findItem","filtered","filterItems","generateColumns","rowData","columnsGroup","tableOpt","lockedColumns","maxRows","maxColumns","rowCount","currentRow_1","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","grid$1","fromTable$1","justCells","justColumns","hasColumns","getColumnAt","Warehouse","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox","intercepts","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","isSpecial","up","down","copyTo","afterAll","appendAll","setText","universe","look","oneAll","unsafeOne","commonElement","eq$2","ancestors$2","ps1","ps2","ind","pruned1","pruned2","firstpath","secondpath","sharedOne","ancestors$3","sharedOne$1","_universe","ancestors$4","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","shiftSelection","retrieve$1","retrieveBox","sectionSelector","firstAncestor","lastAncestor","fA","lA","type$1","onMultiple","onSingle","none$1","Selections","lazyRoot","selectedSelector","copy$1","cloneChildren","bindFrom","columns$1","isValidCell","rowsArr","getBlock","getFallback","decide","inBlock","validInBlock","detailOption","isSingle","deduce","aa","rowInfo","colInfo","rtlEdge","ltrEdge","getTop","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","amount","needManualCalc","toNumber","px","getProp","getCalculatedHeight","boxSizing","paddingTop","paddingBottom","borderTop","borderBottom","borders","getCalculatedWidth","paddingLeft","paddingRight","borderLeft","borderRight","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","getPercentSize","relativeParent","setPixelWidth","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getGenericWidth","setGenericWidth","getPixelTableWidth","getPercentTableWidth","isPercentSizing","isPixelSizing","isNoneSizing","percentageBasedSizeRegex","pixelBasedSizeRegex","isCol","getRaw$1","getRawW","getRawH","justCols","hasRawStyle","isValidColumn","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","minCellWidth","getPixelWidths","getHeightFrom","getPixelHeights","getRawHeights","noneSize","zero","getWidths","getCellDelta","singleColumnWidth","setElementWidth","adjustTableWidth","isRelative","percentageSize","initialWidth","_delta","pixelSize","newNext","chooseSize","fallbackWidth","getTableSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","selectedCells","findSelectedStats","house","totalColumns","totalRows","endRow","endCol","seenSelected","fillInGaps","stats","needCell","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","selectedColsWidth","replicaHouse","replicaStats","unselectedCells","transferableAttributes","createCell","createCol","createColgroup","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","attributeName","attribute","cellOperations","formatsToClone","cloneCss","docu","lastNode","colgroup","gap","fromDom$1","getNodeName","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addPxSuffix","removeDataStyle","removeStyleAttribute","getRawWidth$1","isPercentage","isPixel","getSelectionStart","selections","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","firstSelected","lastSelected","noMenu","paste$1","generators","pasteRows","extractSelected","serializeElements","getTextContent","registerEvents","cellSelection","multiCellContext","domCell","isTable","pasteCells","only","ColumnContext","neighbours","determine","onOnly","calcLeftEdgeDeltas","onMiddle","calcMiddleDeltas","calcRightEdgeDeltas","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","recalculateHeightForCells","matchRowHeight","sumUp","recalculate","recalculateAndApply","newSizes","adjustWidth","resizing","isLastColumn","clampedStep","clampTableDelta","newWidths","resizeTable","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustAndRedistributeWidths","_table","resizeBehaviour","sizes","tablePixelWidth","calcRedestributedWidths","pixelDelta","adjustWidthTo","_info","surround","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","calcFixedDeltas","clampedDelta","calcRelativeDeltas","ratio","newThis","_prev","resizer","totalWidth","tableWidth","ratio_1","preserveTable","_minCellSize","maxDelta","_totalWidth","_pixelDelta","_isRelative","isResizable","detached","editable","body$1","ResizeWire","validateFor","rawAmount","Size","redistributeToPercent","colType","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","redistributeValues","_pc","redistribute","newType","floats","roundDown","floored","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute$1","optWidth","optHeight","widthUnit","oldWidths","nuWidths","hUnit","totalHeight","oldHeights","nuHeights","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","getPercentTableWidth$1","getGridSize","Event","trigger","typeDefs","sort$1","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","Blocker","layerClass","mdown","mup","mmove","mout","MouseDrag","findClosestContentEditable","styles$1","resolve$1","Mutation","BarMutation","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","resizableColumns","resizableCols","colElmOpt","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","each$2","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","currentRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","destroy$1","tbl","hideBars","showBars","lazySizing","hdirection","vdirection","beforeResize","afterResize","startDrag","TableResize","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","fireTableSelectionChange","fireTableSelectionClear","fireTableModified","styleModified","structureModified","defaultTableToolbar","defaultStyles","determineDefaultStyles","isPixelsForced","editorWidth","isResponsiveForced","defaultAttributes","defaultColumnResizingBehaviour","getTableSizingMode","getTableResponseWidth","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPercentagesForced","useColumnGroup","getTableHeaderType","validValues","getColumnResizingBehaviour","validModes","givenMode","isPreserveTableColumnResizing","isResizeTableColumnResizing","getCloneElements","cloneElements","hasObjectResizing","objectResizing","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","convertToNoneSize","rowElements","enforcePercentage","tableSizing","enforcePixels","enforceNone","syncPixels","computedWidth","createContainer","barResizerPrefix","getResizeHandler","startW","startRawW","selectionRng","lazyResize","lazyWire","lazyResizingBehaviour","afterCornerResize","isRightEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","toEnd","freefallRtl","freefallRtl$1","universe$1","freefallRtl$2","halve","main","setIfNot","generateSection","sectionName","newSection","newRows","syncRows","gridSection","tr","syncColGroup","colGroup","renderSection","sync","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","copy$2","clonedCell","getColumn","getRow","findDiff","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","toDetails","seen","updateSeen","toGrid","groupElementNew","rowCells","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","extractCells","cell$1","lc","postAction","genWrappers","sizing","newElements","onCell","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCell","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","substitution","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","colFill","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","between","withinSpan","getElementFor","insertColumnAt","deleteColumnsAt","deleteRowsAt","replaceIn","isTarget","notStartRow","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","uniqueColumns","uniqueCheck","columnExists","currentDetail","elementToData","toData","nuFrom","recent","getOrInit","makeNew","replaceOrInit","getScopeAttribute","merging","getScopeProperty","stringAttributes","baseScope_1","scopes_1","isMixed","Generators","blockList","universe$2","isBlock$1","isList$1","isEmptyTag$1","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","elementFromGrid","findIn","uniqueRows","rowCompilation","rowExists","opInsertRowsBefore","targetIndex","newGrid","newG","opInsertRowsAfter","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeRowHeader","opMakeRowsHeader","initialGrid","currentGrid","opMakeColumnHeader","opMakeColumnsHeader","opUnmakeRowHeader","opUnmakeRowsHeader","opUnmakeColumnHeader","opUnmakeColumnsHeader","opEraseColumns","_comparator","_genWrappers","opEraseRows","opMergeCells","opUnmergeCells","unmerge$1","opPasteCells","pasteDetails","gridify","wh","mergedGrid","gridifyRows","opPasteColsBefore","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","getCellsType","headerPred","headerCells","adjustAndRedistributeWidths$1","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","checkLocked","eraseColumnsExtractor","pasteColumnsExtractor","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","mergeCells","unmergeCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnType","mapSectionNameToType","detectHeaderRow","isThead","areAllCellsThs","thead","ths","getRowType","_rowConfig","switchRowSection","rowElm","newSectionName","tableElm","oldSectionElm","oldSectionName","sectionElm_1","firstTableChild_1","renameCell","newCellType","switchCellType","switchCellsType","switchSectionType","determineHeaderRowType","allTableRows","detectedType","headerRowTypeSetting","headerRowType","getSelectionStartCellFallback","getSelectionStartFromSelector","startCellName","getSelectionStartCell","getSelectionStartCellOrCaption","getCellsFromSelection","_cell","getRowsFromSelection","rowsOpt","TableActions","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","guard","effect","des","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","extractType","validTypes","setTableCellType","setTableRowType","makeColumnsHeader$1","unmakeColumnsHeader$1","getTableRowType","rowTypes","hasHeader","hasFooter","hasBody","getTableCellType","getTableColType","DefaultRenderOptions","colGroups","tableHeaderCell","tableCell","tableColumn","createRow","rowHeaders","columnHeaders","createGroupRow","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","theadRowHeaders","theadRows","tbody","numRowHeaders","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage$1","insert$1","colHeaders","insertTableWithDataValidation","errorMsg","checkInput","headerRows","headerColumns","getClipboardElements","getClipboard","setClipboardElements","setClipboard","elmsOpt","insertTable","resizeHandler","selectionTargets","setClipboardRows","setRows","getClipboardRows","getRows","setClipboardCols","setColumns","getClipboardCols","getColumns","constrainSpan","currentColspan","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","isListGroup","buildListItems","inputList","startItems","appendItems","rgbToHex","extractAdvancedStyles","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAdvancedTab","dialogName","advTabItems","borderWidth","getAlignment","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","colElm","celltype","halign","getClassList","children$3","modifiers","testTruthy","setFormat","DomModifier","ifTruthy","getSelectedCells","cellA","cellB","updateSimpleProps","modifier","colModifier","updateAdvancedProps","applyCellData","oldData","isSingleCell","modifiedData","cellElm","styleModified_1","onSubmitCellForm","cellsData","dialogTabPanel","dialogPanel","getClassList$1","formChildren","getItems$1","updateSimpleProps$1","updateAdvancedProps$1","applyRowData","isSingleRow","typeModified_1","onSubmitRowForm","rowsData","getItems$2","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","styleTDTH","applyDataToElement","onSubmitTableForm","captionElm","captionModified","open$2","generalPanel","nonAdvancedForm","advancedForm","getSelectionStartCellOrCaption$1","getSelectionStartCell$1","eraseTable","cellOrCaption","setSizingMode","isForcedSizing","getTableFromCell","postExecute","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","_grid","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","mceTableSizingMode","func","fireTableModifiedForSelection","mceTableCellType","mceTableRowType","mceTableProps","mceTableRowProps","mceTableCellProps","getFormatName","validArgs","registerQueryCommands","mceTableColType","clearClipboard","clearRows","clearColumns","cellFormats","tablecellbackgroundcolor","backgroundColor","remove_similar","tablecellbordercolor","borderColor","tablecellborderstyle","borderStyle","tablecellborderwidth","none$2","CellLocation","detect$5","selectNodeContentsUsing","searchForPoint","rectForOffset","curDeltaX","inRect","locateOffset","textnode","rangeForOffset","foundRect","searchInChildren","locateNode","locate$1","boundedX","boundedY","COLLAPSE_TO_LEFT","COLLAPSE_TO_RIGHT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","caretPositionFromPoint","caretRangeFromPoint","searchTextNodes","searchFromPoint","availableSearch","fromPoint$1","beforeSpecial","preprocessRelative","preprocessExact","after$3","doSetNativeRange","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","toNative","getDomRange","setToElement","getAtPoint","backward","getCellFirstCursorPosition","getNewRowCursorPosition","rootElements","handle$1","body_1","isRoot_1","Response","Situs","convertToRange","makeSitus","selectRange","detect$6","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","traverse","backtrack","_direction","sidestep","advance","successors","go$1","ruleOpt","succ","Walkers","hone","left$1","right$1","isLeaf","before$3","seekLeft","after$4","seekRight","universe$3","before$4","after$5","seekLeft$1","seekRight$1","failedUp","failedDown","isOverlapping","bridge","beforeBounds","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$1","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","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","findSpot","brNeighbour","fromSitus","scan$1","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","MouseSelection","clearstate","applySelection","selectContents","isKey","keycode","isUp","isDown","isNavigation","ltr$2","isBackward","rtl$2","by","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","keyboard","clearToNavigate","realEvent","update$1","removeClasses","byClass","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","hasInternalTarget","CellSelection","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","getSelectionTargets","changeHandlers","selectionDetails","isCaption","isDisabledForSelection","findTargets","table$1","getExtractedDetails","onAny","onFirst","onLast","unmergeable","resetTargets","isDisabledFromLocked","lockedDisable","onSetupTable","onSetupCellOrRow","onSetupColumn","onSetupPasteable","getClipboardData","onSetupPasteableColumn","onSetupMergeable","_targets","onSetupUnmergeable","addButtons","addToolbars","addContextToolbar","addMenuItems","insertTableAction","tableProperties","deleteTable","addTempAttr","Plugin$1","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","defaultFormat","makeMenuItemHandler","cssLength","isParenthesisOpen","retCSS","addNewAttr","getAutoResizeMinHeight","getAutoResizeMaxHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","shouldAutoResizeOnInit","isFullscreen","fullscreen","wait","oldSize","times","toggleScrolling","overflowY","parseCssValueToInt","computed","resizeBottomMargin","resizeHeight","marginTop","marginBottom","contentHeight","containerHeight","contentAreaHeight","deltaSize","overflowPadding","opts","getDefaultCSSWhiteList","abbr","area","article","aside","audio","bdi","bdo","big","blockquote","center","cite","dd","del","dt","em","h1","h2","h3","h4","h5","h6","hr","ins","nav","ol","pre","small","sup","strong","tfoot","th","tt","video","defaultCSSFilter","REGEXP_LT","REGEXP_GT","friendlyAttrValue","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeAttrValue","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","escapeQuote","unescapeQuote","escapeHtmlEntities","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","isRemoveAllTag","isRemoveTag","removeList","posStart","STRIP_COMMENT_TAG_REGEXP","assumeExternalTargets","externalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","allowUnsafeLinkTarget","useQuickLink","sanitizeList","extractValue","sanitizeWith","extracter","createUi","ListOptions","isLink","getHref","collectNodesInRange","cloneContents","hasProtocol","applyRelTargetRules","isUnsafe","rels","addTargetRules","removeTargetRules","inArray","newRels","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getTextInlineElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","newRel","updateLink","linkImageFigure","linkDomMutation","attachState","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","cls","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_1","enforceSafe","safeRelExtractor","sanitizer","RelOptions","fallbacks","getTargets","TargetOptions","nonEmptyAttr","extractFromAnchor","onlyText","linkClass","linkNode","links","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","addContextForm","getKeyboardSpaces","wrapNbsps","stringRepeat","repeats","isVisualCharsEnabled","visualchars","isEnabled","insertNbsp","nbspSpan","shouldWrap","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","hasUploadUrl","hasUploadHandler","showAccessibilityOptions","isAutomaticUploadsEnabled","parseIntAndGetMax","val1","val2","getImageSize","onerror","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","selectImage","isPlaceholderImage","getHspace","marginLeft","marginRight","getVspace","hasCaption","updateAttrib","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","updateAlt","mergedCss","compressed","getSelectedImage","splitTextBlock","textBlockElements","parentElm","isValidChild","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","partialData","selectedImageData","isGroup","findEntryDelegate","findEntry","optList","ListUtils","makeTab","AdvTab","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","makeTab$1","MainTab","makeTab$2","UploadTab","prevImage","prevAlt","fromImageData","fileinput","toImageData","removeEmptyAlt","addPrependUrl2","srcURL","prependUrl","addPrependUrl","formFillFromMeta2","formFillFromMeta","calculateImageSize","helpers","imageSize","updateImagesDropdown","changeSrc","changeImages","calcVSpace","matchingTopBottom","calcHSpace","matchingLeftRight","calcBorderWidth","calcBorderStyle","calcStyle","changeStyle2","dataCopy","changeStyle","changeAStyle","changeFileInput","finalize","updateSrcAndSwitchTab","dataUrl","createBlobCache","uploadImage","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","submitHandler","uploadImagesAuto","normalizeCss$1","stylesArg","upload","Dialog","hasImageClass","toggleContentEditableState","toggleContentEditable","fireVisualChars","charMapToRegExp","charMapToSelector","regExpGlobal","nbspClass","wrapCharWithSpan","isMatch","filterDescendants","findParentElm","replaceWithSpans","isWrappedNbsp","nodeList","withSpans","applyVisualChars","toggleVisualChars","hasForcedRootBlock","debouncedToggle","debounce","enabledStated","DEFAULT_ID","getEmoticonDatabase","getEmoticonDatabaseUrl","getEmoticonDatabaseId","getAppendedEmoticons","getEmotionsImageUrl","ALL_CATEGORY","categoryNameMap","symbols","people","animals_and_nature","food_and_drink","activity","travel_and_places","user","translateCategory","categories","getUserDefinedEmoticons","userDefinedEmoticons","keywords","category","initDatabase","databaseUrl","databaseId","emojiImagesUrl","getEmoji","lib","processEmojis","emojis","cats","userEmojis","listCategory","listAll","listCategories","waitForLoad","hasLoaded","emojiMatches","emoji","emojisFrom","reachedLimit","insertEmoticon","dialogData","searchField","resultsField","getInitialState","actionData","_err","setDir","curDir","getNodeChangeHandler","isEquatableType","compareFn","contramap","eqa","tripleEq","eqString","eqArray","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","typeOf$1","bifilter","equal","indexOf$1","reduce","iteratee","accumulator","removeFromStart","numChars","removeLeading","lTrim","rTrim","platform$1","fileApi","windowsPhone","Env","caretAfter","documentMode","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","whiteSpaceRegExp","delim","sp","scn","de","cn","createNS","onCreate","exts","_addCacheSuffix","toArray$1","recurse","filterSelf","prevSiblings","nextSiblings","childNodesCount","getHead","getStyleContainer","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","getPrototypeOf","lowercasedNames","matchStyleValues","cssValue","hasAttributeValue","isBogus","isBogusAll","isTextareaOrInput","isComment$1","isDocument$1","isDocumentFragment$1","isImg","isTableCell","isMedia","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","module$1","par","asyncValues","asyncValue","par$1","futures","unite","requestAnimationFramePromise","support","Expr","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","document$1","documentIsHTML","rbuggyQSA","rbuggyMatches","contains$3","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","Delay","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","_setReferrerPolicy","referrerPolicy","addStyle","removeStyle","styleContainer","getOrCreateState","passed","failed","urlWithSuffix","testCallback","waitCallback","now","waitForWebKitLinkLoaded","styleSheets","styleSheet","ownerNode","linkElem","contentCssCors","loadF","loadAll","urls","unloadAll","WeakMap","forElement","referenceElement","rootDom","sl","DomTreeWalker","prev2","findSibling","findPreviousNode","startName","siblingName","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isHeading","isTable$1","isBr$1","isTableSection","isTableCell$1","isWsPreserveElement","isZwsp","removeZwsp","ZWSP","isZwsp$1","trim$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","hasContent","insertInline","endsWithCaretContainer","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$2","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","whiteSpaceRegExp$1","isWhitespaceText","hasWhitespacePreserveParent","rootElement","isContent","isBookmark","isBogus$1","isBogusAll$1","isEmptyNode","skipBogus","brCount","isSpan","isInlineContent","surroundedByInlineContent","prevIsInline","nextIsInline","isKeepTextNode","isKeepElement","isDocument$2","trimNode","currentChildren","makeMap$1","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","radix","entity","namedEntities","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","Entities","mapCache","dummyObj","makeMap$2","each$3","extend$1","explode$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","patternElements","customElementsMap","createLookupTable","extendWith","schemaItems","verify_html","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","validElementsArr","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","legend","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","attrPatterns","getCustomElements","Styles","_this","rgbRegExp","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","allow_script_urls","allow_svg_data_urls","serializeStyles","styleList","i_1","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","attachEvent","removeEvent","detachEvent","isMouseEvent","fix","originalEvent","srcElement","eventDoc","defaultPrevented","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","EventUtils","expando","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","currentTarget","relatedTarget","ci","eventMap","parentWindow","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","indexOf$2","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","checkNonElements","doneName","xml","oldCache","outerCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","hasCompare","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","duplicates","detectDuplicates","sortStable","createPseudo","excess","unquoted","nodeNameSelector","operator","what","ofType","useCache","pseudo","matched","lang","elemLang","tabIndex","selectedIndex","even","odd","lt","gt","nth","filters","parseOnly","soFar","preFilters","token","compiled","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","isWindow","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","attrHooks","cssHooks","DomQueryConstructor","inArray$1","whiteSpaceRegExp$2","trim$3","each$4","hook","camel","dashed","prependTo","replaceWith","wrapInner","classState","existingClassName","object","sibling$1","firstSibling","wrappedResult","parentsUntil","nextUntil","prevUntil","overrideDefaults","each$5","grep$1","simpleSelectorRe","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","findNodeIndex","lastNodeType","DOMUtils","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","getViewPort","argWin","getPos$1","update_styles","selectorVal","_findSib","getPrev","setHTML","canHaveHTML","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","styleElm","loadCSS","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","replaceChild","attrNode","findCommonAncestor","pe","rgbVal","isNonEmptyElement","bogusVal","splitElm","replacementElm","beforeFragment","afterFragment","rv","dumpRng","each$6","grep$2","QUEUED","LOADING","LOADED","FAILED","ScriptLoader","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","cleanup","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","notifyCallbacks","isRaw","isTokenised","currentCode","getLanguageData","setCode","newCode","getCode","langData","translation","getLangData","textstr","removeContext","substitued","$1","$2","hasCode","I18n","AddOnManager","_listeners","runListeners","matchedListeners","dependencies","requireLangPack","languages","languageLoad","waitFor","wrappedLanguages","addOn","addOnConstructor","createUrl","baseUrl","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","PluginManager","ThemeManager","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","_registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","identifyParserNode","persistent","TextWalker","TextSeeker","isBlockBoundary","newOffset","clone$2","isEqual","rect1","rect2","isValidOverflow","halfHeight","containsXY","getSelectedNode","extendingChars","isExtendingChar","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","ec","so","eo","newRng","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","HDirection","trimEmptyTextNode","insertFragment","rangeInsertNode","isText$5","isBogus$2","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal$1","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","getUndoBookmark","defaultPreviewStyles","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getContentSecurityPolicy","shouldPutBrInPre","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","contentCss","getFontCss","fontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","shouldValidate","isInlineBoundariesEnabled","getPreviewStyles","canFormatEmptyLines","getCustomUiSelector","getThemeUrl","isInline$1","hasHiddenInput","shouldPatchSubmit","isEncodingXml","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","hasContentCssCors","getPlugins","getExternalPlugins","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","isElement$4","isText$6","trimCount","trimmedText","deleteZwspChars","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","browser$2","isContentEditableFalse$3","isMedia$1","isTableCell$2","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","cursorInterval","lastVisualCaret","caretBlock","isInlineFakeCaretTarget","caretState","startBlink","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isMedia$2","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$5","isText$7","isElement$6","isBr$4","isCaretCandidate$3","isAtomic$1","isEditableCaretCandidate$1","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition","Forwards","startPos","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","isEmpty$1","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","resolvePaths","resolveId","endPos","spos","epos","resolveIndex$1","resolve$2","getBookmark$1","isBookmarkNode$1","is$2","expected","actual","isNbsp","isWhiteSpace$1","isContent$1","isNode","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","allowSpaces","isEmptyTextNode","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","isVariableFormatName","hasVariableValues","isVariableValue","fieldValues","areSimilarFormats","otherFormatName","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textOffset","spaceResult","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary","findParentContainer","block_expand","isSelfOrParentBookmark","expandRng","includeTrailingSpace","startPoint","endPoint","clampToExistingChildren","getEndChild","walk$1","collectSiblings","findEndPoint","walkBoundary","siblings_1","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","getCellsFromEditor","getSel","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","runOnRanges","fakeSelectionNodes","fakeNodeRng","fillBookmark","isZeroWidth","wrapName","applyWordGrab","makeAnnotation","eDoc","decorate","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","Annotator","annotationChanged","BookmarkManager","getContentEditableRoot","isXYWithinRange","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","VK","END","HOME","isContentEditableFalse$6","ControlSelection","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","elementSelectionAttr","editableDoc","rootDocument","resizeHandles","nw","ne","sw","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","firstElementChild","createGhostElement","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","setSizeProp","showResizeRect","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","updateResizeRect","startElm","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","hasCeProperty","findParent","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","parentElement","pointDoc","isEq$1","rng1","findParent$1","hasParent","hasParentWithName","isTable$3","isTableCell$3","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normRng","split$1","RangeUtils","normalize$1","normalizedRng","compareRanges","documentFocusInHandler","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","elementMarker","withMarker","preserveWith","applyWithMarker","withScrollEvents","startElement","endElement","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scroller","scrollRangeIntoView","browser$3","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","newBookmark","storeNative","isEditorUIElement","FocusManager","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","isEditorUIElement$1","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","iframeElement","hasInlineFocus","rawBody","hasUiFocus","hasFocus$1","hasEditorOrUiFocus","focusEditor","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","getEndpointElement","real","getStart$2","skipEmptyTextNodes","getNode$1","endElm","select$1","processRanges","typeLookup","walk$2","isEmptyTextNode$1","AstNode","selfAttrs","cloneAttrs","selfAttr","refNode","extractBase64DataUris","dataImageUri","uris","imageId","restoreDataUris","safeSvgDataUrlElements","isValidPrefixAttrName","blockSvgDataUris","allowSvgDataUrls","isInvalidUri","allow_html_data_urls","findEndTagIndex","tokenRegExp","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","attrString","SaxParser","fix_self_closing","pi","doctype","parseInternal","base64Extract","endRegExp","attrList","textData","isInternalElement","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","anyAttributesRequired","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processText","processComment","processAttr","processMalformedComment","startTag","parseAttribute","val3","attrRule","trimRegExp","fillAttrsMap","attrRegExp","selfClosing","self_closing_elements","removeInternalElements","remove_internals","fixSelfClosing","processHtml","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","bogusAllRegExp","getTempAttrs","trimExternal","trimEmptyContents","emptyRegExp","getContentFromBody","getInner","getContentInternal","each$7","ElementUtils","compareObjects","obj1","obj2","makeMap$3","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","htmlOutput","element_format","HtmlSerializer","8","7","10","11","sortedAttrs","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","getLastChildren$1","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","dropLast","parentsUntil$1","parents$1","parentsAndSelf","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary$1","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock$1","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspMiddle","normalizeNbspAtStart","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","normalizeNbsps","normalizeNbspsInEditor","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","mergeToPrev","whitespaceOffset","insertData","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","tableCellRng","tableSelection","deleteAction","removeTable","emptyCells","deleteCellSelection","isRootFromElement","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","getTableCells","getCellRng","endCell","getCellRangeFromStartTable","partialSelection","isWithinSameTable","getTableSelectionFromCellRng","getTableSelection","optCellRng","cRng","getCellIndex","isSingleCellTableContentSelected","getActionFromRange","deleteCellContents","lastBlock","additionalCleanupNodes","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","fromPos","deleteCaret","createRange$1","normalizeBlockSelectionRange","newEndPos","normalize$2","hasOnlyOneChild","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","nonEmptyElements","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","caretWalker","newCaretPos","findLastOf","insertMiddle","insertAtCaret","liTarget","liElms","BEGINNING","isAt","trimOrPadLeftRight","isTableCell$4","isTableCellContentSelected","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","testNode","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","nextRng","getContentEditableFalseParent","parentEditableFalseElm","findNextCaretRng","deleteSelectedContent","insertHtmlAtCaret","bookmarkHtml","caretElement","parserArgs","_selectionOverrides","showBlockCaretContainer","findMatchingNodes","nodeFilters","attributeFilters","attrMatches","name_2","filter$3","isTreeNode","setEditorHtml","setContentString","forcedRootBlockName","padd","setContentTree","getNodeFilters","getAttributeFilters","setContentInternal","sibling$2","ancestor$3","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","matchAll","matchedFormatNames","checkedMap","rawElm","defaultBlock","matchAllOnNode","formatNames","matchSimilar","ZWSP$1","CARET_ID$1","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","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","filter$4","each$8","addPostProcessHook","hooks","hasPreSibling","isPre","joinPre","pre1","pre2","each$9","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$a","isEq$3","isTableCellOrRow","isChildOfInlineParent","lastIdx","normalizeTableSelection","childNode","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","removeNode$1","rootBlockElm","list_block","forced_root_block_attrs","removeFormatInternal","compareNode","stylesModified","preserve_attributes","attrsToPreserve","valueOut","newName","findFormatRoot","formatRoot","removeFormatFromClone","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecorations","textDecoration","ceFalseOverride","each$b","mergeTextDecorationsAndColor","processTextDecorationsAndColor","mergeBackgroundColorAndFontSize","mergeSubSup","mergeWithChildren","mergeWithParents","merge_with_parents","each$c","hasFormatProperty","isElementNode$1","canFormatBR","validBRParentElements","figcaption","summary","hasCaretNodeSibling","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","getChildCount","getChildElementNode","mergeStyles","childCount","curSelNode","firstFormat","fake","formatItem","registeredFormatListeners","currentFormats","updateAndFireChangeCallbacks","formatChangeData","formatsList","newFormats","remainingFormats","filterRemainingFormats","addListeners","formatChangeItems","formatChangedInternal","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","wrap$3","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","fullTableModel","sectionedTableModel","getSelectionFragment","trimLeadingCollapsibleText","getInnerText","bin","shouldTrim","getContextNodeName","contextNodeName","shouldTrimSpaces","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","getSelectedContentInternal","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","fragments","currentFragments","undoLevelDocument","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange","addUndoLevel","currentLevel","bm","customUndoRedoLevels","callback1","callback2","hasUndo","hasRedo","addVisualInternal","matchedElm","value_1","cls_1","makePlainAdaptor","getModel","makeRtcAdaptor","rtcEditor","defaultVars","_undoManager","_locks","_node","_similar","_rfl","_details","getRawModel","makeNoopAdaptor","nul","isRtc","editorCast","rtcInstance","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","beforeChange$1","addUndoLevel$1","undo$1","redo$1","clear$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","extra$1","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","applyFormat$1","removeFormat$1","getSelectedContent","getContent$1","walkPastBookmark","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","normalizer","innerTextNode","rngSetContent","nextText","setupArgs","cleanContent","contextBlock","contextArgs","setContent$1","contentArgs","createContextualFragment","deleteFromCallbackMap","newCallbacks","SelectorChanged","selectorChangedData","currentSelectors","matchedSelectors","isNativeIeSelection","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","getRng$1","getEnd$1","bookmarkManager","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","controlSelection","removeAttrs","addFontToSpansFilter","fontSizes","face","addStrikeToSpanFilter","addFilters","convert_fonts_to_spans","font_size_legacy_values","inline_styles","blobUriToBlob","rejectWithError","xhr_1","XMLHttpRequest","responseType","parseDataUri$1","uriParts","buildBlob","uriToBlob","imageToBlobInfo","getByUri","dataUri","getAllImages","ImageScanner","uploadStatus","cachedPromises","isUploaded","promises","imageInfo","newPromise","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$2","whitespaceElements","isLineBreakNode","isBogusImage","isInternalImageSource","isValidDataImg","images_dataimg_filter","imgElem_1","registerBase64ImageFilter","blob_cache","processImage","inputSrc","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$d","explode$2","extend$2","DomParser","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","newParent","tempNode","nonSplitableElements","filterNode","fi","fl","isInWhiteSpacePreservedElement","invalidChildren","getRootBlockName","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","addRootBlocks","rootBlockNode","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","attrFiltersLen","htmlParser","internalName","hasChildren","trimTrailingBr","brNode1","brNode2","oldDoc","impl","shouldFireEvent","postProcess$1","outArgs","getHtmlFromNode","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializerImpl","addRules","setRules","DomSerializer","domSerializer","defaultFormat$1","getContent$2","setContent$2","DOM$3","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","formElement","restoreForm","_mceOldSubmit","formEventDelegate","is_removing","unbindAllNativeEvents","automatic","destroyed","_beforeUnload","hasOwnProperty$2","deep$1","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","sectionSettings","hasSection","isSectionTheme","getSectionConfig","getDefaultSettings","documentBaseUrl","baseDefaults","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","remove_script_host","visual","hidden_input","getDefaultMobileSettings","mobileSettings","defaultMobileSettings","toolbar_sticky","defaultPhoneSettings","getExternalPlugins$1","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","processPlugins","defaultOverrideSettings","forced_plugins","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","defaultDeviceSettings","extendedSettings","getEditorSettings","getFiltered","getParamObject","CreateIconManager","iconPack","IconManager","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","fireEvent","getNotifications","serviceMessage","WindowManagerImpl","getParams","setParams","BreakType","WindowManager","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","windowManagerImpl","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","pluginInitError","initError","isContentCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","contentCssFile","appendContentCssFromSettings","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","isPending","markPending","markUploaded","removeFailed","count$1","rnd","uuid","BlobCache","mimeToExt","toBlobInfo","findFirst","cachedBlobInfo","removeByUri","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","xhr","withCredentials","credentials","onprogress","json","responseText","basePath","FormData","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","closeNotification_1","failureOptions","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","UploadChangeHandler","lastChangedLevel","fireIfChanged","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","uploadImages","scanForImages","imageInfos","imagesToRemove","filteredResult","uploadInfo","uploadUri","dataImgFilter","addFilter","resultItem","replaceBlobUris","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize","lineheight","lineHeight","fontsize_class","subscript","superscript","removeformat","FormatRegistry","each$e","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","ancestorName","parentRequired","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","previewFrag","parentFontSize","previewCss","previewStyles","removeVars","previewOpt","previewElm","numValue","Formatter","formatChangeState","registerEvents$1","isFirstTypedCharacter","addNonTypingUndoLevel","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","isForcedRootBlockFalse","updatePlaceholder","showPlaceholder","isPlaceholderShown","strongRtl","hasStrongRtl","isInlineTarget","isRtl$1","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","blockPosition","blockBoundary","getBlockPosition","isDifferentBlocks","hasSameParent","parent1","parent2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$3","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$1","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$1","backspaceDelete$2","_forward","isContentEditableTrue$2","isContentEditableFalse$7","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode$1","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","backspaceDelete$3","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read$4","deleteElement$1","hideFakeCaret","getAncestorCe","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$4","deleteCaret$1","backspaceDelete$5","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertBefore$1","insertAfter$1","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","isValidLocation","readLocation","getName","outside","isEq$5","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","hasSelectionModifyApi","modify","moveByWord","setCaretPosition","setSelected","renderCaretLocation","findLocation$1","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","_inline","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$6","getParentInlines","hasOnlyOneChild$1","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$2","backspaceDelete$7","deleteElement$2","deleteCaret$3","isNearMedia","deleteRange$2","backspaceDelete$8","isEditable$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","backspaceDelete$9","nativeCommand","deleteCommand","forwardDeleteCommand","debounceLongpress","isEqualNode","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","rootNodeName","restoreSelection","findBlockCaretContainer","removeIeControlRect","blockCaretContainer","handleBlockContainer","VDirection","walk$3","getBreakType","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","getNodeClientRects","toArrayWithNode","customEventRootDelegates","beforeUnloadDelegate","findUntil$1","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","getClientRect","isAboveLine","isLine","isContentEditableFalse$8","findNode$1","distanceToRectLeft","distanceToRectRight","isInsideX","isInsideY","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","includeChildren","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestFakeCaret","fakeTargetNodeRects","targetNodeRects","closestNodeRect","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","moveToLineEndPoint","isContentEditableFalse$9","moveToCeFalseHorizontally","moveToCeFalseVertically","exitPreBlock","getVisualCaretPosition$1","getHorizontalRange","getVerticalRange","moveH","newRange","moveV","moveToLineEndPoint$1","isCefPosition","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlockAttrs","moveV$1","matchesEvent","match$1","moveH$1","moveV$2","moveToLineEndPoint$2","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell$1","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","getTable","renderBlock","navigateVertically","mover","moveH$2","moveV$3","executeKeydownOverride","executeKeydownOverride$1","executeKeyupOverride","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","trimZwsp","isEmptyAnchor","isTableCell$5","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","parentBlockName","isAfterLastNodeInContainer","clonedNode","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","hasRightSideContent","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","insert$2","anchorLocation","shouldInsertBr","shouldBlockNewLine","newLineAction","shouldBlockNewLine$1","_shiftKey","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","getAction$1","insert$3","handleEnterKeyEvent","executeKeydownOverride$2","setup$f","browser$4","setupIeInput","keypressThrotter","setup$g","isComposing","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection$1","insertSpaceOrNbspAtSelection","executeKeydownOverride$3","setup$h","registerKeyboardOverrides","setup$i","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","currentPath","preventSummaryToggle","filterDetails","setup$j","isTextBlockNode","normalizeSelection$1","setup$k","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","isContentEditableFalse$a","isContentEditableTrue$3","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","appendGhostToBody","moveGhost","overflowX","removeElement","isLeftMouseButtonPressed","applyRelPos","relX","start$1","ceElm","elmPos","dragging","relY","ghost","move$2","throttledPlaceCaretAt","targetPos","getRawTarget","targetClone_1","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockIeDrop","realTarget","blockUnsupportedFileDrop","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","setup$l","renderFocusCaret","setup$m","isContentEditableTrue$4","isContentEditableFalse$b","getContentEditableRoot$1","SelectionOverrides","fakeCaret","realSelectionId","isFakeSelectionElement","isFakeSelectionTargetElement","isNearFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeElementSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","setElementSelection","fakeCaretInfo","normalizeShortEndedElementSelection","isRangeInCaretContainer","realSelectionElement","outerText","isWithinCaretContainer","setupOffscreenSelection","targetClone","origTargetClone","$realSelectionContainer","selectElement","nodeElm","afterNode","Quirks","isGecko","isWebKit","mceInternalDataType","setEditorCommandState","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","queryCommandSupported","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","Range","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","DOM$4","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSerializerSettings","boolean_attributes","move_caret_before_on_enter_elements","non_empty_elements","short_ended_elements","text_inline_elements","whitespace_elements","createParser","autoFocus","auto_focus","moveSelectionToFirstCaretPosition","initEditor","bindPendingEventDelegates","getStyleSheetLoader","makeStylesheetLoadingPromises","framedFonts","loadContentCss","removeCss","preInit","rtcMode","gecko_spellcheck","spellcheck","protect","contentCssText_1","content_style","initContentBody","skipWrite","orgVisibility","iframeHTML","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","loadingRtc","setProgressState","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","bodyId","createIframe","isDomainRelaxed","boxInfo","hidden","DOM$6","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initPlugins","initIcons","iconPackName","currentIcons","loadIcons","svgData","addIcon","initTheme","renderFromLoadedTheme","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","augmentEditorUiApi","uiApiFacade","renderInfo","DOM$7","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","url_1","loadTheme","themeUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","depPlugin","url_2","getStyleSheetLoader$1","triggerSave","set_dirty","addVisual$1","legacyPropNames","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","getCaretElement","atStartOfNode","mapRange","mapper","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","lineHeightQuery","specifiedStyle","computedStyle","lineHeightAction","processValue","insertAtCaret$1","each$f","map$3","inArray$2","EditorCommands","setupCommands","skip_focus","customCommand","addCommands","commandList","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","queryCommandEnabled","listParent","editingHost","alignStates","Undo","Redo","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","isReadOnly$1","registerFilters","registerReadOnlyContentFilters","isClickEvent","getAnchorHrefOpt","processReadonlyEvents","registerReadOnlySelectionBlockers","nativeEvents","EventDispatcher","bindings","toggleEvent","isNative","nameIn","argsIn","beforeFire","wrappedCallback","currentName","bindingName","hi","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","dispatcherArgs","DOM$8","getEventTarget","eventRoot","isListening","bindEventDelegate","delegates","eventRootElm","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","deactivate","editorReadOnly","registerMode","design","each$g","explode$3","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","parseShortcut","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","cmdFunc","normalizeCommandFunc","createShortcut","addSidebar","each$h","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","isProtocolRelative","toAbsPath","urlMatch","userInfo","uriComponents","setPath","pathMatch","toRelative","relativeUri","tu","uu","toRelPath","noHost","absoluteUri","defaultPort","breakPoint","normalizedBase","outPath","nb","normalizedPath","noProtoHost","DOM$9","extend$3","each$i","resolve$3","ie$1","Editor","loadedCSS","isNotDirty","documentBaseURL","_setBaseUrl","baseURI","referrer_policy","language_load","editorCommands","cache_suffix","modeInstance","callbackLookup","initialContent","oldState","urlconverter_callback","_scanForImages","DOM$a","explode$4","each$j","extend$4","instanceCounter","boundGlobalEvents","legacyEditors","isValidLegacyKey","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","compatMode","majorVersion","minorVersion","releaseDate","i18n","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","invalidInlineTargets","isInvalidInlineTarget","createId","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","extendClass","initializing","relativePosition","targetW","targetH","relChars","findBestRelativePosition","constrainRect","intersect","x1","y1","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","Rect","awaiter","resolveCb","rejectCb","tasks","resultFns","loadErrMsg","runErrMsg","task","waiter","Resource","each$k","extend$5","Class","_super","mixins","mixin","Mixins","dummy","createMethod","Methods","Properties","Statics","Defaults","member","localStorage","min$1","max$1","round$2","Color","rgb2hsv","hsvToRgb","toRgb","toHsv","hexCode","JSONUtils","JSONP","XHR","ready","async","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","extend$6","JSONRequest","sendRPC","ecb","scb","xhrArgs","create$9","configurable","enumerable","LocalStorage","publicApi","geom","TreeWalker","Serializer","Selection","isMac","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","regExps","aletter","midnumlet","midletter","midnum","cr","lf","newline","katakana","extendnumlet","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","SETS$1","setsLength","memoize","classify","memoized","isWordBoundary","nextType","nextNextType","prevType","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","findUrlEnd","peakedWord","findWords","sChars","characterMap","word","includeWhitespace","includePunctuation","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWords","filteredChars","extractedChars","getWords$1","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","getWordCount","getCharacterCount","getCharacterCountWithoutSpaces","getCount","fireWordCountUpdate","charactersWithoutSpaces","updateCount","debouncedUpdate","reg","editorContent","fullscreenState","fireFullscreenStateChanged","getFullscreenNative","getFullscreenRoot","getFullscreenElement","fullscreenElement","msFullscreenElement","webkitFullscreenElement","getFullscreenchangeEventName","requestFullscreen","sugarElem","msRequestFullscreen","webkitRequestFullScreen","exitFullscreen","sugarDoc","msExitFullscreen","webkitCancelFullScreen","isFullscreenElement","siblings$1","siblings$2","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","containerTop","containerLeft","_evt","newFullScreenInfo","pluginManager","containerRect","toolbarRect","scrollRect","floatingtoolbar_minwidth","floatingtoolbar_minheight","floatingtoolbar_top","floatingtoolbar_bottom"],"mappings":"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UpxH,QAAQq5F,GAASlnE,EAAMknE,EAAO65B,iBAIxDsB,GAAoB,SAAUriG,GAChC,OAAOmiG,GAASniG,IAGdsiG,GAAU,SAAU71H,EAAOgwC,EAAK7S,GAClC,IAAI24F,EAA+B,kBAAV91H,EAAqB+8B,WAAW/8B,GAASA,EAMlE,OALI81H,EAAc34F,EAChB24F,EAAc34F,EACL24F,EAAc9lF,IACvB8lF,EAAc9lF,GAET8lF,GAELC,GAAa,WACf,MAAO,CACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGAC,GAAc,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,EACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,EACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,IAEEC,GAAW,SAAUC,EAASC,GAIhC,IAHA,IAEI5rH,EAFA+1F,EAAM,GACN81B,EAAM,IAAI5zH,MAAM,IAEXf,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAIiB,EAAI,EAAGA,EAAI,EAAGA,IACrB49F,EAAI59F,GAAKyzH,EAAQzzH,EAAQ,EAAJjB,GAEvB,IAASiB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B6H,EAAM,EACN,IAAK,IAAI9H,EAAI,EAAGA,EAAI,EA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CA,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,CACE3oL,KAAM,OACN2oL,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,CACE3oL,KAAM,aACN2oL,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,CACE3oL,KAAM,eACN2oL,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,CACE3oL,KAAM,iBACN2oL,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,CACE3oL,KAAM,UACN2oL,WAAY,CACV,CACE,KACA,eAEF,CACE,IACA,aAEF,CACE,KACA,oBAEF,CACE,IACA,yBAEF,CACE,KACA,iBAEF,CACE,KACA,oBAIN,CACE3oL,KAAM,SACN2oL,WAAY,CACV,CACE,KACA,mBAEF,CACE,KACA,iBAEF,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","file":"static/js/editor.59d9b8c9.js","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var noop = function () {\n };\n var noarg = function (f) {\n return function () {\n return f();\n };\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n var isArrayOf = function (value, pred) {\n if (isArray(value)) {\n for (var 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 var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var range = function (num, f) {\n var r = [];\n for (var i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n var chunk = function (array, size) {\n var r = [];\n for (var i = 0; i < array.length; i += size) {\n var s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter(a1, function (x) {\n return !contains(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n var last = function (xs) {\n return get(xs, xs.length - 1);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (_opt) {\n return value(o);\n };\n var orThunk = function (_f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (_f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (_f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: 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 var fold = function (res, onError, onValue) {\n return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n };\n var partition$1 = function (results) {\n var values = [];\n var errors = [];\n each(results, function (obj) {\n fold(obj, function (err) {\n return errors.push(err);\n }, function (val) {\n return values.push(val);\n });\n });\n return {\n values: values,\n errors: errors\n };\n };\n var mapError = function (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 var map$1 = function (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 var bind$1 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n var bindError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n var svalue = function (v) {\n return {\n stype: SimpleResultType.Value,\n svalue: v\n };\n };\n var serror = function (e) {\n return {\n stype: SimpleResultType.Error,\n serror: e\n };\n };\n var toResult = function (res) {\n return fold(res, Result.error, Result.value);\n };\n var fromResult = function (res) {\n return res.fold(serror, svalue);\n };\n var SimpleResult = {\n fromResult: fromResult,\n toResult: toResult,\n svalue: svalue,\n partition: partition$1,\n serror: serror,\n bind: bind$1,\n bindError: bindError,\n map: map$1,\n mapError: mapError,\n fold: fold\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var find$1 = function (obj, pred) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var get$1 = function (obj, key) {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var generate = function (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 var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate };\n\n var hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$1.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var deepMerge = baseMerge(deep);\n var merge = baseMerge(shallow);\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var adt = Adt.generate([\n { strict: [] },\n { defaultedThunk: ['fallbackThunk'] },\n { asOption: [] },\n { asDefaultedOptionThunk: ['fallbackThunk'] },\n { mergeWithThunk: ['baseThunk'] }\n ]);\n var defaulted = function (fallback) {\n return adt.defaultedThunk(constant(fallback));\n };\n var mergeWith = function (base) {\n return adt.mergeWithThunk(constant(base));\n };\n var strict = adt.strict;\n var asOption = adt.asOption;\n var defaultedThunk = adt.defaultedThunk;\n var asDefaultedOptionThunk = adt.asDefaultedOptionThunk;\n var mergeWithThunk = adt.mergeWithThunk;\n\n var comparison = 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 var partition$2 = function (results) {\n var errors = [];\n var values = [];\n each(results, function (result) {\n result.fold(function (err) {\n errors.push(err);\n }, function (value) {\n values.push(value);\n });\n });\n return {\n errors: errors,\n values: values\n };\n };\n\n var exclude = function (obj, fields) {\n var r = {};\n each$1(obj, function (v, k) {\n if (!contains(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n var wrap = function (key, value) {\n var _a;\n return _a = {}, _a[key] = value, _a;\n };\n var wrapAll = function (keyvalues) {\n var r = {};\n each(keyvalues, function (kv) {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n var exclude$1 = function (obj, fields) {\n return exclude(obj, fields);\n };\n var wrap$1 = function (key, value) {\n return wrap(key, value);\n };\n var wrapAll$1 = function (keyvalues) {\n return wrapAll(keyvalues);\n };\n var mergeValues = function (values, base) {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge.apply(undefined, values)));\n };\n var mergeErrors = function (errors) {\n return Result.error(flatten(errors));\n };\n var consolidate = function (objs, base) {\n var partitions = partition$2(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n var mergeValues$1 = function (values, base) {\n return values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n };\n var mergeErrors$1 = function (errors) {\n return compose(SimpleResult.serror, flatten)(errors);\n };\n var consolidateObj = function (objects, base) {\n var partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n var consolidateArr = function (objects) {\n var partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n var ResultCombine = {\n consolidateObj: consolidateObj,\n consolidateArr: consolidateArr\n };\n\n var formatObj = function (input) {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n var formatErrors = function (errors) {\n var es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: function () {\n return '... (only showing first ten failures)';\n }\n }]) : errors;\n return map(es, function (e) {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n var nu = function (path, getErrorInfo) {\n return SimpleResult.serror([{\n path: path,\n getErrorInfo: getErrorInfo\n }]);\n };\n var missingStrict = function (path, key, obj) {\n return nu(path, function () {\n return 'Could not find valid *strict* value for \"' + key + '\" in ' + formatObj(obj);\n });\n };\n var missingKey = function (path, key) {\n return nu(path, function () {\n return 'Choice schema did not contain choice key: \"' + key + '\"';\n });\n };\n var missingBranch = function (path, branches, branch) {\n return nu(path, function () {\n return 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches);\n });\n };\n var unsupportedFields = function (path, unsupported) {\n return nu(path, function () {\n return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified';\n });\n };\n var custom = function (path, err) {\n return nu(path, function () {\n return err;\n });\n };\n\n var adt$1 = Adt.generate([\n {\n field: [\n 'key',\n 'okey',\n 'presence',\n 'prop'\n ]\n },\n {\n state: [\n 'okey',\n 'instantiator'\n ]\n }\n ]);\n var strictAccess = function (path, obj, key) {\n return get$1(obj, key).fold(function () {\n return missingStrict(path, key, obj);\n }, SimpleResult.svalue);\n };\n var fallbackAccess = function (obj, key, fallbackThunk) {\n var v = get$1(obj, key).fold(function () {\n return fallbackThunk(obj);\n }, identity);\n return SimpleResult.svalue(v);\n };\n var optionAccess = function (obj, key) {\n return SimpleResult.svalue(get$1(obj, key));\n };\n var optionDefaultedAccess = function (obj, key, fallback) {\n var opt = get$1(obj, key).map(function (val) {\n return val === true ? fallback(obj) : val;\n });\n return SimpleResult.svalue(opt);\n };\n var cExtractOne = function (path, obj, field, strength) {\n return field.fold(function (key, okey, presence, prop) {\n var bundle = function (av) {\n var result = prop.extract(path.concat([key]), strength, av);\n return SimpleResult.map(result, function (res) {\n return wrap(okey, strength(res));\n });\n };\n var bundleAsOption = function (optValue) {\n return optValue.fold(function () {\n var outcome = wrap(okey, strength(Optional.none()));\n return SimpleResult.svalue(outcome);\n }, function (ov) {\n var result = prop.extract(path.concat([key]), strength, ov);\n return SimpleResult.map(result, function (res) {\n return wrap(okey, strength(Optional.some(res)));\n });\n });\n };\n return function () {\n return presence.fold(function () {\n return SimpleResult.bind(strictAccess(path, obj, key), bundle);\n }, function (fallbackThunk) {\n return SimpleResult.bind(fallbackAccess(obj, key, fallbackThunk), bundle);\n }, function () {\n return SimpleResult.bind(optionAccess(obj, key), bundleAsOption);\n }, function (fallbackThunk) {\n return SimpleResult.bind(optionDefaultedAccess(obj, key, fallbackThunk), bundleAsOption);\n }, function (baseThunk) {\n var base = baseThunk(obj);\n var result = SimpleResult.map(fallbackAccess(obj, key, constant({})), function (v) {\n return deepMerge(base, v);\n });\n return SimpleResult.bind(result, bundle);\n });\n }();\n }, function (okey, instantiator) {\n var state = instantiator(obj);\n return SimpleResult.svalue(wrap(okey, strength(state)));\n });\n };\n var cExtract = function (path, obj, fields, strength) {\n var results = map(fields, function (field) {\n return cExtractOne(path, obj, field, strength);\n });\n return ResultCombine.consolidateObj(results, {});\n };\n var valueThunk = function (getDelegate) {\n var extract = function (path, strength, val) {\n return getDelegate().extract(path, strength, val);\n };\n var toString = function () {\n return getDelegate().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var value$1 = function (validator) {\n var extract = function (path, strength, val) {\n return SimpleResult.bindError(validator(val, strength), function (err) {\n return custom(path, err);\n });\n };\n var toString = function () {\n return 'val';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var getSetKeys = function (obj) {\n return keys(filter$1(obj, function (value) {\n return value !== undefined && value !== null;\n }));\n };\n var objOfOnly = function (fields) {\n var delegate = objOf(fields);\n var fieldNames = foldr(fields, function (acc, f) {\n return f.fold(function (key) {\n return deepMerge(acc, wrap$1(key, true));\n }, constant(acc));\n }, {});\n var extract = function (path, strength, o) {\n var keys = isBoolean(o) ? [] : getSetKeys(o);\n var extra = filter(keys, function (k) {\n return !hasNonNullableKey(fieldNames, k);\n });\n return extra.length === 0 ? delegate.extract(path, strength, o) : unsupportedFields(path, extra);\n };\n return {\n extract: extract,\n toString: delegate.toString\n };\n };\n var objOf = function (fields) {\n var extract = function (path, strength, o) {\n return cExtract(path, o, fields, strength);\n };\n var toString = function () {\n var fieldStrings = map(fields, function (field) {\n return field.fold(function (key, okey, presence, prop) {\n return key + ' -> ' + prop.toString();\n }, function (okey, _instantiator) {\n return 'state(' + okey + ')';\n });\n });\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOf = function (prop) {\n var extract = function (path, strength, array) {\n var results = map(array, function (a, i) {\n return prop.extract(path.concat(['[' + i + ']']), strength, a);\n });\n return ResultCombine.consolidateArr(results);\n };\n var toString = function () {\n return 'array(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var oneOf = function (props) {\n var extract = function (path, strength, val) {\n var errors = [];\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var res = prop.extract(path, strength, val);\n if (res.stype === SimpleResultType.Value) {\n return res;\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n var toString = function () {\n return 'oneOf(' + map(props, function (prop) {\n return prop.toString();\n }).join(', ') + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var setOf = function (validator, prop) {\n var validateKeys = function (path, keys) {\n return arrOf(value$1(validator)).extract(path, identity, keys);\n };\n var extract = function (path, strength, o) {\n var keys$1 = keys(o);\n var validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, function (validKeys) {\n var schema = map(validKeys, function (vk) {\n return adt$1.field(vk, vk, strict(), prop);\n });\n return objOf(schema).extract(path, strength, o);\n });\n };\n var toString = function () {\n return 'setOf(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var thunk = function (desc, processor) {\n var getP = cached(function () {\n return processor();\n });\n var extract = function (path, strength, val) {\n return getP().extract(path, strength, val);\n };\n var toString = function () {\n return getP().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var anyValue = constant(value$1(SimpleResult.svalue));\n var arrOfObj = compose(arrOf, objOf);\n var state = adt$1.state;\n var field = adt$1.field;\n\n var chooseFrom = function (path, strength, input, branches, ch) {\n var fields = get$1(branches, ch);\n return fields.fold(function () {\n return missingBranch(path, branches, ch);\n }, function (vp) {\n return vp.extract(path.concat(['branch: ' + ch]), strength, input);\n });\n };\n var choose = function (key, branches) {\n var extract = function (path, strength, input) {\n var choice = get$1(input, key);\n return choice.fold(function () {\n return missingKey(path, key);\n }, function (chosen) {\n return chooseFrom(path, strength, input, branches, chosen);\n });\n };\n var toString = function () {\n return 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n\n var _anyValue = value$1(SimpleResult.svalue);\n var arrOfObj$1 = function (objFields) {\n return arrOfObj(objFields);\n };\n var arrOfVal = function () {\n return arrOf(_anyValue);\n };\n var valueThunkOf = valueThunk;\n var valueOf = function (validator) {\n return value$1(function (v) {\n return validator(v).fold(SimpleResult.serror, SimpleResult.svalue);\n });\n };\n var setOf$1 = function (validator, prop) {\n return setOf(function (v) {\n return SimpleResult.fromResult(validator(v));\n }, prop);\n };\n var extract = function (label, prop, strength, obj) {\n var res = prop.extract([label], strength, obj);\n return SimpleResult.mapError(res, function (errs) {\n return {\n input: obj,\n errors: errs\n };\n });\n };\n var asRaw = function (label, prop, obj) {\n return SimpleResult.toResult(extract(label, prop, identity, obj));\n };\n var getOrDie = function (extraction) {\n return extraction.fold(function (errInfo) {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n var asRawOrDie = function (label, prop, obj) {\n return getOrDie(asRaw(label, prop, obj));\n };\n var formatError = function (errInfo) {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n var chooseProcessor = function (key, branches) {\n return choose(key, branches);\n };\n var choose$1 = function (key, branches) {\n return choose(key, map$2(branches, objOf));\n };\n var thunkOf = function (desc, schema) {\n return thunk(desc, schema);\n };\n var anyValue$1 = constant(_anyValue);\n var typedValue = function (validator, expectedType) {\n return value$1(function (a) {\n var actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected type: ' + expectedType + ' but got: ' + actualType);\n });\n };\n var number = typedValue(isNumber, 'number');\n var string = typedValue(isString, 'string');\n var boolean = typedValue(isBoolean, 'boolean');\n var functionProcessor = typedValue(isFunction, 'function');\n var isPostMessageable = function (val) {\n var every = function (iter, callbackFn) {\n var result = iter.next();\n while (!result.done) {\n if (!callbackFn(result.value)) {\n return false;\n }\n result = iter.next();\n }\n return true;\n };\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(function (prop) {\n return isPostMessageable(val[prop]);\n });\n case 'Map':\n return every(val.keys(), isPostMessageable) && every(val.values(), isPostMessageable);\n case 'Set':\n return every(val.keys(), isPostMessageable);\n default:\n return false;\n }\n };\n var postMessageable = value$1(function (a) {\n return isPostMessageable(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n });\n\n var validateEnum = function (values) {\n return valueOf(function (value) {\n return contains(values, value) ? Result.value(value) : Result.error('Unsupported value: \"' + value + '\", choose one of \"' + values.join(', ') + '\".');\n });\n };\n var strict$1 = function (key) {\n return field(key, key, strict(), anyValue());\n };\n var strictOf = function (key, schema) {\n return field(key, key, strict(), schema);\n };\n var strictNumber = function (key) {\n return strictOf(key, number);\n };\n var strictString = function (key) {\n return strictOf(key, string);\n };\n var strictStringEnum = function (key, values) {\n return field(key, key, strict(), validateEnum(values));\n };\n var strictBoolean = function (key) {\n return strictOf(key, boolean);\n };\n var strictFunction = function (key) {\n return strictOf(key, functionProcessor);\n };\n var forbid = function (key, message) {\n return field(key, key, asOption(), value$1(function (_v) {\n return SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message);\n }));\n };\n var strictObjOf = function (key, objSchema) {\n return field(key, key, strict(), objOf(objSchema));\n };\n var strictArrayOfObj = function (key, objFields) {\n return field(key, key, strict(), arrOfObj(objFields));\n };\n var strictArrayOf = function (key, schema) {\n return field(key, key, strict(), arrOf(schema));\n };\n var option = function (key) {\n return field(key, key, asOption(), anyValue());\n };\n var optionOf = function (key, schema) {\n return field(key, key, asOption(), schema);\n };\n var optionNumber = function (key) {\n return optionOf(key, number);\n };\n var optionString = function (key) {\n return optionOf(key, string);\n };\n var optionFunction = function (key) {\n return optionOf(key, functionProcessor);\n };\n var optionArrayOf = function (key, schema) {\n return optionOf(key, arrOf(schema));\n };\n var optionObjOf = function (key, objSchema) {\n return optionOf(key, objOf(objSchema));\n };\n var optionObjOfOnly = function (key, objSchema) {\n return optionOf(key, objOfOnly(objSchema));\n };\n var defaulted$1 = function (key, fallback) {\n return field(key, key, defaulted(fallback), anyValue());\n };\n var defaultedOf = function (key, fallback, schema) {\n return field(key, key, defaulted(fallback), schema);\n };\n var defaultedNumber = function (key, fallback) {\n return defaultedOf(key, fallback, number);\n };\n var defaultedString = function (key, fallback) {\n return defaultedOf(key, fallback, string);\n };\n var defaultedStringEnum = function (key, fallback, values) {\n return defaultedOf(key, fallback, validateEnum(values));\n };\n var defaultedBoolean = function (key, fallback) {\n return defaultedOf(key, fallback, boolean);\n };\n var defaultedFunction = function (key, fallback) {\n return defaultedOf(key, fallback, functionProcessor);\n };\n var defaultedPostMsg = function (key, fallback) {\n return defaultedOf(key, fallback, postMessageable);\n };\n var defaultedArrayOf = function (key, fallback, schema) {\n return defaultedOf(key, fallback, arrOf(schema));\n };\n var defaultedObjOf = function (key, fallback, objSchema) {\n return defaultedOf(key, fallback, objOf(objSchema));\n };\n var state$1 = function (okey, instantiator) {\n return state(okey, instantiator);\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$2 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$1(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu$1(0, 0);\n };\n var nu$1 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$1,\n detect: detect,\n unknown: unknown\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (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: function (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: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (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: 'OSX',\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 var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$3({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$3 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$3,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq$1 = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var 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 var closest = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor(scope, transform, stop);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq$1(component.element, simulatedEvent.event.target);\n };\n\n var nu$4 = function (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 asRawOrDie('Extracting event.handler', objOfOnly([\n defaulted$1('can', always),\n defaulted$1('abort', never),\n defaulted$1('run', noop)\n ]), parts);\n };\n var all$1 = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc && f(handler).apply(undefined, args);\n }, true);\n };\n };\n var any = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc || f(handler).apply(undefined, args);\n }, false);\n };\n };\n var read = function (handler) {\n return isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n };\n var fuse = function (handlers) {\n var can = all$1(handlers, function (handler) {\n return handler.can;\n });\n var abort = any(handlers, function (handler) {\n return handler.abort;\n });\n var run = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n each(handlers, function (handler) {\n handler.run.apply(undefined, args);\n });\n };\n return nu$4({\n can: can,\n abort: abort,\n run: run\n });\n };\n\n var constant$1 = constant;\n var touchstart = constant$1('touchstart');\n var touchmove = constant$1('touchmove');\n var touchend = constant$1('touchend');\n var touchcancel = constant$1('touchcancel');\n var mousedown = constant$1('mousedown');\n var mousemove = constant$1('mousemove');\n var mouseout = constant$1('mouseout');\n var mouseup = constant$1('mouseup');\n var mouseover = constant$1('mouseover');\n var focusin = constant$1('focusin');\n var focusout = constant$1('focusout');\n var keydown = constant$1('keydown');\n var keyup = constant$1('keyup');\n var input = constant$1('input');\n var change = constant$1('change');\n var click = constant$1('click');\n var transitionend = constant$1('transitionend');\n var selectstart = constant$1('selectstart');\n\n var prefixName = function (name) {\n return constant('alloy.' + name);\n };\n var alloy = { tap: prefixName('tap') };\n var focus = prefixName('focus');\n var postBlur = prefixName('blur.post');\n var postPaste = prefixName('paste.post');\n var receive = prefixName('receive');\n var execute = prefixName('execute');\n var focusItem = prefixName('focus.item');\n var tap = alloy.tap;\n var longpress = prefixName('longpress');\n var sandboxClose = prefixName('sandbox.close');\n var typeaheadCancel = prefixName('typeahead.cancel');\n var systemInit = prefixName('system.init');\n var documentTouchmove = prefixName('system.touchmove');\n var documentTouchend = prefixName('system.touchend');\n var windowScroll = prefixName('system.scroll');\n var windowResize = prefixName('system.resize');\n var attachedToDom = prefixName('system.attached');\n var detachedFromDom = prefixName('system.detached');\n var dismissRequested = prefixName('system.dismissRequested');\n var repositionRequested = prefixName('system.repositionRequested');\n var focusShifted = prefixName('focusmanager.shifted');\n var slotVisibility = prefixName('slotcontainer.visibility');\n var changeTab = prefixName('change.tab');\n var dismissTab = prefixName('dismiss.tab');\n var highlight = prefixName('highlight');\n var dehighlight = prefixName('dehighlight');\n\n var emit = function (component, event) {\n dispatchWith(component, component.element, event, {});\n };\n var emitWith = function (component, event, properties) {\n dispatchWith(component, component.element, event, properties);\n };\n var emitExecute = function (component) {\n emit(component, execute());\n };\n var dispatch = function (component, target, event) {\n dispatchWith(component, target, event, {});\n };\n var dispatchWith = function (component, target, event, properties) {\n var data = __assign({ target: target }, properties);\n component.getSystem().triggerEvent(event, target, data);\n };\n var dispatchEvent = function (component, target, event, simulatedEvent) {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n var derive = function (configs) {\n return wrapAll$1(configs);\n };\n var abort = function (name, predicate) {\n return {\n key: name,\n value: nu$4({ abort: predicate })\n };\n };\n var can = function (name, predicate) {\n return {\n key: name,\n value: nu$4({ can: predicate })\n };\n };\n var preventDefault = function (name) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n var run = function (name, handler) {\n return {\n key: name,\n value: nu$4({ run: handler })\n };\n };\n var runActionExtra = function (name, action, extra) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n var runOnName = function (name) {\n return function (handler) {\n return run(name, handler);\n };\n };\n var runOnSourceName = function (name) {\n return function (handler) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n };\n };\n };\n var redirectToUid = function (name, uid) {\n return run(name, function (component, simulatedEvent) {\n component.getSystem().getByUid(uid).each(function (redirectee) {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n var redirectToPart = function (name, detail, partName) {\n var uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n var runWithTarget = function (name, f) {\n return run(name, function (component, simulatedEvent) {\n var ev = simulatedEvent.event;\n var target = component.getSystem().getByDom(ev.target).fold(function () {\n var closest$1 = closest(ev.target, function (el) {\n return component.getSystem().getByDom(el).toOptional();\n }, never);\n return closest$1.getOr(component);\n }, function (c) {\n return c;\n });\n f(component, target, simulatedEvent);\n });\n };\n var cutter = function (name) {\n return run(name, function (component, simulatedEvent) {\n simulatedEvent.cut();\n });\n };\n var stopper = function (name) {\n return run(name, function (component, simulatedEvent) {\n simulatedEvent.stop();\n });\n };\n var runOnSource = function (name, f) {\n return runOnSourceName(name)(f);\n };\n var runOnAttached = runOnSourceName(attachedToDom());\n var runOnDetached = runOnSourceName(detachedFromDom());\n var runOnInit = runOnSourceName(systemInit());\n var runOnExecute = runOnName(execute());\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parentNode = function (element) {\n return parent(element);\n };\n var offsetParent = function (element) {\n return Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getContentContainer = function (dos) {\n return isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n };\n var isInShadowRoot = function (e) {\n return getShadowRoot(e).isSome();\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var appendAt = function (parent, element, index) {\n child(parent, index).fold(function () {\n append(parent, element);\n }, function (v) {\n before(v, element);\n });\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each(children(element), function (rogue) {\n remove(rogue);\n });\n };\n var remove = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove(wrapper);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n var get$2 = function (element) {\n return element.dom.innerHTML;\n };\n var set = function (element, content) {\n var owner$1 = owner(element);\n var docDom = owner$1.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append(element, fragment);\n };\n var getOuter = function (element) {\n var container = SugarElement.fromTag('div');\n var clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append(container, clone);\n return get$2(container);\n };\n\n var rawSet = function (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 var set$1 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom;\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$3 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$3(element, key));\n };\n var has$1 = function (element, key) {\n var dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove$1 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var clone = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow$1 = function (original) {\n return clone(original, false);\n };\n\n var getHtml = function (element) {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n var clone = shallow$1(element);\n return getOuter(clone);\n }\n };\n\n var element = function (elem) {\n return getHtml(elem);\n };\n\n var isRecursive = function (component, originator, target) {\n return eq$1(originator, component.element) && !eq$1(originator, target);\n };\n var events = derive([can(focus(), function (component, simulatedEvent) {\n var event = simulatedEvent.event;\n var originator = event.originator;\n var target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus() + ' 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\n });\n\n var unique = 0;\n var generate$1 = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var prefix = constant('alloy-id-');\n var idAttr = constant('data-alloy-id');\n\n var prefix$1 = prefix();\n var idAttr$1 = idAttr();\n var write = function (label, elem) {\n var id = generate$1(prefix$1 + label);\n writeOnly(elem, id);\n return id;\n };\n var writeOnly = function (elem, uid) {\n Object.defineProperty(elem.dom, idAttr$1, {\n value: uid,\n writable: true\n });\n };\n var read$1 = function (elem) {\n var id = isElement(elem) ? elem.dom[idAttr$1] : null;\n return Optional.from(id);\n };\n var generate$2 = function (prefix) {\n return generate$1(prefix);\n };\n\n var make = identity;\n\n var NoContextApi = function (getComp) {\n var fail = function (event) {\n return function () {\n throw new Error('The component must be in a context to send: ' + event + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : ''));\n };\n };\n return {\n debugInfo: constant('fake'),\n triggerEvent: fail('triggerEvent'),\n triggerFocus: fail('triggerFocus'),\n triggerEscape: fail('triggerEscape'),\n build: fail('build'),\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 broadcast: fail('broadcast'),\n broadcastOn: fail('broadcastOn'),\n broadcastEvent: fail('broadcastEvent'),\n isConnected: never\n };\n };\n var singleton = NoContextApi();\n\n var markAsBehaviourApi = function (f, apiName, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n };\n };\n return f;\n };\n var cleanParameters = function (parameters) {\n return map(parameters, function (p) {\n return endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p;\n });\n };\n var markAsExtraApi = function (f, extraName) {\n var delegate = f.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: extraName,\n parameters: cleanParameters(parameters)\n };\n };\n return f;\n };\n var markAsSketchApi = function (f, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n };\n };\n return f;\n };\n\n var premadeTag = generate$1('alloy-premade');\n var premade = function (comp) {\n return wrap$1(premadeTag, comp);\n };\n var getPremade = function (spec) {\n return get$1(spec, premadeTag);\n };\n var makeApi = function (f) {\n return markAsSketchApi(function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n return f.apply(void 0, __spreadArrays([\n component.getApis(),\n component\n ], rest));\n }, f);\n };\n\n var NoState = {\n init: function () {\n return nu$5({\n readState: function () {\n return 'No State required';\n }\n });\n }\n };\n var nu$5 = function (spec) {\n return spec;\n };\n\n var generateFrom = function (spec, all) {\n var schema = map(all, function (a) {\n return optionObjOf(a.name(), [\n strict$1('config'),\n defaulted$1('state', NoState)\n ]);\n });\n var validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(function (errInfo) {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, function (v) {\n return v;\n });\n return {\n list: all,\n data: map$2(validated, function (optBlobThunk) {\n var output = optBlobThunk.map(function (blob) {\n return {\n config: blob.config,\n state: blob.state.init(blob.config)\n };\n });\n return function () {\n return output;\n };\n })\n };\n };\n var getBehaviours = function (bData) {\n return bData.list;\n };\n var getData = function (bData) {\n return bData.data;\n };\n\n var byInnerKey = function (data, tuple) {\n var r = {};\n each$1(data, function (detail, key) {\n each$1(detail, function (value, indexKey) {\n var chain = get$1(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n var nu$6 = function (s) {\n return {\n classes: s.classes !== undefined ? s.classes : [],\n attributes: s.attributes !== undefined ? s.attributes : {},\n styles: s.styles !== undefined ? s.styles : {}\n };\n };\n var merge$1 = function (defnA, mod) {\n return __assign(__assign({}, defnA), {\n attributes: __assign(__assign({}, defnA.attributes), mod.attributes),\n styles: __assign(__assign({}, defnA.styles), mod.styles),\n classes: defnA.classes.concat(mod.classes)\n });\n };\n\n var combine = function (info, baseMod, behaviours, base) {\n var modsByBehaviour = __assign({}, baseMod);\n each(behaviours, function (behaviour) {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n var byAspect = byInnerKey(modsByBehaviour, function (name, modification) {\n return {\n name: name,\n modification: modification\n };\n });\n var combineObjects = function (objects) {\n return foldr(objects, function (b, a) {\n return __assign(__assign({}, a.modification), b);\n }, {});\n };\n var combinedClasses = foldr(byAspect.classes, function (b, a) {\n return a.modification.concat(b);\n }, []);\n var combinedAttributes = combineObjects(byAspect.attributes);\n var combinedStyles = combineObjects(byAspect.styles);\n return nu$6({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n var sortKeys = function (label, keyName, array, order) {\n try {\n var sorted = sort(array, function (a, b) {\n var aKey = a[keyName];\n var bKey = b[keyName];\n var aIndex = order.indexOf(aKey);\n var 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 var uncurried = function (handler, purpose) {\n return {\n handler: handler,\n purpose: purpose\n };\n };\n var curried = function (handler, purpose) {\n return {\n cHandler: handler,\n purpose: purpose\n };\n };\n var curryArgs = function (descHandler, extraArgs) {\n return curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n };\n var getCurried = function (descHandler) {\n return descHandler.cHandler;\n };\n\n var behaviourTuple = function (name, handler) {\n return {\n name: name,\n handler: handler\n };\n };\n var nameToHandlers = function (behaviours, info) {\n var r = {};\n each(behaviours, function (behaviour) {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n var groupByEvents = function (info, behaviours, base) {\n var behaviourEvents = __assign(__assign({}, base), nameToHandlers(behaviours, info));\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n var combine$1 = function (info, eventOrder, behaviours, base) {\n var byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n var assemble = function (rawHandler) {\n var handler = read(rawHandler);\n return function (component, simulatedEvent) {\n var rest = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n var 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 var missingOrderError = function (eventName, tuples) {\n return 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(tuples, function (c) {\n return c.name;\n }), null, 2)]);\n };\n var fuse$1 = function (tuples, eventOrder, eventName) {\n var order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(function (sortedTuples) {\n var handlers = map(sortedTuples, function (tuple) {\n return tuple.handler;\n });\n return fuse(handlers);\n });\n }\n };\n var combineGroups = function (byEventName, eventOrder) {\n var r = mapToArray(byEventName, function (tuples, eventName) {\n var combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse$1(tuples, eventOrder, eventName);\n return combined.map(function (handler) {\n var assembled = assemble(handler);\n var purpose = tuples.length > 1 ? filter(eventOrder[eventName], function (o) {\n return exists(tuples, function (t) {\n return t.name === o;\n });\n }).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n var baseBehaviour = 'alloy.base.behaviour';\n var toInfo = function (spec) {\n var _a;\n return asRaw('custom.definition', objOf([\n field('dom', 'dom', strict(), objOf([\n strict$1('tag'),\n defaulted$1('styles', {}),\n defaulted$1('classes', []),\n defaulted$1('attributes', {}),\n option('value'),\n option('innerHtml')\n ])),\n strict$1('components'),\n strict$1('uid'),\n defaulted$1('events', {}),\n defaulted$1('apis', {}),\n field('eventOrder', 'eventOrder', mergeWith((_a = {}, _a[execute()] = [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ], _a[focus()] = [\n baseBehaviour,\n 'focusing',\n 'keying'\n ], _a[systemInit()] = [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing'\n ], _a[input()] = [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ], _a[detachedFromDom()] = [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'tooltipping'\n ], _a[mousedown()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a[touchstart()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a[mouseover()] = [\n 'item-type-events',\n 'tooltipping'\n ], _a[receive()] = [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ], _a)), anyValue$1()),\n option('domModification')\n ]), spec);\n };\n var toDefinition = function (detail) {\n return __assign(__assign({}, detail.dom), {\n uid: detail.uid,\n domChildren: map(detail.components, function (comp) {\n return comp.element;\n })\n });\n };\n var toModification = function (detail) {\n return detail.domModification.fold(function () {\n return nu$6({});\n }, nu$6);\n };\n var toEvents = function (info) {\n return info.events;\n };\n\n var read$2 = function (element, attr) {\n var value = get$3(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read$2(element, attr);\n var nu = old.concat([id]);\n set$1(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read$2(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$1(element, attr, nu.join(' '));\n } else {\n remove$1(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$4 = function (element) {\n return read$2(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$4(element);\n if (classList.length === 0) {\n remove$1(element, 'class');\n }\n };\n var remove$4 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has$2 = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var add$3 = function (element, classes) {\n each(classes, function (x) {\n add$2(element, x);\n });\n };\n var remove$5 = function (element, classes) {\n each(classes, function (x) {\n remove$4(element, x);\n });\n };\n\n var isSupported$1 = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = function () {\n return getBody(SugarElement.fromDom(document));\n };\n var getBody = function (doc) {\n var 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 var internalSet = function (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 var internalRemove = function (dom, property) {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$2 = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom;\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var setOptions = function (element, css) {\n var dom = element.dom;\n each$1(css, function (v, k) {\n v.fold(function () {\n internalRemove(dom, k);\n }, function (value) {\n internalSet(dom, k, value);\n });\n });\n };\n var get$5 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported$1(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n var isValidValue = function (tag, property, value) {\n var element = SugarElement.fromTag(tag);\n set$2(element, property, value);\n var style = getRaw(element, property);\n return style.isSome();\n };\n var remove$6 = function (element, property) {\n var dom = element.dom;\n internalRemove(dom, property);\n if (getOpt(element, 'style').map(trim).is('')) {\n remove$1(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom.offsetWidth;\n };\n\n var get$6 = function (element) {\n return element.dom.value;\n };\n var set$3 = function (element, value) {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n var renderToDom = function (definition) {\n var subject = SugarElement.fromTag(definition.tag);\n setAll(subject, definition.attributes);\n add$3(subject, definition.classes);\n setAll$1(subject, definition.styles);\n definition.innerHtml.each(function (html) {\n return set(subject, html);\n });\n var children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(function (value) {\n set$3(subject, value);\n });\n if (!definition.uid) {\n debugger;\n }\n writeOnly(subject, definition.uid);\n return subject;\n };\n\n var getBehaviours$1 = function (spec) {\n var behaviours = get$1(spec, 'behaviours').getOr({});\n var keys$1 = filter(keys(behaviours), function (k) {\n return behaviours[k] !== undefined;\n });\n return map(keys$1, function (k) {\n return behaviours[k].me;\n });\n };\n var generateFrom$1 = function (spec, all) {\n return generateFrom(spec, all);\n };\n var generate$3 = function (spec) {\n var all = getBehaviours$1(spec);\n return generateFrom$1(spec, all);\n };\n\n var getDomDefinition = function (info, bList, bData) {\n var definition = toDefinition(info);\n var infoModification = toModification(info);\n var baseModification = { 'alloy.base.modification': infoModification };\n var modification = bList.length > 0 ? combine(bData, baseModification, bList, definition) : infoModification;\n return merge$1(definition, modification);\n };\n var getEvents = function (info, bList, bData) {\n var baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n var build = function (spec) {\n var getMe = function () {\n return me;\n };\n var systemApi = Cell(singleton);\n var info = getOrDie(toInfo(spec));\n var bBlob = generate$3(spec);\n var bList = getBehaviours(bBlob);\n var bData = getData(bBlob);\n var modDefinition = getDomDefinition(info, bList, bData);\n var item = renderToDom(modDefinition);\n var events = getEvents(info, bList, bData);\n var subcomponents = Cell(info.components);\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(getMe));\n };\n var syncComponents = function () {\n var children$1 = children(item);\n var subs = bind(children$1, function (child) {\n return systemApi.get().getByDom(child).fold(function () {\n return [];\n }, function (c) {\n return [c];\n });\n });\n subcomponents.set(subs);\n };\n var config = function (behaviour) {\n var b = bData;\n var f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : function () {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n var hasConfigured = function (behaviour) {\n return isFunction(bData[behaviour.name()]);\n };\n var getApis = function () {\n return info.apis;\n };\n var readState = function (behaviourName) {\n return bData[behaviourName]().map(function (b) {\n return b.state.readState();\n }).getOr('not enabled');\n };\n var me = {\n getSystem: systemApi.get,\n config: config,\n hasConfigured: hasConfigured,\n spec: spec,\n readState: readState,\n getApis: getApis,\n connect: connect,\n disconnect: disconnect,\n element: item,\n syncComponents: syncComponents,\n components: subcomponents.get,\n events: events\n };\n return me;\n };\n\n var buildSubcomponents = function (spec) {\n var components = get$1(spec, 'components').getOr([]);\n return map(components, build$1);\n };\n var buildFromSpec = function (userSpec) {\n var _a = make(userSpec), specEvents = _a.events, spec = __rest(_a, ['events']);\n var components = buildSubcomponents(spec);\n var completeSpec = __assign(__assign({}, spec), {\n events: __assign(__assign({}, DefaultEvents), specEvents),\n components: components\n });\n return Result.value(build(completeSpec));\n };\n var text = function (textContent) {\n var element = SugarElement.fromText(textContent);\n return external({ element: element });\n };\n var external = function (spec) {\n var extSpec = asRawOrDie('external.component', objOfOnly([\n strict$1('element'),\n option('uid')\n ]), spec);\n var systemApi = Cell(NoContextApi());\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(function () {\n return me;\n }));\n };\n extSpec.uid.each(function (uid) {\n writeOnly(extSpec.element, uid);\n });\n var me = {\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect: connect,\n disconnect: disconnect,\n getApis: function () {\n return {};\n },\n element: extSpec.element,\n spec: spec,\n readState: constant('No state'),\n syncComponents: noop,\n components: constant([]),\n events: {}\n };\n return premade(me);\n };\n var uids = generate$2;\n var build$1 = function (spec) {\n return getPremade(spec).fold(function () {\n var userSpecWithUid = spec.hasOwnProperty('uid') ? spec : __assign({ uid: uids('') }, spec);\n return buildFromSpec(userSpecWithUid).getOrDie();\n }, function (prebuilt) {\n return prebuilt;\n });\n };\n var premade$1 = premade;\n\n var Dimension = function (name, getOffset) {\n var set = function (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 var dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$5(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$5(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$7 = function (element) {\n return api.get(element);\n };\n var getOuter$1 = function (element) {\n return api.getOuter(element);\n };\n var setMax = function (element, value) {\n var inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n var absMax = api.max(element, value, inclusions);\n set$2(element, 'max-height', absMax + 'px');\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var 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 var api$1 = Dimension('width', function (element) {\n return element.dom.offsetWidth;\n });\n var set$4 = function (element, h) {\n return api$1.set(element, h);\n };\n var get$8 = function (element) {\n return api$1.get(element);\n };\n var getOuter$2 = function (element) {\n return api$1.getOuter(element);\n };\n var setMax$1 = function (element, value) {\n var inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n var absMax = api$1.max(element, value, inclusions);\n set$2(element, 'max-width', absMax + 'px');\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$2 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var capture = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, true);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n var get$9 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n var get$a = function (_win) {\n var win = _win === undefined ? window : _win;\n return Optional.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$9(SugarElement.fromDom(doc));\n return get$a(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n });\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n var paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n var view = function (doc) {\n var _a;\n var 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 var owner$1 = function (element) {\n return owner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$1\n });\n\n var find$3 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$9(doc);\n var path = pathTo(element, Navigation);\n return path.fold(curry(absolute, element), function (frames) {\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var 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\n var pointed = function (point, width, height) {\n return {\n point: point,\n width: width,\n height: height\n };\n };\n var rect = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n };\n var bounds$1 = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var box = function (element) {\n var xy = absolute(element);\n var w = getOuter$2(element);\n var h = getOuter$1(element);\n return bounds$1(xy.left, xy.top, w, h);\n };\n var absolute$1 = function (element) {\n var position = find$3(element);\n var width = getOuter$2(element);\n var height = getOuter$1(element);\n return bounds$1(position.left, position.top, width, height);\n };\n var win = function () {\n return getBounds(window);\n };\n\n function 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 var ancestor$1 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var 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 var closest$1 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Optional.some(child_1);\n }\n var 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 var closest$2 = function (scope, predicate, isRoot) {\n return closest$1(scope, predicate, isRoot).isSome();\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$3 = function (scope, selector, isRoot) {\n var is$1 = function (element, selector) {\n return is(element, selector);\n };\n return ClosestOrAncestor(is$1, ancestor$2, scope, selector, isRoot);\n };\n\n var find$4 = function (queryElem) {\n var dependent = closest$1(queryElem, function (elem) {\n if (!isElement(elem)) {\n return false;\n }\n var id = get$3(elem, 'id');\n return id !== undefined && id.indexOf('aria-owns') > -1;\n });\n return dependent.bind(function (dep) {\n var id = get$3(dep, 'id');\n var dos = getRootNode(dep);\n return descendant$1(dos, '[aria-owns=\"' + id + '\"]');\n });\n };\n var manager = function () {\n var ariaId = generate$1('aria-owns');\n var link = function (elem) {\n set$1(elem, 'aria-owns', ariaId);\n };\n var unlink = function (elem) {\n remove$1(elem, 'aria-owns');\n };\n return {\n id: ariaId,\n link: link,\n unlink: unlink\n };\n };\n\n var isAriaPartOf = function (component, queryElem) {\n return find$4(queryElem).exists(function (owner) {\n return isPartOf(component, owner);\n });\n };\n var isPartOf = function (component, queryElem) {\n return closest$2(queryElem, function (el) {\n return eq$1(el, component.element);\n }, never) || isAriaPartOf(component, queryElem);\n };\n\n var unknown$3 = '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 var eventConfig = Cell({});\n var makeEventLogger = function (eventName, initialTarget) {\n var sequence = [];\n var startTime = new Date().getTime();\n return {\n logEventCut: function (_name, target, purpose) {\n sequence.push({\n outcome: 'cut',\n target: target,\n purpose: purpose\n });\n },\n logEventStopped: function (_name, target, purpose) {\n sequence.push({\n outcome: 'stopped',\n target: target,\n purpose: purpose\n });\n },\n logNoParent: function (_name, target, purpose) {\n sequence.push({\n outcome: 'no-parent',\n target: target,\n purpose: purpose\n });\n },\n logEventNoHandlers: function (_name, target) {\n sequence.push({\n outcome: 'no-handlers-left',\n target: target\n });\n },\n logEventResponse: function (_name, target, purpose) {\n sequence.push({\n outcome: 'response',\n purpose: purpose,\n target: target\n });\n },\n write: function () {\n var finishTime = new Date().getTime();\n if (contains([\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(sequence, function (s) {\n if (!contains([\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 var processEvent = function (eventName, initialTarget, f) {\n var status = get$1(eventConfig.get(), eventName).orThunk(function () {\n var patterns = keys(eventConfig.get());\n return findMap(patterns, function (p) {\n return eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none();\n });\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n var logger = makeEventLogger(eventName, initialTarget);\n var output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n var path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n var getTrace = function () {\n var err = new Error();\n if (err.stack !== undefined) {\n var lines = err.stack.split('\\n');\n return find(lines, function (line) {\n return line.indexOf('alloy') > 0 && !exists(path, function (p) {\n return line.indexOf(p) > -1;\n });\n }).getOr(unknown$3);\n } else {\n return unknown$3;\n }\n };\n var ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n var monitorEvent = function (eventName, initialTarget, f) {\n return processEvent(eventName, initialTarget, f);\n };\n var noLogger = constant(ignoreEvent);\n\n var menuFields = constant([\n strict$1('menu'),\n strict$1('selectedMenu')\n ]);\n var itemFields = constant([\n strict$1('item'),\n strict$1('selectedItem')\n ]);\n var schema = constant(objOf(itemFields().concat(menuFields())));\n var itemSchema = constant(objOf(itemFields()));\n\n var _initSize = strictObjOf('initSize', [\n strict$1('numColumns'),\n strict$1('numRows')\n ]);\n var itemMarkers = function () {\n return strictOf('markers', itemSchema());\n };\n var tieredMenuMarkers = function () {\n return strictObjOf('markers', [strict$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n };\n var markers = function (required) {\n return strictObjOf('markers', map(required, strict$1));\n };\n var onPresenceHandler = function (label, fieldName, presence) {\n var trace = getTrace();\n return field(fieldName, fieldName, presence, valueOf(function (f) {\n return Result.value(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return f.apply(undefined, args);\n });\n }));\n };\n var onHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, defaulted(noop));\n };\n var onKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, defaulted(Optional.none));\n };\n var onStrictHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, strict());\n };\n var onStrictKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, strict());\n };\n var output = function (name, value) {\n return state$1(name, constant(value));\n };\n var snapshot = function (name) {\n return state$1(name, identity);\n };\n var initSize = constant(_initSize);\n\n var nu$7 = function (x, y, bubble, direction, boundsRestriction, label) {\n return {\n x: x,\n y: y,\n bubble: bubble,\n direction: direction,\n boundsRestriction: boundsRestriction,\n label: label\n };\n };\n\n var adt$2 = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n var cata = function (subject, southeast, southwest, northeast, northwest, south, north, east, west) {\n return subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n };\n var cataVertical = function (subject, south, middle, north) {\n return subject.fold(south, south, north, north, south, north, middle, middle);\n };\n var cataHorizontal = function (subject, east, middle, west) {\n return subject.fold(east, west, east, west, middle, middle, east, west);\n };\n var southeast = adt$2.southeast;\n var southwest = adt$2.southwest;\n var northeast = adt$2.northeast;\n var northwest = adt$2.northwest;\n var south = adt$2.south;\n var north = adt$2.north;\n var east = adt$2.east;\n var west = adt$2.west;\n\n var getRestriction = function (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 var boundsRestriction = function (anchor, restrictions) {\n return mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (dir) {\n return get$1(restrictions, dir).map(function (restriction) {\n return getRestriction(anchor, restriction);\n });\n });\n };\n var adjustBounds = function (bounds, boundsRestrictions, bubbleOffsets) {\n var applyRestriction = function (dir, current) {\n var bubbleOffset = dir === 'top' || dir === 'bottom' ? bubbleOffsets.top : bubbleOffsets.left;\n return get$1(boundsRestrictions, dir).bind(identity).bind(function (restriction) {\n if (dir === 'left' || dir === 'top') {\n return restriction >= current ? Optional.some(restriction) : Optional.none();\n } else {\n return restriction <= current ? Optional.some(restriction) : Optional.none();\n }\n }).map(function (restriction) {\n return restriction + bubbleOffset;\n }).getOr(current);\n };\n var adjustedLeft = applyRestriction('left', bounds.x);\n var adjustedTop = applyRestriction('top', bounds.y);\n var adjustedRight = applyRestriction('right', bounds.right);\n var adjustedBottom = applyRestriction('bottom', bounds.bottom);\n return bounds$1(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n var eastX = function (anchor) {\n return anchor.x;\n };\n var middleX = function (anchor, element) {\n return anchor.x + anchor.width / 2 - element.width / 2;\n };\n var westX = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY = function (anchor, element) {\n return anchor.y - element.height;\n };\n var southY = function (anchor) {\n return anchor.y + anchor.height;\n };\n var centreY = function (anchor, element) {\n return anchor.y + anchor.height / 2 - element.height / 2;\n };\n var eastEdgeX = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westEdgeX = function (anchor, element) {\n return anchor.x - element.width;\n };\n var southeast$1 = function (anchor, element, bubbles) {\n return nu$7(eastX(anchor), southY(anchor), bubbles.southeast(), southeast(), boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), 'layout-se');\n };\n var southwest$1 = function (anchor, element, bubbles) {\n return nu$7(westX(anchor, element), southY(anchor), bubbles.southwest(), southwest(), boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), 'layout-sw');\n };\n var northeast$1 = function (anchor, element, bubbles) {\n return nu$7(eastX(anchor), northY(anchor, element), bubbles.northeast(), northeast(), boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), 'layout-ne');\n };\n var northwest$1 = function (anchor, element, bubbles) {\n return nu$7(westX(anchor, element), northY(anchor, element), bubbles.northwest(), northwest(), boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), 'layout-nw');\n };\n var north$1 = function (anchor, element, bubbles) {\n return nu$7(middleX(anchor, element), northY(anchor, element), bubbles.north(), north(), boundsRestriction(anchor, { bottom: 2 }), 'layout-n');\n };\n var south$1 = function (anchor, element, bubbles) {\n return nu$7(middleX(anchor, element), southY(anchor), bubbles.south(), south(), boundsRestriction(anchor, { top: 3 }), 'layout-s');\n };\n var east$1 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX(anchor), centreY(anchor, element), bubbles.east(), east(), boundsRestriction(anchor, { left: 0 }), 'layout-e');\n };\n var west$1 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX(anchor, element), centreY(anchor, element), bubbles.west(), west(), boundsRestriction(anchor, { right: 1 }), 'layout-w');\n };\n var all$2 = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n south$1,\n north$1,\n east$1,\n west$1\n ];\n };\n var allRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n south$1,\n north$1,\n east$1,\n west$1\n ];\n };\n var aboveOrBelow = function () {\n return [\n northeast$1,\n northwest$1,\n southeast$1,\n southwest$1,\n north$1,\n south$1\n ];\n };\n var aboveOrBelowRtl = function () {\n return [\n northwest$1,\n northeast$1,\n southwest$1,\n southeast$1,\n north$1,\n south$1\n ];\n };\n var belowOrAbove = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n south$1,\n north$1\n ];\n };\n var belowOrAboveRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n south$1,\n north$1\n ];\n };\n\n var chooseChannels = function (channels, message) {\n return message.universal ? channels : filter(channels, function (ch) {\n return contains(message.channels, ch);\n });\n };\n var events$1 = function (receiveConfig) {\n return derive([run(receive(), function (component, message) {\n var channelMap = receiveConfig.channels;\n var channels = keys(channelMap);\n var receivingData = message;\n var targetChannels = chooseChannels(channels, receivingData);\n each(targetChannels, function (ch) {\n var channelInfo = channelMap[ch];\n var channelSchema = channelInfo.schema;\n var data = asRawOrDie('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n };\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$1\n });\n\n var ReceivingSchema = [strictOf('channels', setOf$1(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted$1('schema', anyValue$1())\n ])))];\n\n var executeEvent = function (bConfig, bState, executor) {\n return runOnExecute(function (component) {\n executor(component, bConfig, bState);\n });\n };\n var loadEvent = function (bConfig, bState, f) {\n return runOnInit(function (component, _simulatedEvent) {\n f(component, bConfig, bState);\n });\n };\n var create = function (schema, name, active, apis, extra, state) {\n var configSchema = objOfOnly(schema);\n var schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var createModes = function (modes, name, active, apis, extra, state) {\n var configSchema = modes;\n var schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var wrapApi = function (bName, apiFunction, apiName) {\n var f = function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var args = [component].concat(rest);\n return component.config({ name: constant(bName) }).fold(function () {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, function (info) {\n var 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 var revokeBehaviour = function (name) {\n return {\n key: name,\n value: undefined\n };\n };\n var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) {\n var getConfig = function (info) {\n return hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n };\n var wrappedApis = map$2(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map$2(extra, function (extraF, extraName) {\n return markAsExtraApi(extraF, extraName);\n });\n var me = __assign(__assign(__assign({}, wrappedExtra), wrappedApis), {\n revoke: curry(revokeBehaviour, name),\n config: function (spec) {\n var prepared = asRawOrDie(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me: me,\n configAsRaw: cached(function () {\n return asRawOrDie(name + '-config', configSchema, spec);\n }),\n initialConfig: spec,\n state: state\n }\n };\n },\n schema: constant(schemaSchema),\n exhibit: function (info, base) {\n return getConfig(info).bind(function (behaviourInfo) {\n return get$1(active, 'exhibit').map(function (exhibitor) {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n });\n }).getOr(nu$6({}));\n },\n name: constant(name),\n handlers: function (info) {\n return getConfig(info).map(function (behaviourInfo) {\n var getEvents = get$1(active, 'events').getOr(function () {\n return {};\n });\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n });\n return me;\n };\n\n var derive$1 = function (capabilities) {\n return wrapAll$1(capabilities);\n };\n var simpleSchema = objOfOnly([\n strict$1('fields'),\n strict$1('name'),\n defaulted$1('active', {}),\n defaulted$1('apis', {}),\n defaulted$1('state', NoState),\n defaulted$1('extra', {})\n ]);\n var create$1 = function (data) {\n var value = asRawOrDie('Creating behaviour: ' + data.name, simpleSchema, data);\n return create(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n var modeSchema = objOfOnly([\n strict$1('branchKey'),\n strict$1('branches'),\n strict$1('name'),\n defaulted$1('active', {}),\n defaulted$1('apis', {}),\n defaulted$1('state', NoState),\n defaulted$1('extra', {})\n ]);\n var createModes$1 = function (data) {\n var value = asRawOrDie('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n var revoke = constant(undefined);\n\n var Receiving = create$1({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n var exhibit = function (base, posConfig) {\n return nu$6({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n };\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit\n });\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus$1 = function (element) {\n return element.dom.focus();\n };\n var blur = function (element) {\n return element.dom.blur();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var preserve = function (f, container) {\n var dos = getRootNode(container);\n var refocus = active(dos).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq$1(focused, elem);\n };\n return hasFocus(container) ? Optional.some(container) : descendant(container, hasFocus);\n });\n var result = f(container);\n refocus.each(function (oldFocus) {\n active(dos).filter(function (newFocus) {\n return eq$1(newFocus, oldFocus);\n }).fold(function () {\n focus$1(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = function (position, left, top, right, bottom) {\n return {\n position: position,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n };\n var applyPositionCss = function (element, position) {\n var addPx = function (num) {\n return num + 'px';\n };\n setOptions(element, {\n position: Optional.some(position.position),\n left: position.left.map(addPx),\n top: position.top.map(addPx),\n right: position.right.map(addPx),\n bottom: position.bottom.map(addPx)\n });\n };\n\n var adt$3 = 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 var positionWithDirection = function (posName, decision, x, y, width, height) {\n var decisionX = decision.x - x;\n var decisionY = decision.y - y;\n var decisionWidth = decision.width;\n var decisionHeight = decision.height;\n var decisionRight = width - (decisionX + decisionWidth);\n var decisionBottom = height - (decisionY + decisionHeight);\n var left = Optional.some(decisionX);\n var top = Optional.some(decisionY);\n var right = Optional.some(decisionRight);\n var bottom = Optional.some(decisionBottom);\n var none = Optional.none();\n return cata(decision.direction, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, none, none, right, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n });\n };\n var reposition = function (origin, decision) {\n return origin.fold(function () {\n return NuPositionCss('absolute', Optional.some(decision.x), Optional.some(decision.y), Optional.none(), Optional.none());\n }, function (x, y, width, height) {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, function (x, y, width, height) {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n };\n var toBox = function (origin, element) {\n var rel = curry(find$3, element);\n var position = origin.fold(rel, rel, function () {\n var scroll = get$9();\n return find$3(element).translate(-scroll.left, -scroll.top);\n });\n var width = getOuter$2(element);\n var height = getOuter$1(element);\n return bounds$1(position.left, position.top, width, height);\n };\n var viewport$1 = function (origin, getBounds) {\n return getBounds.fold(function () {\n return origin.fold(win, win, bounds$1);\n }, function (b) {\n return origin.fold(b, b, function () {\n var bounds = b();\n var pos = translate(origin, bounds.x, bounds.y);\n return bounds$1(pos.left, pos.top, bounds.width, bounds.height);\n });\n });\n };\n var translate = function (origin, x, y) {\n var pos = SugarPosition(x, y);\n var removeScroll = function () {\n var outerScroll = get$9();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant(pos), constant(pos), removeScroll);\n };\n var cata$1 = function (subject, onNone, onRelative, onFixed) {\n return subject.fold(onNone, onRelative, onFixed);\n };\n var none$1 = adt$3.none;\n var relative = adt$3.relative;\n var fixed = adt$3.fixed;\n\n var anchor = function (anchorBox, origin) {\n return {\n anchorBox: anchorBox,\n origin: origin\n };\n };\n var box$1 = function (anchorBox, origin) {\n return anchor(anchorBox, origin);\n };\n\n var cycleBy = function (value, delta, min, max) {\n var 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 var clamp = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\n\n var adt$4 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'deltaW',\n 'deltaH'\n ]\n }\n ]);\n var calcReposition = function (newX, newY, width, height, bounds) {\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var boundsWidth = bounds.width;\n var boundsHeight = bounds.height;\n var xInBounds = newX >= boundsX;\n var yInBounds = newY >= boundsY;\n var originInBounds = xInBounds && yInBounds;\n var xFit = newX + width <= boundsX + boundsWidth;\n var yFit = newY + height <= boundsY + boundsHeight;\n var sizeInBounds = xFit && yFit;\n var deltaW = Math.abs(Math.min(width, xInBounds ? boundsX + boundsWidth - newX : boundsX - (newX + width)));\n var deltaH = Math.abs(Math.min(height, yInBounds ? boundsY + boundsHeight - newY : boundsY - (newY + height)));\n var maxX = Math.max(bounds.x, bounds.right - width);\n var maxY = Math.max(bounds.y, bounds.bottom - height);\n var limitX = clamp(newX, bounds.x, maxX);\n var limitY = clamp(newY, bounds.y, maxY);\n return {\n originInBounds: originInBounds,\n sizeInBounds: sizeInBounds,\n limitX: limitX,\n limitY: limitY,\n deltaW: deltaW,\n deltaH: deltaH\n };\n };\n var attempt = function (candidate, width, height, bounds) {\n var candidateX = candidate.x;\n var candidateY = candidate.y;\n var bubbleOffsets = candidate.bubble.offset;\n var bubbleLeft = bubbleOffsets.left;\n var bubbleTop = bubbleOffsets.top;\n var adjustedBounds = adjustBounds(bounds, candidate.boundsRestriction, bubbleOffsets);\n var boundsY = adjustedBounds.y;\n var boundsBottom = adjustedBounds.bottom;\n var boundsX = adjustedBounds.x;\n var boundsRight = adjustedBounds.right;\n var newX = candidateX + bubbleLeft;\n var newY = candidateY + bubbleTop;\n var _a = calcReposition(newX, newY, width, height, adjustedBounds), originInBounds = _a.originInBounds, sizeInBounds = _a.sizeInBounds, limitX = _a.limitX, limitY = _a.limitY, deltaW = _a.deltaW, deltaH = _a.deltaH;\n var upAvailable = constant(limitY + deltaH - boundsY);\n var downAvailable = constant(boundsBottom - limitY);\n var maxHeight = cataVertical(candidate.direction, downAvailable, downAvailable, upAvailable);\n var westAvailable = constant(limitX + deltaW - boundsX);\n var eastAvailable = constant(boundsRight - limitX);\n var maxWidth = cataHorizontal(candidate.direction, eastAvailable, eastAvailable, westAvailable);\n var reposition = {\n x: limitX,\n y: limitY,\n width: deltaW,\n height: deltaH,\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n direction: candidate.direction,\n classes: {\n on: candidate.bubble.classesOn,\n off: candidate.bubble.classesOff\n },\n label: candidate.label,\n candidateYforTest: newY\n };\n return originInBounds && sizeInBounds ? adt$4.fit(reposition) : adt$4.nofit(reposition, deltaW, deltaH);\n };\n var attempts = function (candidates, anchorBox, elementBox, bubbles, bounds) {\n var panelWidth = elementBox.width;\n var panelHeight = elementBox.height;\n var attemptBestFit = function (layout, reposition, deltaW, deltaH) {\n var next = layout(anchorBox, elementBox, bubbles);\n var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(adt$4.fit, function (newReposition, newDeltaW, newDeltaH) {\n var improved = newDeltaH > deltaH || newDeltaW > deltaW;\n return improved ? adt$4.nofit(newReposition, newDeltaW, newDeltaH) : adt$4.nofit(reposition, deltaW, deltaH);\n });\n };\n var abc = foldl(candidates, function (b, a) {\n var bestNext = curry(attemptBestFit, a);\n return b.fold(adt$4.fit, bestNext);\n }, adt$4.nofit({\n x: anchorBox.x,\n y: anchorBox.y,\n width: elementBox.width,\n height: elementBox.height,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast(),\n classes: {\n on: [],\n off: []\n },\n label: 'none',\n candidateYforTest: anchorBox.y\n }, -1, -1));\n return abc.fold(identity, identity);\n };\n\n var elementSize = function (p) {\n return {\n width: getOuter$2(p),\n height: getOuter$1(p)\n };\n };\n var layout = function (anchorBox, element, bubbles, options) {\n remove$6(element, 'max-height');\n remove$6(element, 'max-width');\n var elementBox = elementSize(element);\n return attempts(options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n var setClasses = function (element, decision) {\n var classInfo = decision.classes;\n remove$5(element, classInfo.off);\n add$3(element, classInfo.on);\n };\n var setHeight = function (element, decision, options) {\n var maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n var setWidth = function (element, decision, options) {\n var maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n var position = function (element, decision, options) {\n applyPositionCss(element, reposition(options.origin, decision));\n };\n\n var setMaxHeight = function (element, maxHeight) {\n setMax(element, Math.floor(maxHeight));\n };\n var anchored = constant(function (element, available) {\n setMaxHeight(element, available);\n setAll$1(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n var expandable = constant(function (element, available) {\n setMaxHeight(element, available);\n });\n\n var defaultOr = function (options, key, dephault) {\n return options[key] === undefined ? dephault : options[key];\n };\n var simple = function (anchor, element, bubble, layouts, getBounds, overrideOptions) {\n var maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n var maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n var anchorBox = anchor.anchorBox;\n var origin = anchor.origin;\n var options = {\n bounds: viewport$1(origin, getBounds),\n origin: origin,\n preference: layouts,\n maxHeightFunction: maxHeightFunction,\n maxWidthFunction: maxWidthFunction\n };\n go(anchorBox, element, bubble, options);\n };\n var go = function (anchorBox, element, bubble, options) {\n var decision = layout(anchorBox, element, bubble, options);\n position(element, decision, options);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n };\n\n var allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right'\n ];\n var nu$8 = function (width, yoffset, classes) {\n var getClasses = function (prop) {\n return get$1(classes, prop).getOr([]);\n };\n var make = function (xDelta, yDelta, alignmentsOn) {\n var alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind(alignmentsOn, getClasses),\n classesOff: bind(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: function () {\n return make(-width, yoffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n southwest: function () {\n return make(width, yoffset, [\n 'top',\n 'alignRight'\n ]);\n },\n south: function () {\n return make(-width / 2, yoffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n northeast: function () {\n return make(-width, -yoffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n northwest: function () {\n return make(width, -yoffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n north: function () {\n return make(-width / 2, -yoffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n east: function () {\n return make(width, -yoffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n },\n west: function () {\n return make(-width, -yoffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n innerNorthwest: function () {\n return make(-width, yoffset, [\n 'top',\n 'alignRight'\n ]);\n },\n innerNortheast: function () {\n return make(width, yoffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n innerNorth: function () {\n return make(-width / 2, yoffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n innerSouthwest: function () {\n return make(-width, -yoffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n innerSoutheast: function () {\n return make(width, -yoffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n innerSouth: function () {\n return make(-width / 2, -yoffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n innerWest: function () {\n return make(width, -yoffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n innerEast: function () {\n return make(-width, -yoffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n }\n };\n };\n var fallback = function () {\n return nu$8(0, 0, {});\n };\n\n var nu$9 = function (x) {\n return x;\n };\n\n var onDirection = function (isLtr, isRtl) {\n return function (element) {\n return getDirection(element) === 'rtl' ? isRtl : isLtr;\n };\n };\n var getDirection = function (element) {\n return get$5(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n var Attribute = 'data-alloy-vertical-dir';\n var isBottomToTopDir = function (el) {\n return closest$2(el, function (current) {\n return isElement(current) && get$3(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop;\n });\n };\n\n var schema$1 = function () {\n return optionObjOf('layouts', [\n strict$1('onLtr'),\n strict$1('onRtl'),\n option('onBottomLtr'),\n option('onBottomRtl')\n ]);\n };\n var get$b = function (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) {\n var isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n var customLtr = info.layouts.map(function (ls) {\n return ls.onLtr(elem);\n });\n var customRtl = info.layouts.map(function (ls) {\n return ls.onRtl(elem);\n });\n var ltr = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomLtr.map(function (f) {\n return f(elem);\n });\n }).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n var rtl = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomRtl.map(function (f) {\n return f(elem);\n });\n }).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n var f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n var placement = function (component, anchorInfo, origin) {\n var hotspot = anchorInfo.hotspot;\n var anchorBox = toBox(origin, hotspot.element);\n var layouts = get$b(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var HotspotAnchor = [\n strict$1('hotspot'),\n option('bubble'),\n defaulted$1('overrides', {}),\n schema$1(),\n output('placement', placement)\n ];\n\n var placement$1 = function (component, anchorInfo, origin) {\n var pos = translate(origin, anchorInfo.x, anchorInfo.y);\n var anchorBox = bounds$1(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n var layouts = get$b(component.element, anchorInfo, all$2(), allRtl(), all$2(), allRtl(), Optional.none());\n return Optional.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var MakeshiftAnchor = [\n strict$1('x'),\n strict$1('y'),\n defaulted$1('height', 0),\n defaulted$1('width', 0),\n defaulted$1('bubble', fallback()),\n defaulted$1('overrides', {}),\n schema$1(),\n output('placement', placement$1)\n ];\n\n var adt$5 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n var toFixed = function (pos) {\n return pos.fold(identity, function (point, scrollLeft, scrollTop) {\n return point.translate(-scrollLeft, -scrollTop);\n });\n };\n var toAbsolute = function (pos) {\n return pos.fold(identity, identity);\n };\n var sum = function (points) {\n return foldl(points, function (b, a) {\n return b.translate(a.left, a.top);\n }, SugarPosition(0, 0));\n };\n var sumAsFixed = function (positions) {\n var points = map(positions, toFixed);\n return sum(points);\n };\n var sumAsAbsolute = function (positions) {\n var points = map(positions, toAbsolute);\n return sum(points);\n };\n var screen = adt$5.screen;\n var absolute$2 = adt$5.absolute;\n\n var getOffset = function (component, origin, anchorInfo) {\n var win = defaultView(anchorInfo.root).dom;\n var hasSameOwner = function (frame) {\n var frameOwner = owner(frame);\n var compOwner = owner(component.element);\n return eq$1(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute);\n };\n var getRootPoint = function (component, origin, anchorInfo) {\n var doc = owner(component.element);\n var outerScroll = get$9(doc);\n var offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$2(offset, outerScroll.left, outerScroll.top);\n };\n\n var capRect = function (left, top, width, height) {\n var newLeft = left, newTop = top, newWidth = width, newHeight = height;\n if (left < 0) {\n newLeft = 0;\n newWidth = width + left;\n }\n if (top < 0) {\n newTop = 0;\n newHeight = height + top;\n }\n var point = screen(SugarPosition(newLeft, newTop));\n return Optional.some(pointed(point, newWidth, newHeight));\n };\n var calcNewAnchor = function (optBox, rootPoint, anchorInfo, origin, elem) {\n return optBox.map(function (box) {\n var points = [\n rootPoint,\n box.point\n ];\n var topLeft = cata$1(origin, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsFixed(points);\n });\n var anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n var layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n var layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n var layouts = get$b(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n });\n });\n };\n\n var placement$2 = function (component, anchorInfo, origin) {\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(function (target) {\n var rect = target.dom.getBoundingClientRect();\n var nodeBox = capRect(rect.left, rect.top, rect.width, rect.height);\n var elem = anchorInfo.node.getOr(component.element);\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n strict$1('node'),\n strict$1('root'),\n option('bubble'),\n schema$1(),\n defaulted$1('overrides', {}),\n defaulted$1('showAbove', false),\n output('placement', placement$2)\n ];\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var create$2 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$2 };\n\n var adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$2 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$6.before;\n var on = adt$6.on;\n var after$1 = adt$6.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$1,\n cata: cata$2,\n getStart: getStart\n };\n\n var adt$7 = 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 var exactFromRange = function (simRange) {\n return adt$7.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$7.domRange;\n var relative$1 = adt$7.relative;\n var exact = adt$7.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative$1,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom);\n }, function (e, o) {\n rng.setStart(e.dom, o);\n }, function (e) {\n rng.setStartAfter(e.dom);\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom);\n }, function (e, o) {\n rng.setEnd(e.dom, o);\n }, function (e) {\n rng.setEndAfter(e.dom);\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\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 };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var 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 var adt$8 = 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 var fromRange = function (win, type, range) {\n return type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Optional.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Optional.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$8.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$8.ltr, rng);\n });\n } else {\n return fromRange(win, adt$8.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n var ltr = adt$8.ltr;\n var rtl = adt$8.rtl;\n\n var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api$2 = NodeValue(isText, 'text');\n var get$c = function (element) {\n return api$2.get(element);\n };\n var getOption = function (element) {\n return api$2.getOption(element);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(nbsp) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var after$2 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var getNativeSelection = function (win) {\n return Optional.from(win.getSelection());\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var 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 var doGetExact = function (selection) {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n var anchor = SugarElement.fromDom(selection.anchorNode);\n var focus_1 = SugarElement.fromDom(selection.focusNode);\n return after$2(anchor, selection.anchorOffset, focus_1, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus_1, selection.focusOffset)) : readRange(selection);\n }\n };\n var getExact = function (win) {\n return getNativeSelection(win).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n\n var point = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var descendOnce = function (element, offset) {\n var 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 var last = children$1[children$1.length - 1];\n var len = isText(last) ? get$c(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n var descendOnce$1 = function (element, offset) {\n return isText(element) ? point(element, offset) : descendOnce(element, offset);\n };\n var getAnchorSelection = function (win, anchorInfo) {\n var getSelection = anchorInfo.getSelection.getOrThunk(function () {\n return function () {\n return getExact(win);\n };\n });\n return getSelection().map(function (sel) {\n var modStart = descendOnce$1(sel.start, sel.soffset);\n var modFinish = descendOnce$1(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n });\n };\n var placement$3 = function (component, anchorInfo, origin) {\n var win = defaultView(anchorInfo.root).dom;\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n var selectionBox = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n var optRect = getFirstRect$1(win, SimSelection.exactFromRange(sel)).orThunk(function () {\n var x = SugarElement.fromText(zeroWidth);\n before(sel.start, x);\n return getFirstRect$1(win, SimSelection.exact(x, 0, x, 1)).map(function (rect) {\n remove(x);\n return rect;\n });\n });\n return optRect.bind(function (rawRect) {\n return capRect(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n });\n var targetElement = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n return isElement(sel.start) ? Optional.some(sel.start) : parentNode(sel.start);\n });\n var elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option('getSelection'),\n strict$1('root'),\n option('bubble'),\n schema$1(),\n defaulted$1('overrides', {}),\n defaulted$1('showAbove', false),\n output('placement', placement$3)\n ];\n\n var eastX$1 = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westX$1 = function (anchor, element) {\n return anchor.x - element.width;\n };\n var northY$1 = function (anchor, element) {\n return anchor.y - element.height + anchor.height;\n };\n var southY$1 = function (anchor) {\n return anchor.y;\n };\n var southeast$2 = function (anchor, element, bubbles) {\n return nu$7(eastX$1(anchor), southY$1(anchor), bubbles.southeast(), southeast(), boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), 'link-layout-se');\n };\n var southwest$2 = function (anchor, element, bubbles) {\n return nu$7(westX$1(anchor, element), southY$1(anchor), bubbles.southwest(), southwest(), boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), 'link-layout-sw');\n };\n var northeast$2 = function (anchor, element, bubbles) {\n return nu$7(eastX$1(anchor), northY$1(anchor, element), bubbles.northeast(), northeast(), boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), 'link-layout-ne');\n };\n var northwest$2 = function (anchor, element, bubbles) {\n return nu$7(westX$1(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest(), boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), 'link-layout-nw');\n };\n var all$3 = function () {\n return [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2\n ];\n };\n var allRtl$1 = function () {\n return [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2\n ];\n };\n\n var placement$4 = function (component, submenuInfo, origin) {\n var anchorBox = toBox(origin, submenuInfo.item.element);\n var layouts = get$b(component.element, submenuInfo, all$3(), allRtl$1(), all$3(), allRtl$1(), Optional.none());\n return Optional.some(nu$9({\n anchorBox: anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var SubmenuAnchor = [\n strict$1('item'),\n schema$1(),\n defaulted$1('overrides', {}),\n output('placement', placement$4)\n ];\n\n var AnchorSchema = choose$1('anchor', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n var getFixedOrigin = function () {\n var html = document.documentElement;\n return fixed(0, 0, html.clientWidth, html.clientHeight);\n };\n var getRelativeOrigin = function (component) {\n var position = absolute(component.element);\n var bounds = component.element.dom.getBoundingClientRect();\n return relative(position.left, position.top, bounds.width, bounds.height);\n };\n var place = function (component, origin, anchoring, getBounds, placee) {\n var anchor = box$1(anchoring.anchorBox, origin);\n simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, getBounds, anchoring.overrides);\n };\n var position$1 = function (component, posConfig, posState, anchor, placee) {\n positionWithin(component, posConfig, posState, anchor, placee, Optional.none());\n };\n var positionWithin = function (component, posConfig, posState, anchor, placee, boxElement) {\n var boundsBox = boxElement.map(box);\n return positionWithinBounds(component, posConfig, posState, anchor, placee, boundsBox);\n };\n var positionWithinBounds = function (component, posConfig, posState, anchor, placee, bounds) {\n var anchorage = asRawOrDie('positioning anchor.info', AnchorSchema, anchor);\n preserve(function () {\n set$2(placee.element, 'position', 'fixed');\n var oldVisibility = getRaw(placee.element, 'visibility');\n set$2(placee.element, 'visibility', 'hidden');\n var origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n var placer = anchorage.placement;\n var getBounds = bounds.map(constant).or(posConfig.getBounds);\n placer(component, anchorage, origin).each(function (anchoring) {\n var doPlace = anchoring.placer.getOr(place);\n doPlace(component, origin, anchoring, getBounds, placee);\n });\n oldVisibility.fold(function () {\n remove$6(placee.element, 'visibility');\n }, function (vis) {\n set$2(placee.element, 'visibility', vis);\n });\n if (getRaw(placee.element, 'left').isNone() && getRaw(placee.element, 'top').isNone() && getRaw(placee.element, 'right').isNone() && getRaw(placee.element, 'bottom').isNone() && getRaw(placee.element, 'position').is('fixed')) {\n remove$6(placee.element, 'position');\n }\n }, placee.element);\n };\n var getMode = function (component, pConfig, _pState) {\n return pConfig.useFixed() ? 'fixed' : 'absolute';\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 });\n\n var PositionSchema = [\n defaulted$1('useFixed', never),\n option('getBounds')\n ];\n\n var Positioning = create$1({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis\n });\n\n var fireDetaching = function (component) {\n emit(component, detachedFromDom());\n var children = component.components();\n each(children, fireDetaching);\n };\n var fireAttaching = function (component) {\n var children = component.components();\n each(children, fireAttaching);\n emit(component, attachedToDom());\n };\n var attach = function (parent, child) {\n append(parent.element, child.element);\n };\n var detachChildren = function (component) {\n each(component.components(), function (childComp) {\n return remove(childComp.element);\n });\n empty(component.element);\n component.syncComponents();\n };\n var replaceChildren = function (component, newChildren) {\n var subs = component.components();\n detachChildren(component);\n var deleted = difference(subs, newChildren);\n each(deleted, function (comp) {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each(newChildren, function (childComp) {\n if (!childComp.getSystem().isConnected()) {\n component.getSystem().addToWorld(childComp);\n attach(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach(component, childComp);\n }\n component.syncComponents();\n });\n };\n\n var attach$1 = function (parent, child) {\n attachWith(parent, child, append);\n };\n var attachWith = function (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 var doDetach = function (component) {\n fireDetaching(component);\n remove(component.element);\n component.getSystem().removeFromWorld(component);\n };\n var detach = function (component) {\n var parent$1 = parent(component.element).bind(function (p) {\n return component.getSystem().getByDom(p).toOptional();\n });\n doDetach(component);\n parent$1.each(function (p) {\n p.syncComponents();\n });\n };\n var detachChildren$1 = function (component) {\n var subs = component.components();\n each(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n var attachSystem = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, append);\n };\n var attachSystemAfter = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, after);\n };\n var attachSystemWith = function (element, guiSystem, inserter) {\n inserter(element, guiSystem.element);\n var children$1 = children(guiSystem.element);\n each(children$1, function (child) {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n var detachSystem = function (guiSystem) {\n var children$1 = children(guiSystem.element);\n each(children$1, function (child) {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove(guiSystem.element);\n };\n\n var rebuild = function (sandbox, sConfig, sState, data) {\n sState.get().each(function (_data) {\n detachChildren$1(sandbox);\n });\n var point = sConfig.getAttachPoint(sandbox);\n attach$1(point, sandbox);\n var built = sandbox.getSystem().build(data);\n attach$1(sandbox, built);\n sState.set(built);\n return built;\n };\n var open = function (sandbox, sConfig, sState, data) {\n var newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n var setContent = function (sandbox, sConfig, sState, data) {\n return sState.get().map(function () {\n return rebuild(sandbox, sConfig, sState, data);\n });\n };\n var openWhileCloaked = function (sandbox, sConfig, sState, data, transaction) {\n cloak(sandbox, sConfig);\n open(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n var close = function (sandbox, sConfig, sState) {\n sState.get().each(function (data) {\n detachChildren$1(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n var isOpen = function (_sandbox, _sConfig, sState) {\n return sState.isOpen();\n };\n var isPartOf$1 = function (sandbox, sConfig, sState, queryElem) {\n return isOpen(sandbox, sConfig, sState) && sState.get().exists(function (data) {\n return sConfig.isPartOf(sandbox, data, queryElem);\n });\n };\n var getState = function (_sandbox, _sConfig, sState) {\n return sState.get();\n };\n var store = function (sandbox, cssKey, attr, newValue) {\n getRaw(sandbox.element, cssKey).fold(function () {\n remove$1(sandbox.element, attr);\n }, function (v) {\n set$1(sandbox.element, attr, v);\n });\n set$2(sandbox.element, cssKey, newValue);\n };\n var restore = function (sandbox, cssKey, attr) {\n getOpt(sandbox.element, attr).fold(function () {\n return remove$6(sandbox.element, cssKey);\n }, function (oldValue) {\n return set$2(sandbox.element, cssKey, oldValue);\n });\n };\n var cloak = function (sandbox, sConfig, _sState) {\n var sink = sConfig.getAttachPoint(sandbox);\n set$2(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n var hasPosition = function (element) {\n return exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], function (pos) {\n return getRaw(element, pos).isSome();\n });\n };\n var decloak = function (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,\n openWhileCloaked: openWhileCloaked,\n close: close,\n isOpen: isOpen,\n isPartOf: isPartOf$1,\n getState: getState,\n setContent: setContent\n });\n\n var events$2 = function (sandboxConfig, sandboxState) {\n return derive([run(sandboxClose(), function (sandbox, _simulatedEvent) {\n close(sandbox, sandboxConfig, sandboxState);\n })]);\n };\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$2\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n strict$1('isPartOf'),\n strict$1('getAttachPoint'),\n defaulted$1('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n var init = function () {\n var contents = Cell(Optional.none());\n var readState = constant('not-implemented');\n var isOpen = function () {\n return contents.get().isSome();\n };\n var set = function (comp) {\n contents.set(Optional.some(comp));\n };\n var get = function () {\n return contents.get();\n };\n var clear = function () {\n contents.set(Optional.none());\n };\n return nu$5({\n readState: readState,\n isOpen: isOpen,\n clear: clear,\n set: set,\n get: get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n var Sandboxing = create$1({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n var dismissPopups = constant('dismiss.popups');\n var repositionPopups = constant('reposition.popups');\n var mouseReleased = constant('mouse.released');\n\n var schema$2 = objOfOnly([\n defaulted$1('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted$1('event', dismissRequested())])\n ]);\n var receivingChannel = function (rawSpec) {\n var _a;\n var detail = asRawOrDie('Dismissal', schema$2, rawSpec);\n return _a = {}, _a[dismissPopups()] = {\n schema: objOfOnly([strict$1('target')]),\n onReceive: function (sandbox, data) {\n if (Sandboxing.isOpen(sandbox)) {\n var isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(function () {\n return Sandboxing.close(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }\n }, _a;\n };\n\n var schema$3 = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted$1('event', repositionRequested())]),\n strictFunction('doReposition')\n ]);\n var receivingChannel$1 = function (rawSpec) {\n var _a;\n var detail = asRawOrDie('Reposition', schema$3, rawSpec);\n return _a = {}, _a[repositionPopups()] = {\n onReceive: function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(function () {\n return detail.doReposition(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }, _a;\n };\n\n var onLoad = function (component, repConfig, repState) {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n var onUnload = function (component, repConfig, repState) {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n var setValue = function (component, repConfig, repState, data) {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n var getValue = function (component, repConfig, repState) {\n return repConfig.store.manager.getValue(component, repConfig, repState);\n };\n var getState$1 = function (component, repConfig, repState) {\n return repState;\n };\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n onUnload: onUnload,\n setValue: setValue,\n getValue: getValue,\n getState: getState$1\n });\n\n var events$3 = function (repConfig, repState) {\n var es = repConfig.resetOnDom ? [\n runOnAttached(function (comp, _se) {\n onLoad(comp, repConfig, repState);\n }),\n runOnDetached(function (comp, _se) {\n onUnload(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad)];\n return derive(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$3\n });\n\n var memory = function () {\n var data = Cell(null);\n var readState = function () {\n return {\n mode: 'memory',\n value: data.get()\n };\n };\n var isNotSet = function () {\n return data.get() === null;\n };\n var clear = function () {\n data.set(null);\n };\n return nu$5({\n set: data.set,\n get: data.get,\n isNotSet: isNotSet,\n clear: clear,\n readState: readState\n });\n };\n var manual = function () {\n var readState = noop;\n return nu$5({ readState: readState });\n };\n var dataset = function () {\n var dataByValue = Cell({});\n var dataByText = Cell({});\n var readState = function () {\n return {\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n };\n };\n var clear = function () {\n dataByValue.set({});\n dataByText.set({});\n };\n var lookup = function (itemString) {\n return get$1(dataByValue.get(), itemString).orThunk(function () {\n return get$1(dataByText.get(), itemString);\n });\n };\n var update = function (items) {\n var currentDataByValue = dataByValue.get();\n var currentDataByText = dataByText.get();\n var newDataByValue = {};\n var newDataByText = {};\n each(items, function (item) {\n newDataByValue[item.value] = item;\n get$1(item, 'meta').each(function (meta) {\n get$1(meta, 'text').each(function (text) {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set(__assign(__assign({}, currentDataByValue), newDataByValue));\n dataByText.set(__assign(__assign({}, currentDataByText), newDataByText));\n };\n return nu$5({\n readState: readState,\n lookup: lookup,\n update: update,\n clear: clear\n });\n };\n var init$1 = function (spec) {\n return spec.store.manager.state(spec);\n };\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory,\n dataset: dataset,\n manual: manual,\n init: init$1\n });\n\n var setValue$1 = function (component, repConfig, repState, data) {\n var store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var getValue$1 = function (component, repConfig, repState) {\n var store = repConfig.store;\n var key = store.getDataKey(component);\n return repState.lookup(key).fold(function () {\n return store.getFallbackEntry(key);\n }, function (data) {\n return data;\n });\n };\n var onLoad$1 = function (component, repConfig, repState) {\n var store = repConfig.store;\n store.initialValue.each(function (data) {\n setValue$1(component, repConfig, repState, data);\n });\n };\n var onUnload$1 = function (component, repConfig, repState) {\n repState.clear();\n };\n var DatasetStore = [\n option('initialValue'),\n strict$1('getFallbackEntry'),\n strict$1('getDataKey'),\n strict$1('setValue'),\n output('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$1,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n var getValue$2 = function (component, repConfig, _repState) {\n return repConfig.store.getValue(component);\n };\n var setValue$2 = function (component, repConfig, _repState, data) {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var onLoad$2 = function (component, repConfig, _repState) {\n repConfig.store.initialValue.each(function (data) {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n strict$1('getValue'),\n defaulted$1('setValue', noop),\n option('initialValue'),\n output('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$2,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n var setValue$3 = function (component, repConfig, repState, data) {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n var getValue$3 = function (component, repConfig, repState) {\n return repState.get();\n };\n var onLoad$3 = function (component, repConfig, repState) {\n repConfig.store.initialValue.each(function (initVal) {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n var onUnload$2 = function (component, repConfig, repState) {\n repState.clear();\n };\n var MemoryStore = [\n option('initialValue'),\n output('manager', {\n setValue: setValue$3,\n getValue: getValue$3,\n onLoad: onLoad$3,\n onUnload: onUnload$2,\n state: memory\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$1('resetOnDom', false)\n ];\n\n var Representing = create$1({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: function (component, source) {\n var value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n var field$1 = function (name, forbidden) {\n return defaultedObjOf(name, {}, map(forbidden, function (f) {\n return forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name);\n }).concat([state$1('dump', identity)]));\n };\n var get$d = function (data) {\n return data.dump;\n };\n var augment = function (data, original) {\n return __assign(__assign({}, data.dump), derive$1(original));\n };\n var SketchBehaviours = {\n field: field$1,\n augment: augment,\n get: get$d\n };\n\n var _placeholder = 'placeholder';\n var adt$9 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n var isSubstituted = function (spec) {\n return has(spec, 'uiType');\n };\n var subPlaceholder = function (owner, detail, compSpec, placeholders) {\n if (owner.exists(function (o) {\n return o !== compSpec.owner;\n })) {\n return adt$9.single(true, constant(compSpec));\n }\n return get$1(placeholders, compSpec.name).fold(function () {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, function (newSpec) {\n return newSpec.replace();\n });\n };\n var scan = function (owner, detail, compSpec, placeholders) {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$9.single(false, constant(compSpec));\n }\n };\n var substitute = function (owner, detail, compSpec, placeholders) {\n var base = scan(owner, detail, compSpec, placeholders);\n return base.fold(function (req, valueThunk) {\n var value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n var childSpecs = get$1(value, 'components').getOr([]);\n var substituted = bind(childSpecs, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n return [__assign(__assign({}, value), { components: substituted })];\n }, function (req, valuesThunk) {\n if (isSubstituted(compSpec)) {\n var values = valuesThunk(detail, compSpec.config, compSpec.validated);\n var preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n var substituteAll = function (owner, detail, components, placeholders) {\n return bind(components, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n };\n var oneReplace = function (label, replacements) {\n var called = false;\n var used = function () {\n return called;\n };\n var replace = function () {\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 var required = function () {\n return replacements.fold(function (req, _) {\n return req;\n }, function (req, _) {\n return req;\n });\n };\n return {\n name: constant(label),\n required: required,\n used: used,\n replace: replace\n };\n };\n var substitutePlaces = function (owner, detail, components, placeholders) {\n var ps = map$2(placeholders, function (ph, name) {\n return oneReplace(name, ph);\n });\n var outcome = substituteAll(owner, detail, components, ps);\n each$1(ps, function (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 var single = adt$9.single;\n var multiple = adt$9.multiple;\n var placeholder = constant(_placeholder);\n\n var adt$a = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n var fFactory = defaulted$1('factory', { sketch: identity });\n var fSchema = defaulted$1('schema', []);\n var fName = strict$1('name');\n var fPname = field('pname', 'pname', defaultedThunk(function (typeSpec) {\n return '';\n }), anyValue$1());\n var fGroupSchema = state$1('schema', function () {\n return [option('preprocess')];\n });\n var fDefaults = defaulted$1('defaults', constant({}));\n var fOverrides = defaulted$1('overrides', constant({}));\n var requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n var optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n strict$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n var asNamedPart = function (part) {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n var name$1 = function (part) {\n var get = function (data) {\n return data.name;\n };\n return part.fold(get, get, get, get);\n };\n var asCommon = function (part) {\n return part.fold(identity, identity, identity, identity);\n };\n var convert = function (adtConstructor, partSchema) {\n return function (spec) {\n var data = asRawOrDie('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n };\n var required = convert(adt$a.required, requiredSpec);\n var external$1 = convert(adt$a.external, externalSpec);\n var optional = convert(adt$a.optional, optionalSpec);\n var group = convert(adt$a.group, groupSpec);\n var original = constant('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external$1,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$1,\n asCommon: asCommon,\n original: original\n });\n\n var combine$2 = function (detail, data, partSpec, partValidated) {\n return deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n };\n var subs = function (owner, detail, parts) {\n var internals = {};\n var externals = {};\n each(parts, function (part) {\n part.fold(function (data) {\n internals[data.pname] = single(true, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n var partSpec = detail.parts[data.name];\n externals[data.name] = constant(data.factory.sketch(combine$2(detail, data, partSpec[original()]), partSpec));\n }, function (data) {\n internals[data.pname] = single(false, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n internals[data.pname] = multiple(true, function (detail, _partSpec, _partValidated) {\n var units = detail[data.name];\n return map(units, function (u) {\n return data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u)));\n });\n });\n });\n });\n return {\n internals: constant(internals),\n externals: constant(externals)\n };\n };\n\n var generate$4 = function (owner, parts) {\n var r = {};\n each(parts, function (part) {\n asNamedPart(part).each(function (np) {\n var g = doGenerateOne(owner, np.pname);\n r[np.name] = function (config) {\n var validated = asRawOrDie('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return __assign(__assign({}, g), {\n config: config,\n validated: validated\n });\n };\n });\n });\n return r;\n };\n var doGenerateOne = function (owner, pname) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname\n };\n };\n var generateOne = function (owner, pname, config) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname,\n config: config,\n validated: {}\n };\n };\n var schemas = function (parts) {\n return bind(parts, function (part) {\n return part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(function (data) {\n return strictObjOf(data.name, data.schema.concat([snapshot(original())]));\n }).toArray();\n });\n };\n var names = function (parts) {\n return map(parts, name$1);\n };\n var substitutes = function (owner, detail, parts) {\n return subs(owner, detail, parts);\n };\n var components = function (owner, detail, internals) {\n return substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n };\n var getPart = function (component, detail, partKey) {\n var uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n var getPartOrDie = function (component, detail, partKey) {\n return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n };\n var getParts = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each(partKeys, function (pk) {\n r[pk] = constant(system.getByUid(uids[pk]));\n });\n return r;\n };\n var getAllParts = function (component, detail) {\n var system = component.getSystem();\n return map$2(detail.partUids, function (pUid, _k) {\n return constant(system.getByUid(pUid));\n });\n };\n var getAllPartNames = function (detail) {\n return keys(detail.partUids);\n };\n var getPartsOrDie = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each(partKeys, function (pk) {\n r[pk] = constant(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n var defaultUids = function (baseUid, partTypes) {\n var partNames = names(partTypes);\n return wrapAll$1(map(partNames, function (pn) {\n return {\n key: pn,\n value: baseUid + '-' + pn\n };\n }));\n };\n var defaultUidsSchema = function (partTypes) {\n return field('partUids', 'partUids', mergeWithThunk(function (spec) {\n return defaultUids(spec.uid, partTypes);\n }), anyValue$1());\n };\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$4,\n generateOne: generateOne,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components,\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 var base = function (partSchemas, partUidsSchemas) {\n var ps = partSchemas.length > 0 ? [strictObjOf('parts', partSchemas)] : [];\n return ps.concat([\n strict$1('uid'),\n defaulted$1('dom', {}),\n defaulted$1('components', []),\n snapshot('originalSpec'),\n defaulted$1('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n var asRawOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) {\n var baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n var single$1 = function (owner, schema, factory, spec) {\n var specWithUid = supplyUid(spec);\n var detail = asRawOrDie$1(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n var composite = function (owner, schema, partTypes, factory, spec) {\n var specWithUid = supplyUid(spec);\n var partSchemas = schemas(partTypes);\n var partUidsSchema = defaultUidsSchema(partTypes);\n var detail = asRawOrDie$1(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n var subs = substitutes(owner, detail, partTypes);\n var components$1 = components(owner, detail, subs.internals());\n return factory(detail, components$1, specWithUid, subs.externals());\n };\n var hasUid = function (spec) {\n return has(spec, 'uid');\n };\n var supplyUid = function (spec) {\n return hasUid(spec) ? spec : __assign(__assign({}, spec), { uid: generate$2('uid') });\n };\n\n var isSketchSpec = function (spec) {\n return spec.uid !== undefined;\n };\n var singleSchema = objOfOnly([\n strict$1('name'),\n strict$1('factory'),\n strict$1('configFields'),\n defaulted$1('apis', {}),\n defaulted$1('extraApis', {})\n ]);\n var compositeSchema = objOfOnly([\n strict$1('name'),\n strict$1('factory'),\n strict$1('configFields'),\n strict$1('partFields'),\n defaulted$1('apis', {}),\n defaulted$1('extraApis', {})\n ]);\n var single$2 = function (rawConfig) {\n var config = asRawOrDie('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n var sketch = function (spec) {\n return single$1(config.name, config.configFields, config.factory, spec);\n };\n var apis = map$2(config.apis, makeApi);\n var extraApis = map$2(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n configFields: config.configFields,\n sketch: sketch\n }, apis), extraApis);\n };\n var composite$1 = function (rawConfig) {\n var config = asRawOrDie('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n var sketch = function (spec) {\n return composite(config.name, config.configFields, config.partFields, config.factory, spec);\n };\n var parts = generate$4(config.name, config.partFields);\n var apis = map$2(config.apis, makeApi);\n var extraApis = map$2(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch: sketch,\n parts: parts\n }, apis), extraApis);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var sequence = function (arr) {\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n var 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 var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var mapFrom = function (a, f) {\n return a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var inside = function (target) {\n return name(target) === 'input' && get$3(target, 'type') !== 'radio' || name(target) === 'textarea';\n };\n\n var getCurrent = function (component, composeConfig, _composeState) {\n return composeConfig.find(component);\n };\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n var ComposeSchema = [strict$1('find')];\n\n var Composing = create$1({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n var dehighlightAllExcept = function (component, hConfig, hState, skip) {\n var highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each(highlighted, function (h) {\n if (!exists(skip, function (skipComp) {\n return skipComp.element === h;\n })) {\n remove$4(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(function (target) {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight());\n });\n }\n });\n };\n var dehighlightAll = function (component, hConfig, hState) {\n return dehighlightAllExcept(component, hConfig, hState, []);\n };\n var dehighlight$1 = function (component, hConfig, hState, target) {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$4(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight());\n }\n };\n var highlight$1 = function (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());\n }\n };\n var highlightFirst = function (component, hConfig, hState) {\n getFirst(component, hConfig).each(function (firstComp) {\n highlight$1(component, hConfig, hState, firstComp);\n });\n };\n var highlightLast = function (component, hConfig, hState) {\n getLast(component, hConfig).each(function (lastComp) {\n highlight$1(component, hConfig, hState, lastComp);\n });\n };\n var highlightAt = function (component, hConfig, hState, index) {\n getByIndex(component, hConfig, hState, index).fold(function (err) {\n throw err;\n }, function (firstComp) {\n highlight$1(component, hConfig, hState, firstComp);\n });\n };\n var highlightBy = function (component, hConfig, hState, predicate) {\n var candidates = getCandidates(component, hConfig);\n var targetComp = find(candidates, predicate);\n targetComp.each(function (c) {\n highlight$1(component, hConfig, hState, c);\n });\n };\n var isHighlighted = function (component, hConfig, hState, queryTarget) {\n return has$2(queryTarget.element, hConfig.highlightClass);\n };\n var getHighlighted = function (component, hConfig, _hState) {\n return descendant$1(component.element, '.' + hConfig.highlightClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getByIndex = function (component, hConfig, hState, index) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(function () {\n return Result.error(new Error('No element found with index ' + index));\n }, component.getSystem().getByDom);\n };\n var getFirst = function (component, hConfig, _hState) {\n return descendant$1(component.element, '.' + hConfig.itemClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getLast = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(function (c) {\n return component.getSystem().getByDom(c).toOptional();\n });\n };\n var getDelta = function (component, hConfig, hState, delta) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var current = findIndex(items, function (item) {\n return has$2(item, hConfig.highlightClass);\n });\n return current.bind(function (selected) {\n var dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n var getPrevious = function (component, hConfig, hState) {\n return getDelta(component, hConfig, hState, -1);\n };\n var getNext = function (component, hConfig, hState) {\n return getDelta(component, hConfig, hState, +1);\n };\n var getCandidates = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map(items, function (i) {\n return component.getSystem().getByDom(i).toOptional();\n }));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight$1,\n highlight: highlight$1,\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 strict$1('highlightClass'),\n strict$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n var Highlighting = create$1({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n var BACKSPACE = [8];\n var TAB = [9];\n var ENTER = [13];\n var ESCAPE = [27];\n var SPACE = [32];\n var LEFT = [37];\n var UP = [38];\n var RIGHT = [39];\n var DOWN = [40];\n\n var cyclePrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n var after = reverse(values.slice(index + 1));\n return find(before.concat(after), predicate);\n };\n var tryPrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n return find(before, predicate);\n };\n var cycleNext = function (values, index, predicate) {\n var before = values.slice(0, index);\n var after = values.slice(index + 1);\n return find(after.concat(before), predicate);\n };\n var tryNext = function (values, index, predicate) {\n var after = values.slice(index + 1);\n return find(after, predicate);\n };\n\n var inSet = function (keys) {\n return function (event) {\n var raw = event.raw;\n return contains(keys, raw.which);\n };\n };\n var and = function (preds) {\n return function (event) {\n return forall(preds, function (pred) {\n return pred(event);\n });\n };\n };\n var isShift = function (event) {\n var raw = event.raw;\n return raw.shiftKey === true;\n };\n var isControl = function (event) {\n var raw = event.raw;\n return raw.ctrlKey === true;\n };\n var isNotShift = not(isShift);\n\n var rule = function (matches, action) {\n return {\n matches: matches,\n classification: action\n };\n };\n var choose$2 = function (transitions, event) {\n var transition = find(transitions, function (t) {\n return t.matches(event);\n });\n return transition.map(function (t) {\n return t.classification;\n });\n };\n\n var reportFocusShifting = function (component, prevFocus, newFocus) {\n var noChange = prevFocus.exists(function (p) {\n return newFocus.exists(function (n) {\n return eq$1(n, p);\n });\n });\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus: prevFocus,\n newFocus: newFocus\n });\n }\n };\n var dom = function () {\n var get = function (component) {\n return search(component.element);\n };\n var set = function (component, focusee) {\n var prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n var highlights = function () {\n var get = function (component) {\n return Highlighting.getHighlighted(component).map(function (item) {\n return item.element;\n });\n };\n var set = function (component, element) {\n var prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, function (item) {\n Highlighting.highlight(component, item);\n });\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: 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 var typical = function (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) {\n var schema = function () {\n return infoSchema.concat([\n defaulted$1('focusManager', dom()),\n defaultedOf('focusInside', 'onFocus', valueOf(function (val) {\n return contains([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');\n })),\n output('handler', me),\n output('state', stateInit),\n output('sendFocusIn', optFocusIn)\n ]);\n };\n var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {\n var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose$2(rules, simulatedEvent.event).bind(function (rule) {\n return rule(component, simulatedEvent, keyingConfig, keyingState);\n });\n };\n var toEvents = function (keyingConfig, keyingState) {\n var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(function (focusIn) {\n return run(focus(), function (component, simulatedEvent) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n });\n var tryGoInsideComponent = function (component, simulatedEvent) {\n var isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(function (focusIn) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n var keyboardEvents = [\n run(keydown(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(function () {\n tryGoInsideComponent(component, simulatedEvent);\n }, function (_) {\n simulatedEvent.stop();\n });\n }),\n run(keyup(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {\n simulatedEvent.stop();\n });\n })\n ];\n return derive(onFocusHandler.toArray().concat(keyboardEvents));\n };\n var me = {\n schema: schema,\n processKey: processKey,\n toEvents: toEvents\n };\n return me;\n };\n\n var create$3 = function (cyclicField) {\n var schema = [\n option('onEscape'),\n option('onEnter'),\n defaulted$1('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted$1('firstTabstop', 0),\n defaulted$1('useTabstopAt', always),\n option('visibilitySelector')\n ].concat([cyclicField]);\n var isVisible = function (tabbingConfig, element) {\n var target = tabbingConfig.visibilitySelector.bind(function (sel) {\n return closest$3(element, sel);\n }).getOr(element);\n return get$7(target) > 0;\n };\n var findInitial = function (component, tabbingConfig) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n var visibles = filter(tabstops, function (elem) {\n return isVisible(tabbingConfig, elem);\n });\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n var findCurrent = function (component, tabbingConfig) {\n return tabbingConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, tabbingConfig.selector);\n });\n };\n var isTabstop = function (tabbingConfig, element) {\n return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n };\n var focusIn = function (component, tabbingConfig, _tabbingState) {\n findInitial(component, tabbingConfig).each(function (target) {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) {\n return cycle(tabstops, stopIndex, function (elem) {\n return isTabstop(tabbingConfig, elem);\n }).fold(function () {\n return tabbingConfig.cyclic ? Optional.some(true) : Optional.none();\n }, function (target) {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n };\n var go = function (component, _simulatedEvent, tabbingConfig, cycle) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(function (tabstop) {\n var optStopIndex = findIndex(tabstops, curry(eq$1, tabstop));\n return optStopIndex.bind(function (stopIndex) {\n return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);\n });\n });\n };\n var goBackwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var goForwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var execute = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEnter.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var exit = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEscape.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var getKeydownRules = constant([\n rule(and([\n isShift,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(inSet(ESCAPE), exit),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n var getKeyupRules = constant([]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Optional.some(focusIn);\n });\n };\n\n var AcyclicType = create$3(state$1('cyclic', never));\n\n var CyclicType = create$3(state$1('cyclic', always));\n\n var doDefaultExecute = function (component, _simulatedEvent, focused) {\n dispatch(component, focused, execute());\n return Optional.some(true);\n };\n var defaultExecute = function (component, simulatedEvent, focused) {\n var isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n var stopEventForFirefox = function (_component, _simulatedEvent) {\n return Optional.some(true);\n };\n\n var schema$4 = [\n defaulted$1('execute', defaultExecute),\n defaulted$1('useSpace', false),\n defaulted$1('useEnter', true),\n defaulted$1('useControlEnter', false),\n defaulted$1('useDown', false)\n ];\n var execute$1 = function (component, simulatedEvent, executeConfig) {\n return executeConfig.execute(component, simulatedEvent, component.element);\n };\n var getKeydownRules = function (component, _simulatedEvent, executeConfig, _executeState) {\n var spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n var enterExec = executeConfig.useEnter ? ENTER : [];\n var downExec = executeConfig.useDown ? DOWN : [];\n var execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$1)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$1)] : []);\n };\n var getKeyupRules = function (component, _simulatedEvent, executeConfig, _executeState) {\n return executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var ExecutionType = typical(schema$4, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Optional.none();\n });\n\n var flatgrid = function () {\n var dimensions = Cell(Optional.none());\n var setGridSize = function (numRows, numColumns) {\n dimensions.set(Optional.some({\n numRows: numRows,\n numColumns: numColumns\n }));\n };\n var getNumRows = function () {\n return dimensions.get().map(function (d) {\n return d.numRows;\n });\n };\n var getNumColumns = function () {\n return dimensions.get().map(function (d) {\n return d.numColumns;\n });\n };\n return nu$5({\n readState: function () {\n return dimensions.get().map(function (d) {\n return {\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n };\n }).getOr({\n numRows: '?',\n numColumns: '?'\n });\n },\n setGridSize: setGridSize,\n getNumRows: getNumRows,\n getNumColumns: getNumColumns\n });\n };\n var init$2 = function (spec) {\n return spec.state(spec);\n };\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid,\n init: init$2\n });\n\n var useH = function (movement) {\n return function (component, simulatedEvent, config, state) {\n var move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var west$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n var east$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n var useV = function (move) {\n return function (component, simulatedEvent, config, state) {\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var use = function (move, component, simulatedEvent, config, state) {\n var outcome = config.focusManager.get(component).bind(function (focused) {\n return move(component.element, focused, config, state);\n });\n return outcome.map(function (newFocus) {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n var north$2 = useV;\n var south$2 = useV;\n var move = useV;\n\n var isHidden = function (dom) {\n return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n };\n var isVisible = function (element) {\n return !isHidden(element.dom);\n };\n\n var locate = function (candidates, predicate) {\n return findIndex(candidates, predicate).map(function (index) {\n return {\n index: index,\n candidates: candidates\n };\n });\n };\n\n var locateVisible = function (container, current, selector) {\n var predicate = function (x) {\n return eq$1(x, current);\n };\n var candidates = descendants(container, selector);\n var visible = filter(candidates, isVisible);\n return locate(visible, predicate);\n };\n var findIndex$1 = function (elements, target) {\n return findIndex(elements, function (elem) {\n return eq$1(target, elem);\n });\n };\n\n var withGrid = function (values, index, numCols, f) {\n var oldRow = Math.floor(index / numCols);\n var oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(function (address) {\n var newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n var cycleHorizontal = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var onLastRow = oldRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n var newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n };\n var cycleVertical = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n var onLastRow = newRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n var newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n };\n var cycleRight = function (values, index, numRows, numCols) {\n return cycleHorizontal(values, index, numRows, numCols, +1);\n };\n var cycleLeft = function (values, index, numRows, numCols) {\n return cycleHorizontal(values, index, numRows, numCols, -1);\n };\n var cycleUp = function (values, index, numRows, numCols) {\n return cycleVertical(values, index, numRows, numCols, -1);\n };\n var cycleDown = function (values, index, numRows, numCols) {\n return cycleVertical(values, index, numRows, numCols, +1);\n };\n\n var schema$5 = [\n strict$1('selector'),\n defaulted$1('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted$1('captureTab', false),\n initSize()\n ];\n var focusIn = function (component, gridConfig, _gridState) {\n descendant$1(component.element, gridConfig.selector).each(function (first) {\n gridConfig.focusManager.set(component, first);\n });\n };\n var findCurrent = function (component, gridConfig) {\n return gridConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, gridConfig.selector);\n });\n };\n var execute$2 = function (component, simulatedEvent, gridConfig, _gridState) {\n return findCurrent(component, gridConfig).bind(function (focused) {\n return gridConfig.execute(component, simulatedEvent, focused);\n });\n };\n var doMove = function (cycle) {\n return function (element, focused, gridConfig, gridState) {\n return locateVisible(element, focused, gridConfig.selector).bind(function (identified) {\n return cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns));\n });\n };\n };\n var handleTab = function (_component, _simulatedEvent, gridConfig) {\n return gridConfig.captureTab ? Optional.some(true) : Optional.none();\n };\n var doEscape = function (component, simulatedEvent, gridConfig) {\n return gridConfig.onEscape(component, simulatedEvent);\n };\n var moveLeft = doMove(cycleLeft);\n var moveRight = doMove(cycleRight);\n var moveNorth = doMove(cycleUp);\n var moveSouth = doMove(cycleDown);\n var getKeydownRules$1 = constant([\n rule(inSet(LEFT), west$2(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$2(moveLeft, moveRight)),\n rule(inSet(UP), north$2(moveNorth)),\n rule(inSet(DOWN), south$2(moveSouth)),\n rule(and([\n isShift,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(ESCAPE), doEscape),\n rule(inSet(SPACE.concat(ENTER)), execute$2)\n ]);\n var getKeyupRules$1 = constant([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlatgridType = typical(schema$5, flatgrid, getKeydownRules$1, getKeyupRules$1, function () {\n return Optional.some(focusIn);\n });\n\n var horizontal = function (container, selector, current, delta) {\n var isDisabledButton = function (candidate) {\n return name(candidate) === 'button' && get$3(candidate, 'disabled') === 'disabled';\n };\n var tryCycle = function (initial, index, candidates) {\n var 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(function (identified) {\n var index = identified.index;\n var candidates = identified.candidates;\n return tryCycle(index, index, candidates);\n });\n };\n\n var schema$6 = [\n strict$1('selector'),\n defaulted$1('getInitial', Optional.none),\n defaulted$1('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted$1('executeOnMove', false),\n defaulted$1('allowVertical', true)\n ];\n var findCurrent$1 = function (component, flowConfig) {\n return flowConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, flowConfig.selector);\n });\n };\n var execute$3 = function (component, simulatedEvent, flowConfig) {\n return findCurrent$1(component, flowConfig).bind(function (focused) {\n return flowConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$1 = function (component, flowConfig, _state) {\n flowConfig.getInitial(component).orThunk(function () {\n return descendant$1(component.element, flowConfig.selector);\n }).each(function (first) {\n flowConfig.focusManager.set(component, first);\n });\n };\n var moveLeft$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveRight$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var doMove$1 = function (movement) {\n return function (component, simulatedEvent, flowConfig, flowState) {\n return movement(component, simulatedEvent, flowConfig, flowState).bind(function () {\n return flowConfig.executeOnMove ? execute$3(component, simulatedEvent, flowConfig) : Optional.some(true);\n });\n };\n };\n var doEscape$1 = function (component, simulatedEvent, flowConfig) {\n return flowConfig.onEscape(component, simulatedEvent);\n };\n var getKeydownRules$2 = function (_component, _se, flowConfig, _flowState) {\n var westMovers = LEFT.concat(flowConfig.allowVertical ? UP : []);\n var eastMovers = RIGHT.concat(flowConfig.allowVertical ? DOWN : []);\n return [\n rule(inSet(westMovers), doMove$1(west$2(moveLeft$1, moveRight$1))),\n rule(inSet(eastMovers), doMove$1(east$2(moveLeft$1, moveRight$1))),\n rule(inSet(ENTER), execute$3),\n rule(inSet(SPACE), execute$3),\n rule(inSet(ESCAPE), doEscape$1)\n ];\n };\n var getKeyupRules$2 = constant([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlowType = typical(schema$6, NoState.init, getKeydownRules$2, getKeyupRules$2, function () {\n return Optional.some(focusIn$1);\n });\n\n var toCell = function (matrix, rowIndex, columnIndex) {\n return Optional.from(matrix[rowIndex]).bind(function (row) {\n return Optional.from(row[columnIndex]).map(function (cell) {\n return {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n cell: cell\n };\n });\n });\n };\n var cycleHorizontal$1 = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var cycleVertical$1 = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var moveHorizontal = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var moveVertical = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var cycleRight$1 = function (matrix, startRow, startCol) {\n return cycleHorizontal$1(matrix, startRow, startCol, +1);\n };\n var cycleLeft$1 = function (matrix, startRow, startCol) {\n return cycleHorizontal$1(matrix, startRow, startCol, -1);\n };\n var cycleUp$1 = function (matrix, startRow, startCol) {\n return cycleVertical$1(matrix, startCol, startRow, -1);\n };\n var cycleDown$1 = function (matrix, startRow, startCol) {\n return cycleVertical$1(matrix, startCol, startRow, +1);\n };\n var moveLeft$2 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, -1);\n };\n var moveRight$2 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, +1);\n };\n var moveUp = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, -1);\n };\n var moveDown = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, +1);\n };\n\n var schema$7 = [\n strictObjOf('selectors', [\n strict$1('row'),\n strict$1('cell')\n ]),\n defaulted$1('cycles', true),\n defaulted$1('previousSelector', Optional.none),\n defaulted$1('execute', defaultExecute)\n ];\n var focusIn$2 = function (component, matrixConfig, _state) {\n var focused = matrixConfig.previousSelector(component).orThunk(function () {\n var selectors = matrixConfig.selectors;\n return descendant$1(component.element, selectors.cell);\n });\n focused.each(function (cell) {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n var execute$4 = function (component, simulatedEvent, matrixConfig) {\n return search(component.element).bind(function (focused) {\n return matrixConfig.execute(component, simulatedEvent, focused);\n });\n };\n var toMatrix = function (rows, matrixConfig) {\n return map(rows, function (row) {\n return descendants(row, matrixConfig.selectors.cell);\n });\n };\n var doMove$2 = function (ifCycle, ifMove) {\n return function (element, focused, matrixConfig) {\n var move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$3(focused, matrixConfig.selectors.row).bind(function (inRow) {\n var cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex$1(cellsInRow, focused).bind(function (colIndex) {\n var allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex$1(allRows, inRow).bind(function (rowIndex) {\n var matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(function (next) {\n return next.cell;\n });\n });\n });\n });\n };\n };\n var moveLeft$3 = doMove$2(cycleLeft$1, moveLeft$2);\n var moveRight$3 = doMove$2(cycleRight$1, moveRight$2);\n var moveNorth$1 = doMove$2(cycleUp$1, moveUp);\n var moveSouth$1 = doMove$2(cycleDown$1, moveDown);\n var getKeydownRules$3 = constant([\n rule(inSet(LEFT), west$2(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$2(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$2(moveNorth$1)),\n rule(inSet(DOWN), south$2(moveSouth$1)),\n rule(inSet(SPACE.concat(ENTER)), execute$4)\n ]);\n var getKeyupRules$3 = constant([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$7, NoState.init, getKeydownRules$3, getKeyupRules$3, function () {\n return Optional.some(focusIn$2);\n });\n\n var schema$8 = [\n strict$1('selector'),\n defaulted$1('execute', defaultExecute),\n defaulted$1('moveOnTab', false)\n ];\n var execute$5 = function (component, simulatedEvent, menuConfig) {\n return menuConfig.focusManager.get(component).bind(function (focused) {\n return menuConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$3 = function (component, menuConfig, _state) {\n descendant$1(component.element, menuConfig.selector).each(function (first) {\n menuConfig.focusManager.set(component, first);\n });\n };\n var moveUp$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveDown$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var fireShiftTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move(moveUp$1)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var fireTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move(moveDown$1)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var getKeydownRules$4 = constant([\n rule(inSet(UP), move(moveUp$1)),\n rule(inSet(DOWN), move(moveDown$1)),\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$5),\n rule(inSet(SPACE), execute$5)\n ]);\n var getKeyupRules$4 = constant([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$8, NoState.init, getKeydownRules$4, getKeyupRules$4, function () {\n return Optional.some(focusIn$3);\n });\n\n var schema$9 = [\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$1('stopSpaceKeyup', false),\n option('focusIn')\n ];\n var getKeydownRules$5 = function (component, simulatedEvent, specialInfo) {\n return [\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 rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n };\n var getKeyupRules$5 = function (component, simulatedEvent, specialInfo) {\n return specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var SpecialType = typical(schema$9, NoState.init, getKeydownRules$5, getKeyupRules$5, function (specialInfo) {\n return specialInfo.focusIn;\n });\n\n var acyclic = AcyclicType.schema();\n var cyclic = CyclicType.schema();\n var flow = FlowType.schema();\n var flatgrid$1 = FlatgridType.schema();\n var matrix = MatrixType.schema();\n var execution = ExecutionType.schema();\n var menu = MenuType.schema();\n var 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$1,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n var isFlatgridState = function (keyState) {\n return hasNonNullableKey(keyState, 'setGridSize');\n };\n var Keying = createModes$1({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: function (keyingConfig, keyingState) {\n var handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: function (component, keyConfig, keyState) {\n keyConfig.sendFocusIn(keyConfig).fold(function () {\n component.getSystem().triggerFocus(component.element, component.element);\n }, function (sendFocusIn) {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: function (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 var set$5 = function (component, replaceConfig, replaceState, data) {\n preserve(function () {\n var newChildren = map(data, component.getSystem().build);\n replaceChildren(component, newChildren);\n }, component.element);\n };\n var insert = function (component, replaceConfig, insertion, childSpec) {\n var child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n var append$2 = function (component, replaceConfig, replaceState, appendee) {\n insert(component, replaceConfig, append, appendee);\n };\n var prepend$1 = function (component, replaceConfig, replaceState, prependee) {\n insert(component, replaceConfig, prepend, prependee);\n };\n var remove$7 = function (component, replaceConfig, replaceState, removee) {\n var children = contents(component);\n var foundChild = find(children, function (child) {\n return eq$1(removee.element, child.element);\n });\n foundChild.each(detach);\n };\n var contents = function (component, _replaceConfig) {\n return component.components();\n };\n var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {\n var children = contents(component);\n return Optional.from(children[replaceeIndex]).map(function (replacee) {\n remove$7(component, replaceConfig, replaceState, replacee);\n replacer.each(function (r) {\n insert(component, replaceConfig, function (p, c) {\n appendAt(p, c, replaceeIndex);\n }, r);\n });\n return replacee;\n });\n };\n var replaceBy = function (component, replaceConfig, replaceState, replaceePred, replacer) {\n var children = contents(component);\n return findIndex(children, replaceePred).bind(function (replaceeIndex) {\n return replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer);\n });\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append$2,\n prepend: prepend$1,\n remove: remove$7,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$5,\n contents: contents\n });\n\n var Replacing = create$1({\n fields: [],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n var events$4 = function (name, eventHandlers) {\n var events = derive(eventHandlers);\n return create$1({\n fields: [strict$1('enabled')],\n name: name,\n active: { events: constant(events) }\n });\n };\n var config = function (name, eventHandlers) {\n var me = events$4(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me: me,\n configAsRaw: constant({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n var focus$2 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n focus$1(component.element);\n focusConfig.onFocus(component);\n }\n };\n var blur$1 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n blur(component.element);\n }\n };\n var isFocused = function (component) {\n return hasFocus(component.element);\n };\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur$1,\n isFocused: isFocused\n });\n\n var exhibit$1 = function (base, focusConfig) {\n var mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$6(mod);\n };\n var events$5 = function (focusConfig) {\n return derive([run(focus(), function (component, simulatedEvent) {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run(mousedown(), function (_, simulatedEvent) {\n simulatedEvent.event.prevent();\n })] : []));\n };\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$1,\n events: events$5\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted$1('stopMousedown', false),\n defaulted$1('ignore', false)\n ];\n\n var Focusing = create$1({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n var SetupBehaviourCellState = function (initialState) {\n var init = function () {\n var cell = Cell(initialState);\n var get = function () {\n return cell.get();\n };\n var set = function (newState) {\n return cell.set(newState);\n };\n var clear = function () {\n return cell.set(initialState);\n };\n var readState = function () {\n return cell.get();\n };\n return {\n get: get,\n set: set,\n clear: clear,\n readState: readState\n };\n };\n return { init: init };\n };\n\n var updateAriaState = function (component, toggleConfig, toggleState) {\n var ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n var updateClass = function (component, toggleConfig, toggleState) {\n toggleConfig.toggleClass.each(function (toggleClass) {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$4(component.element, toggleClass);\n }\n });\n };\n var toggle = function (component, toggleConfig, toggleState) {\n set$6(component, toggleConfig, toggleState, !toggleState.get());\n };\n var on$1 = function (component, toggleConfig, toggleState) {\n toggleState.set(true);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var off = function (component, toggleConfig, toggleState) {\n toggleState.set(false);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var set$6 = function (component, toggleConfig, toggleState, state) {\n var action = state ? on$1 : off;\n action(component, toggleConfig, toggleState);\n };\n var isOn = function (component, toggleConfig, toggleState) {\n return toggleState.get();\n };\n var onLoad$4 = function (component, toggleConfig, toggleState) {\n set$6(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$4,\n toggle: toggle,\n isOn: isOn,\n on: on$1,\n off: off,\n set: set$6\n });\n\n var exhibit$2 = function () {\n return nu$6({});\n };\n var events$6 = function (toggleConfig, toggleState) {\n var execute = executeEvent(toggleConfig, toggleState, toggle);\n var load = loadEvent(toggleConfig, toggleState, onLoad$4);\n return derive(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2,\n events: events$6\n });\n\n var updatePressed = function (component, ariaInfo, status) {\n set$1(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n var updateSelected = function (component, ariaInfo, status) {\n set$1(component.element, 'aria-selected', status);\n };\n var updateChecked = function (component, ariaInfo, status) {\n set$1(component.element, 'aria-checked', status);\n };\n var updateExpanded = function (component, ariaInfo, status) {\n set$1(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted$1('selected', false),\n option('toggleClass'),\n defaulted$1('toggleOnExecute', true),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted$1('syncWithExpanded', false),\n output('update', updatePressed)\n ],\n checked: [output('update', updateChecked)],\n expanded: [output('update', updateExpanded)],\n selected: [output('update', updateSelected)],\n none: [output('update', noop)]\n }))\n ];\n\n var Toggling = create$1({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n var pointerEvents = function () {\n var onClick = function (component, simulatedEvent) {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run(click(), onClick),\n run(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n var events$7 = function (optAction) {\n var executeHandler = function (action) {\n return runOnExecute(function (component, simulatedEvent) {\n action(component);\n simulatedEvent.stop();\n });\n };\n return derive(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n var hoverEvent = 'alloy.item-hover';\n var focusEvent = 'alloy.item-focus';\n var onHover = function (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: item });\n }\n };\n var onFocus = function (item) {\n emitWith(item, focusEvent, { item: item });\n };\n var hover = constant(hoverEvent);\n var focus$3 = constant(focusEvent);\n\n var builder = function (detail) {\n return {\n dom: detail.dom,\n domModification: __assign(__assign({}, detail.domModification), { attributes: __assign(__assign(__assign({ 'role': detail.toggling.isSome() ? 'menuitemcheckbox' : 'menuitem' }, detail.domModification.attributes), { 'aria-haspopup': detail.hasSubmenu }), detail.hasSubmenu ? { 'aria-expanded': false } : {}) }),\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, function (tConfig) {\n return Toggling.config(__assign({ aria: { mode: 'checked' } }, tConfig));\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: function (component) {\n onFocus(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', __spreadArrays(pointerEvents(), [\n run(mouseover(), onHover),\n run(focusItem(), Focusing.focus)\n ]))\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n };\n };\n var schema$a = [\n strict$1('data'),\n strict$1('components'),\n strict$1('dom'),\n defaulted$1('hasSubmenu', false),\n option('toggling'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted$1('ignoreFocus', false),\n defaulted$1('domModification', {}),\n output('builder', builder),\n defaulted$1('eventOrder', {})\n ];\n\n var builder$1 = function (detail) {\n return {\n dom: detail.dom,\n components: detail.components,\n events: derive([stopper(focusItem())])\n };\n };\n var schema$b = [\n strict$1('dom'),\n strict$1('components'),\n output('builder', builder$1)\n ];\n\n var owner$2 = constant('item-widget');\n var parts = constant([required({\n name: 'widget',\n overrides: function (detail) {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_component) {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n var builder$2 = function (detail) {\n var subs = substitutes(owner$2(), detail, parts());\n var components$1 = components(owner$2(), detail, subs.internals());\n var focusWidget = function (component) {\n return getPart(component, detail, 'widget').map(function (widget) {\n Keying.focusIn(widget);\n return widget;\n });\n };\n var onHorizontalArrow = function (component, simulatedEvent) {\n return inside(simulatedEvent.event.target) ? Optional.none() : function () {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }();\n };\n return {\n dom: detail.dom,\n components: components$1,\n domModification: detail.domModification,\n events: derive([\n runOnExecute(function (component, simulatedEvent) {\n focusWidget(component).each(function (_widget) {\n simulatedEvent.stop();\n });\n }),\n run(mouseover(), onHover),\n run(focusItem(), function (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: function (component) {\n onFocus(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? function (component) {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: function (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 var schema$c = [\n strict$1('uid'),\n strict$1('data'),\n strict$1('components'),\n strict$1('dom'),\n defaulted$1('autofocus', false),\n defaulted$1('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted$1('domModification', {}),\n defaultUidsSchema(parts()),\n output('builder', builder$2)\n ];\n\n var itemSchema$1 = choose$1('type', {\n widget: schema$c,\n item: schema$a,\n separator: schema$b\n });\n var configureGrid = function (detail, movementInfo) {\n return {\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 };\n var configureMatrix = function (detail, movementInfo) {\n return {\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n focusManager: detail.focusManager\n };\n };\n var configureMenu = function (detail, movementInfo) {\n return {\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n };\n };\n var parts$1 = constant([group({\n factory: {\n sketch: function (spec) {\n var itemInfo = asRawOrDie('menu.spec item', itemSchema$1, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: function (detail, u) {\n return u.hasOwnProperty('uid') ? u : __assign(__assign({}, u), { uid: generate$2('item') });\n },\n overrides: function (detail, u) {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n var schema$d = constant([\n strict$1('value'),\n strict$1('items'),\n strict$1('dom'),\n strict$1('components'),\n defaulted$1('eventOrder', {}),\n field$1('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('config', configureGrid)\n ],\n matrix: [\n output('config', configureMatrix),\n strict$1('rowSelector')\n ],\n menu: [\n defaulted$1('moveOnTab', true),\n output('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted$1('fakeFocus', false),\n defaulted$1('focusManager', dom()),\n onHandler('onHighlight')\n ]);\n\n var focus$4 = constant('alloy.menu-focus');\n\n var make$1 = function (detail, components, _spec, _externals) {\n return {\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 }),\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([\n run(focus$3(), function (menu, simulatedEvent) {\n var event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(function (item) {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus$4(), {\n menu: menu,\n item: item\n });\n });\n }),\n run(hover(), function (menu, simulatedEvent) {\n var item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n })\n ]),\n components: components,\n eventOrder: detail.eventOrder,\n domModification: { attributes: { role: 'menu' } }\n };\n };\n\n var Menu = composite$1({\n name: 'Menu',\n configFields: schema$d(),\n partFields: parts$1(),\n factory: make$1\n });\n\n var transpose = function (obj) {\n return tupleMap(obj, function (v, k) {\n return {\n k: v,\n v: k\n };\n });\n };\n var trace = function (items, byItem, byMenu, finish) {\n return get$1(byMenu, finish).bind(function (triggerItem) {\n return get$1(items, triggerItem).bind(function (triggerMenu) {\n var rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n });\n }).getOr([]);\n };\n var generate$5 = function (menus, expansions) {\n var items = {};\n each$1(menus, function (menuItems, menu) {\n each(menuItems, function (item) {\n items[item] = menu;\n });\n });\n var byItem = expansions;\n var byMenu = transpose(expansions);\n var menuPaths = map$2(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map$2(items, function (menu) {\n return get$1(menuPaths, menu).getOr([menu]);\n });\n };\n\n var init$3 = function () {\n var expansions = Cell({});\n var menus = Cell({});\n var paths = Cell({});\n var primary = Cell(Optional.none());\n var directory = Cell({});\n var clear = function () {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.set(Optional.none());\n };\n var isClear = function () {\n return primary.get().isNone();\n };\n var setMenuBuilt = function (menuName, built) {\n var _a;\n menus.set(__assign(__assign({}, menus.get()), (_a = {}, _a[menuName] = {\n type: 'prepared',\n menu: built\n }, _a)));\n };\n var setContents = function (sPrimary, sMenus, sExpansions, dir) {\n primary.set(Optional.some(sPrimary));\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n var sPaths = generate$5(dir, sExpansions);\n paths.set(sPaths);\n };\n var getTriggeringItem = function (menuValue) {\n return find$1(expansions.get(), function (v, _k) {\n return v === menuValue;\n });\n };\n var getTriggerData = function (menuValue, getItemByValue, path) {\n return getPreparedMenu(menuValue).bind(function (menu) {\n return getTriggeringItem(menuValue).bind(function (triggeringItemValue) {\n return getItemByValue(triggeringItemValue).map(function (triggeredItem) {\n return {\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n };\n });\n });\n });\n };\n var getTriggeringPath = function (itemValue, getItemByValue) {\n var extraPath = filter(lookupItem(itemValue).toArray(), function (menuValue) {\n return getPreparedMenu(menuValue).isSome();\n });\n return get$1(paths.get(), itemValue).bind(function (path) {\n var revPath = reverse(extraPath.concat(path));\n var triggers = bind(revPath, function (menuValue, menuIndex) {\n return getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(function () {\n return primary.get().is(menuValue) ? [] : [Optional.none()];\n }, function (data) {\n return [Optional.some(data)];\n });\n });\n return sequence(triggers);\n });\n };\n var expand = function (itemValue) {\n return get$1(expansions.get(), itemValue).map(function (menu) {\n var current = get$1(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n };\n var collapse = function (itemValue) {\n return get$1(paths.get(), itemValue).bind(function (path) {\n return path.length > 1 ? Optional.some(path.slice(1)) : Optional.none();\n });\n };\n var refresh = function (itemValue) {\n return get$1(paths.get(), itemValue);\n };\n var getPreparedMenu = function (menuValue) {\n return lookupMenu(menuValue).bind(extractPreparedMenu);\n };\n var lookupMenu = function (menuValue) {\n return get$1(menus.get(), menuValue);\n };\n var lookupItem = function (itemValue) {\n return get$1(expansions.get(), itemValue);\n };\n var otherMenus = function (path) {\n var menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n var getPrimary = function () {\n return primary.get().bind(getPreparedMenu);\n };\n var getMenus = function () {\n return menus.get();\n };\n return {\n setMenuBuilt: setMenuBuilt,\n setContents: setContents,\n expand: expand,\n refresh: refresh,\n collapse: collapse,\n lookupMenu: lookupMenu,\n lookupItem: lookupItem,\n otherMenus: otherMenus,\n getPrimary: getPrimary,\n getMenus: getMenus,\n clear: clear,\n isClear: isClear,\n getTriggeringPath: getTriggeringPath\n };\n };\n var extractPreparedMenu = function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n };\n var LayeredState = {\n init: init$3,\n extractPreparedMenu: extractPreparedMenu\n };\n\n var make$2 = function (detail, _rawUiSpec) {\n var submenuParentItems = Cell(Optional.none());\n var buildMenus = function (container, primaryName, menus) {\n return map$2(menus, function (spec, name) {\n var makeSketch = function () {\n return Menu.sketch(__assign(__assign({}, spec), {\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: detail.onHighlight,\n focusManager: detail.fakeFocus ? highlights() : dom()\n }));\n };\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n };\n var layeredState = LayeredState.init();\n var setup = function (container) {\n var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n var directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n var getItemValue = function (item) {\n return Representing.getValue(item).value;\n };\n var getItemByValue = function (_container, menus, itemValue) {\n return findMap(menus, function (menu) {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n var candidates = Highlighting.getCandidates(menu);\n return find(candidates, function (c) {\n return getItemValue(c) === itemValue;\n });\n });\n };\n var toDirectory = function (_container) {\n return map$2(detail.data.menus, function (data, _menuName) {\n return bind(data.items, function (item) {\n return item.type === 'separator' ? [] : [item.data.value];\n });\n });\n };\n var setActiveMenu = function (container, menu) {\n Highlighting.highlight(container, menu);\n Highlighting.getHighlighted(menu).orThunk(function () {\n return Highlighting.getFirst(menu);\n }).each(function (item) {\n dispatch(container, item.element, focusItem());\n });\n };\n var getMenus = function (state, menuValues) {\n return cat(map(menuValues, function (mv) {\n return state.lookupMenu(mv).bind(function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n });\n }));\n };\n var closeOthers = function (container, state, path) {\n var others = getMenus(state, state.otherMenus(path));\n each(others, function (o) {\n remove$5(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n var getSubmenuParents = function (container) {\n return submenuParentItems.get().getOrThunk(function () {\n var r = {};\n var items = descendants(container.element, '.' + detail.markers.item);\n var parentItems = filter(items, function (i) {\n return get$3(i, 'aria-haspopup') === 'true';\n });\n each(parentItems, function (i) {\n container.getSystem().getByDom(i).each(function (itemComp) {\n var key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(Optional.some(r));\n return r;\n });\n };\n var updateAriaExpansions = function (container, path) {\n var parentItems = getSubmenuParents(container);\n each$1(parentItems, function (v, k) {\n var expanded = contains(path, k);\n set$1(v.element, 'aria-expanded', expanded);\n });\n };\n var updateMenuPath = function (container, state, path) {\n return Optional.from(path[0]).bind(function (latestMenuName) {\n return state.lookupMenu(latestMenuName).bind(function (menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n var activeMenu = menuPrep.menu;\n var rest = getMenus(state, path.slice(1));\n each(rest, function (r) {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade$1(activeMenu));\n }\n remove$5(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenu(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n });\n });\n };\n var ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n var buildIfRequired = function (container, menuName, menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n var menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n var expandRight = function (container, item, decision) {\n if (decision === void 0) {\n decision = ExpandHighlightDecision.HighlightSubmenu;\n }\n var value = getItemValue(item);\n return layeredState.expand(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(function (menuName) {\n return layeredState.lookupMenu(menuName).bind(function (activeMenuPrep) {\n var activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade$1(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 var collapseLeft = function (container, item) {\n var value = getItemValue(item);\n return layeredState.collapse(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(function (activeMenu) {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n var updateView = function (container, item) {\n var value = getItemValue(item);\n return layeredState.refresh(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n var onRight = function (container, item) {\n return inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n };\n var onLeft = function (container, item) {\n return inside(item.element) ? Optional.none() : collapseLeft(container, item);\n };\n var onEscape = function (container, item) {\n return collapseLeft(container, item).orThunk(function () {\n return detail.onEscape(container, item).map(function () {\n return container;\n });\n });\n };\n var keyOnItem = function (f) {\n return function (container, simulatedEvent) {\n return closest$3(simulatedEvent.getSource(), '.' + detail.markers.item).bind(function (target) {\n return container.getSystem().getByDom(target).toOptional().bind(function (item) {\n return f(container, item).map(always);\n });\n });\n };\n };\n var events = derive([\n run(focus$4(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(function () {\n var menu = simulatedEvent.event.menu;\n Highlighting.highlight(sandbox, menu);\n var value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(function (path) {\n return closeOthers(sandbox, layeredState, path);\n });\n });\n }),\n runOnExecute(function (component, simulatedEvent) {\n var target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(function (item) {\n var itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(function () {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached(function (container, _simulatedEvent) {\n setup(container).each(function (primary) {\n Replacing.append(container, premade$1(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightImmediately) {\n setActiveMenu(container, primary);\n }\n });\n })\n ].concat(detail.navigateOnHover ? [run(hover(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event.item;\n updateView(sandbox, item);\n expandRight(sandbox, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(sandbox, item);\n })] : []));\n var getActiveItem = function (container) {\n return Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n };\n var collapseMenuApi = function (container) {\n getActiveItem(container).each(function (currentItem) {\n collapseLeft(container, currentItem);\n });\n };\n var highlightPrimary = function (container) {\n layeredState.getPrimary().each(function (primary) {\n setActiveMenu(container, primary);\n });\n };\n var extractMenuFromContainer = function (container) {\n return Optional.from(container.components()[0]).filter(function (comp) {\n return get$3(comp.element, 'role') === 'menu';\n });\n };\n var repositionMenus = function (container) {\n var maybeActivePrimary = layeredState.getPrimary().bind(function (primary) {\n return getActiveItem(container).bind(function (currentItem) {\n var itemValue = getItemValue(currentItem);\n var allMenus = values(layeredState.getMenus());\n var preparedMenus = cat(map(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, function (v) {\n return getItemByValue(container, preparedMenus, v);\n });\n }).map(function (triggeringPath) {\n return {\n primary: primary,\n triggeringPath: triggeringPath\n };\n });\n });\n maybeActivePrimary.fold(function () {\n extractMenuFromContainer(container).each(function (primaryMenu) {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, function (_a) {\n var primary = _a.primary, triggeringPath = _a.triggeringPath;\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n var apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary: highlightPrimary,\n repositionMenus: 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: function (container, _keyInfo) {\n layeredState.getPrimary().each(function (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: function (container) {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis: apis,\n events: events\n };\n };\n var collapseItem = constant('collapse-item');\n\n var tieredData = function (primary, menus, expansions) {\n return {\n primary: primary,\n menus: menus,\n expansions: expansions\n };\n };\n var singleData = function (name, menu) {\n return {\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n };\n };\n var collapseItem$1 = function (text) {\n return {\n value: generate$1(collapseItem()),\n meta: { text: text }\n };\n };\n var tieredMenu = single$2({\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$1('highlightImmediately', true),\n strictObjOf('data', [\n strict$1('primary'),\n strict$1('menus'),\n strict$1('expansions')\n ]),\n defaulted$1('fakeFocus', false),\n onHandler('onHighlight'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n strict$1('dom'),\n defaulted$1('navigateOnHover', true),\n defaulted$1('stayInDom', false),\n field$1('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted$1('eventOrder', {})\n ],\n apis: {\n collapseMenu: function (apis, tmenu) {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: function (apis, tmenu) {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: function (apis, tmenu) {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$2,\n extraApis: {\n tieredData: tieredData,\n singleData: singleData,\n collapseItem: collapseItem$1\n }\n });\n\n var makeMenu = function (detail, menuSandbox, anchor, menuSpec, getBounds) {\n var lazySink = function () {\n return detail.lazySink(menuSandbox);\n };\n var layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: function () {\n return belowOrAbove();\n },\n onRtl: function () {\n return belowOrAboveRtl();\n }\n }\n } : {};\n var isFirstTierSubmenu = function (triggeringPaths) {\n return triggeringPaths.length === 2;\n };\n var getSubmenuLayouts = function (triggeringPaths) {\n return isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n };\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightImmediately: menuSpec.menu.highlightImmediately,\n onEscape: function () {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(function (handler) {\n return handler(menuSandbox);\n });\n return Optional.some(true);\n },\n onExecute: function () {\n return Optional.some(true);\n },\n onOpenMenu: function (tmenu, menu) {\n Positioning.positionWithinBounds(lazySink().getOrDie(), anchor, menu, getBounds());\n },\n onOpenSubmenu: function (tmenu, item, submenu, triggeringPaths) {\n var sink = lazySink().getOrDie();\n Positioning.position(sink, __assign({\n anchor: 'submenu',\n item: item\n }, getSubmenuLayouts(triggeringPaths)), submenu);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, anchor, primaryMenu, getBounds());\n each(submenuTriggers, function (st) {\n var submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, __assign({\n anchor: 'submenu',\n item: st.triggeringItem\n }, submenuLayouts), st.triggeredMenu);\n });\n }\n });\n };\n var factory = function (detail, spec) {\n var isPartOfRelated = function (sandbox, queryElem) {\n var related = detail.getRelated(sandbox);\n return related.exists(function (rel) {\n return isPartOf(rel, queryElem);\n });\n };\n var setContent = function (sandbox, thing) {\n Sandboxing.setContent(sandbox, thing);\n };\n var showAt = function (sandbox, anchor, thing) {\n showWithin(sandbox, anchor, thing, Optional.none());\n };\n var showWithin = function (sandbox, anchor, thing, boxElement) {\n showWithinBounds(sandbox, anchor, thing, function () {\n return boxElement.map(function (elem) {\n return box(elem);\n });\n });\n };\n var showWithinBounds = function (sandbox, anchor, thing, getBounds) {\n var sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, function () {\n return Positioning.positionWithinBounds(sink, anchor, sandbox, getBounds());\n });\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n anchor: anchor,\n getBounds: getBounds\n }));\n };\n var showMenuAt = function (sandbox, anchor, menuSpec) {\n showMenuWithinBounds(sandbox, anchor, menuSpec, function () {\n return Optional.none();\n });\n };\n var showMenuWithinBounds = function (sandbox, anchor, menuSpec, getBounds) {\n var menu = makeMenu(detail, sandbox, anchor, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu: menu\n }));\n };\n var hide = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n var getContent = function (sandbox) {\n return Sandboxing.getState(sandbox);\n };\n var reposition = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(function (state) {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.repositionMenus(tmenu);\n });\n break;\n case 'position':\n var sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, state.anchor, sandbox, state.getBounds());\n break;\n }\n });\n }\n };\n var apis = {\n setContent: setContent,\n showAt: showAt,\n showWithin: showWithin,\n showWithinBounds: showWithinBounds,\n showMenuAt: showMenuAt,\n showMenuWithinBounds: showMenuWithinBounds,\n hide: hide,\n getContent: getContent,\n reposition: 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: function (sandbox, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: function (sandbox) {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: function (sandbox) {\n detail.onShow(sandbox);\n },\n onClose: function (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: __assign(__assign({}, receivingChannel(__assign({ isExtraPart: spec.isExtraPart }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel$1(__assign(__assign({}, detail.fireRepositionEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})), { doReposition: reposition })))\n })\n ]),\n eventOrder: detail.eventOrder,\n apis: apis\n };\n };\n var InlineView = single$2({\n name: 'InlineView',\n configFields: [\n strict$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field$1('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted$1('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted$1('event', repositionRequested())]),\n defaulted$1('getRelated', Optional.none),\n defaulted$1('isExtraPart', never),\n defaulted$1('eventOrder', Optional.none)\n ],\n factory: factory,\n apis: {\n showAt: function (apis, component, anchor, thing) {\n apis.showAt(component, anchor, thing);\n },\n showWithin: function (apis, component, anchor, thing, boxElement) {\n apis.showWithin(component, anchor, thing, boxElement);\n },\n showWithinBounds: function (apis, component, anchor, thing, bounds) {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: function (apis, component, anchor, menuSpec) {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: function (apis, component, anchor, menuSpec, bounds) {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: function (apis, component) {\n apis.hide(component);\n },\n isOpen: function (apis, component) {\n return apis.isOpen(component);\n },\n getContent: function (apis, component) {\n return apis.getContent(component);\n },\n setContent: function (apis, component, thing) {\n apis.setContent(component, thing);\n },\n reposition: function (apis, component) {\n apis.reposition(component);\n }\n }\n });\n\n var westEdgeX$1 = function (anchor) {\n return anchor.x;\n };\n var middleX$1 = function (anchor, element) {\n return anchor.x + anchor.width / 2 - element.width / 2;\n };\n var eastEdgeX$1 = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY$2 = function (anchor) {\n return anchor.y;\n };\n var southY$2 = function (anchor, element) {\n return anchor.y + anchor.height - element.height;\n };\n var southeast$3 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX$1(anchor, element), southY$2(anchor, element), bubbles.innerSoutheast(), northwest(), boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), 'layout-inner-se');\n };\n var southwest$3 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX$1(anchor), southY$2(anchor, element), bubbles.innerSouthwest(), northeast(), boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), 'layout-inner-sw');\n };\n var northeast$3 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX$1(anchor, element), northY$2(anchor), bubbles.innerNortheast(), southwest(), boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), 'layout-inner-ne');\n };\n var northwest$3 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX$1(anchor), northY$2(anchor), bubbles.innerNorthwest(), southeast(), boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), 'layout-inner-nw');\n };\n var north$3 = function (anchor, element, bubbles) {\n return nu$7(middleX$1(anchor, element), northY$2(anchor), bubbles.innerNorth(), south(), boundsRestriction(anchor, { top: 2 }), 'layout-inner-n');\n };\n var south$3 = function (anchor, element, bubbles) {\n return nu$7(middleX$1(anchor, element), southY$2(anchor, element), bubbles.innerSouth(), north(), boundsRestriction(anchor, { bottom: 3 }), 'layout-inner-s');\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var factory$1 = function (detail) {\n var events = events$7(detail.action);\n var tag = detail.dom.tag;\n var lookupAttr = function (attr) {\n return get$1(detail.dom, 'attributes').bind(function (attrs) {\n return get$1(attrs, attr);\n });\n };\n var getModAttributes = function () {\n if (tag === 'button') {\n var type = lookupAttr('type').getOr('button');\n var roleAttrs = lookupAttr('role').map(function (role) {\n return { role: role };\n }).getOr({});\n return __assign({ type: type }, roleAttrs);\n } else {\n var role = lookupAttr('role').getOr('button');\n return { role: role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: 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 var Button = single$2({\n name: 'Button',\n factory: factory$1,\n configFields: [\n defaulted$1('uid', undefined),\n strict$1('dom'),\n defaulted$1('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option('action'),\n option('role'),\n defaulted$1('eventOrder', {})\n ]\n });\n\n var record = function (spec) {\n var uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$2('memento');\n var get = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).getOrDie();\n };\n var getOpt = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).toOptional();\n };\n var asSpec = function () {\n return __assign(__assign({}, spec), { uid: uid });\n };\n return {\n get: get,\n getOpt: getOpt,\n asSpec: asSpec\n };\n };\n\n var defaultIcon = function (icons) {\n return Optional.from(icons()['temporary-placeholder']).getOr('!not found!');\n };\n var get$e = function (name, icons) {\n return Optional.from(icons()[name.toLowerCase()]).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getOr = function (name, icons, fallback) {\n return Optional.from(icons()[name.toLowerCase()]).or(fallback).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getFirst$1 = function (names, icons) {\n return findMap(names, function (name) {\n return Optional.from(icons()[name.toLowerCase()]);\n }).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n\n var notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n var factory$2 = function (detail) {\n var memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n var renderPercentBar = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n attributes: { style: 'width: ' + percent + '%' }\n }\n };\n };\n var renderPercentText = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: percent + '%'\n }\n };\n };\n var 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 var updateProgress = function (comp, percent) {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(function (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 var updateText = function (comp, text$1) {\n if (comp.getSystem().isConnected()) {\n var banner = memBannerText.get(comp);\n Replacing.set(banner, [text(text$1)]);\n }\n };\n var apis = {\n updateProgress: updateProgress,\n updateText: updateText\n };\n var iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(function (level) {\n return Optional.from(notificationIconMap[level]);\n }).toArray()\n ]);\n var 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: [{\n dom: {\n tag: 'div',\n classes: ['tox-icon'],\n innerHtml: get$e('close', detail.iconProvider),\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }\n }],\n action: function (comp) {\n detail.onAction(comp);\n }\n }));\n var components = [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: getFirst$1(iconChoices, detail.iconProvider)\n }\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n }\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(function (level) {\n return [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + level\n ];\n }).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n behaviours: derive$1([\n Focusing.config({}),\n config('notification-events', [run(focusin(), function (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: apis\n };\n };\n var Notification = single$2({\n name: 'Notification',\n factory: factory$2,\n configFields: [\n option('level'),\n strict$1('progress'),\n strict$1('icon'),\n strict$1('onAction'),\n strict$1('text'),\n strict$1('iconProvider'),\n strict$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: function (apis, comp, percent) {\n apis.updateProgress(comp, percent);\n },\n updateText: function (apis, comp, text) {\n apis.updateText(comp, text);\n }\n }\n });\n\n function NotificationManagerImpl (editor, extras, uiMothership) {\n var backstage = extras.backstage;\n var getLayoutDirection = function (rel) {\n switch (rel) {\n case 'bc-bc':\n return south$3;\n case 'tc-tc':\n return north$3;\n case 'tc-bc':\n return north$1;\n case 'bc-tc':\n default:\n return south$1;\n }\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n return notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n head(notifications).each(function (firstItem) {\n return firstItem.moveRel(null, 'banner');\n });\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (settings, closeCallback) {\n var hideCloseButton = !settings.closeButton && settings.timeout && (settings.timeout > 0 || settings.timeout < 0);\n var close = function () {\n closeCallback();\n InlineView.hide(notificationWrapper);\n };\n var notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: Optional.from(settings.icon),\n closeButton: !hideCloseButton,\n onAction: close,\n iconProvider: backstage.shared.providers.icons,\n translationProvider: backstage.shared.providers.translate\n }));\n var notificationWrapper = build$1(InlineView.sketch(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container']\n },\n lazySink: extras.backstage.shared.getSink,\n fireDismissalEventInstead: {}\n }, backstage.shared.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} })));\n uiMothership.add(notificationWrapper);\n if (settings.timeout > 0) {\n global$2.setTimeout(function () {\n close();\n }, settings.timeout);\n }\n return {\n close: close,\n moveTo: function (x, y) {\n InlineView.showAt(notificationWrapper, {\n anchor: 'makeshift',\n x: x,\n y: y\n }, premade$1(notification));\n },\n moveRel: function (element, rel) {\n if (rel !== 'banner') {\n var layoutDirection_1 = getLayoutDirection(rel);\n var nodeAnchor = {\n anchor: 'node',\n root: body(),\n node: Optional.some(SugarElement.fromDom(element)),\n layouts: {\n onRtl: function () {\n return [layoutDirection_1];\n },\n onLtr: function () {\n return [layoutDirection_1];\n }\n }\n };\n InlineView.showAt(notificationWrapper, nodeAnchor, premade$1(notification));\n } else {\n InlineView.showAt(notificationWrapper, extras.backstage.shared.anchors.banner(), premade$1(notification));\n }\n },\n text: function (nuText) {\n Notification.updateText(notification, nuText);\n },\n settings: settings,\n getEl: function () {\n return notification.element.dom;\n },\n progressBar: {\n value: function (percent) {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.settings;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer === null) {\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var isBoundary = function (dom, node) {\n return dom.isBlock(node) || contains([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n };\n var repeatLeft = function (dom, node, offset, process, rootNode) {\n var search = global$3(dom, function (node) {\n return isBoundary(dom, node);\n });\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n var autocompleteSelector = '[data-mce-autocompleter]';\n var create$4 = function (editor, range) {\n return detect$4(SugarElement.fromDom(editor.selection.getNode())).getOrThunk(function () {\n var wrapper = SugarElement.fromHtml('', editor.getDoc());\n append(wrapper, SugarElement.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom);\n parent(wrapper).each(function (elm) {\n return elm.dom.normalize();\n });\n last$1(wrapper).map(function (last) {\n editor.selection.setCursorLocation(last.dom, getEnd(last));\n });\n return wrapper;\n });\n };\n var detect$4 = function (elm) {\n return closest$3(elm, autocompleteSelector);\n };\n\n var isValidTextRange = function (rng) {\n return rng.collapsed && rng.startContainer.nodeType === 3;\n };\n var getText = function (rng) {\n return rng.toString().replace(/\\u00A0/g, ' ').replace(/\\uFEFF/g, '');\n };\n var isWhitespace = function (chr) {\n return chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n\n var stripTriggerChar = function (text, triggerCh) {\n return text.substring(triggerCh.length);\n };\n var findChar = function (text, index, ch) {\n var i;\n for (i = index - 1; i >= 0; i--) {\n var char = text.charAt(i);\n if (isWhitespace(char)) {\n return Optional.none();\n }\n if (char === ch) {\n break;\n }\n }\n return Optional.some(i);\n };\n var findStart = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n var findTriggerChIndex = function (element, offset, text) {\n return findChar(text, offset, ch).getOr(offset);\n };\n var root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerChIndex, root).bind(function (spot) {\n var range = initRange.cloneRange();\n range.setStart(spot.container, spot.offset);\n range.setEnd(initRange.endContainer, initRange.endOffset);\n if (range.collapsed) {\n return Optional.none();\n }\n var text = getText(range);\n var triggerCharIndex = text.lastIndexOf(ch);\n if (triggerCharIndex !== 0 || stripTriggerChar(text, ch).length < minChars) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTriggerChar(text, ch),\n range: range,\n triggerChar: ch\n });\n }\n });\n };\n var getContext = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n return detect$4(SugarElement.fromDom(initRange.startContainer)).fold(function () {\n return findStart(dom, initRange, ch, minChars);\n }, function (elm) {\n var range = dom.createRng();\n range.selectNode(elm.dom);\n var text = getText(range);\n return Optional.some({\n range: range,\n text: stripTriggerChar(text, ch),\n triggerChar: ch\n });\n });\n };\n\n var setup = function (api, editor) {\n editor.on('keypress compositionend', api.onKeypress.throttle);\n editor.on('remove', api.onKeypress.cancel);\n var redirectKeyToItem = function (item, e) {\n emitWith(item, keydown(), { raw: e });\n };\n editor.on('keydown', function (e) {\n var getItem = function () {\n return api.getView().bind(Highlighting.getHighlighted);\n };\n if (e.which === 8) {\n api.onKeypress.throttle(e);\n }\n if (api.isActive()) {\n if (e.which === 27) {\n api.cancelIfNecessary();\n }\n if (api.isMenuOpen()) {\n if (e.which === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (e.which === 40) {\n getItem().fold(function () {\n api.getView().each(Highlighting.highlightFirst);\n }, function (item) {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (e.which === 37 || e.which === 38 || e.which === 39) {\n getItem().each(function (item) {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (e.which === 13 || e.which === 38 || e.which === 40) {\n api.cancelIfNecessary();\n }\n }\n }\n });\n editor.on('NodeChange', function (e) {\n if (api.isActive() && !api.isProcessingAction() && detect$4(SugarElement.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n var AutocompleterEditorEvents = { setup: setup };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var point$1 = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText$1 = function (node) {\n return node.nodeType === TEXT;\n };\n var isElement$1 = function (node) {\n return node.nodeType === ELEMENT;\n };\n var toLast = function (node) {\n if (isText$1(node)) {\n return point$1(node, node.data.length);\n } else {\n var children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point$1(node, children.length);\n }\n };\n var toLeaf = function (node, offset) {\n var children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement$1(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point$1(node, offset);\n }\n };\n\n var isPreviousCharContent = function (dom, leaf) {\n return repeatLeft(dom, leaf.container, leaf.offset, function (element, offset) {\n return offset === 0 ? -1 : offset;\n }, dom.getRoot()).filter(function (spot) {\n var char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n var isStartOfWord = function (dom) {\n return function (rng) {\n var leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n };\n var getTriggerContext = function (dom, initRange, database) {\n return findMap(database.triggerChars, function (ch) {\n return getContext(dom, initRange, ch);\n });\n };\n var lookup = function (editor, getDatabase) {\n var database = getDatabase();\n var rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(function (context) {\n return lookupWithContext(editor, getDatabase, context);\n });\n };\n var lookupWithContext = function (editor, getDatabase, context, fetchOptions) {\n if (fetchOptions === void 0) {\n fetchOptions = {};\n }\n var database = getDatabase();\n var rng = editor.selection.getRng();\n var startText = rng.startContainer.nodeValue;\n var autocompleters = filter(database.lookupByChar(context.triggerChar), function (autocompleter) {\n return context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(function () {\n return isStartOfWord(editor.dom);\n })(context.range, startText, context.text);\n });\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n var lookupData = global$4.all(map(autocompleters, function (ac) {\n var fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(function (results) {\n return {\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n };\n });\n }));\n return Optional.some({\n lookupData: lookupData,\n context: context\n });\n };\n\n var separatorMenuItemSchema = objOf([\n strictString('type'),\n optionString('text')\n ]);\n var createSeparatorMenuItem = function (spec) {\n return asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n };\n\n var autocompleterItemSchema = objOf([\n defaulted$1('type', 'autocompleteitem'),\n defaulted$1('active', false),\n defaulted$1('disabled', false),\n defaulted$1('meta', {}),\n strictString('value'),\n optionString('text'),\n optionString('icon')\n ]);\n var autocompleterSchema = objOf([\n strictString('type'),\n strictString('ch'),\n defaultedNumber('minChars', 1),\n defaulted$1('columns', 1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n strictFunction('fetch'),\n strictFunction('onAction'),\n defaultedArrayOf('highlightOn', [], string)\n ]);\n var createSeparatorItem = function (spec) {\n return asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n };\n var createAutocompleterItem = function (spec) {\n return asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n };\n var createAutocompleter = function (spec) {\n return asRaw('Autocompleter', autocompleterSchema, spec);\n };\n\n var baseToolbarButtonFields = [\n defaultedBoolean('disabled', false),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n var toolbarButtonSchema = objOf([\n strictString('type'),\n strictFunction('onAction')\n ].concat(baseToolbarButtonFields));\n var createToolbarButton = function (spec) {\n return asRaw('toolbarbutton', toolbarButtonSchema, spec);\n };\n\n var baseToolbarToggleButtonFields = [defaultedBoolean('active', false)].concat(baseToolbarButtonFields);\n var toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n strictString('type'),\n strictFunction('onAction')\n ]));\n var createToggleButton = function (spec) {\n return asRaw('ToggleButton', toggleButtonSchema, spec);\n };\n\n var 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 var contextButtonFields = baseToolbarButtonFields.concat([\n defaulted$1('type', 'contextformbutton'),\n defaulted$1('primary', false),\n strictFunction('onAction'),\n state$1('original', identity)\n ]);\n var contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaulted$1('type', 'contextformbutton'),\n defaulted$1('primary', false),\n strictFunction('onAction'),\n state$1('original', identity)\n ]);\n var launchButtonFields = baseToolbarButtonFields.concat([defaulted$1('type', 'contextformbutton')]);\n var launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaulted$1('type', 'contextformtogglebutton')]);\n var toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n var contextFormSchema = objOf([\n defaulted$1('type', 'contextform'),\n defaultedFunction('initValue', function () {\n return '';\n }),\n optionString('label'),\n strictArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n var createContextForm = function (spec) {\n return asRaw('ContextForm', contextFormSchema, spec);\n };\n\n var contextToolbarSchema = objOf([\n defaulted$1('type', 'contexttoolbar'),\n strictString('items')\n ].concat(contextBarFields));\n var createContextToolbar = function (spec) {\n return asRaw('ContextToolbar', contextToolbarSchema, spec);\n };\n\n var stringArray = function (a) {\n var all = {};\n each(a, function (key) {\n all[key] = {};\n });\n return keys(all);\n };\n\n var register = function (editor) {\n var popups = editor.ui.registry.getAll().popups;\n var dataset = map$2(popups, function (popup) {\n return createAutocompleter(popup).fold(function (err) {\n throw new Error(formatError(err));\n }, function (x) {\n return x;\n });\n });\n var triggerChars = stringArray(mapToArray(dataset, function (v) {\n return v.ch;\n }));\n var datasetValues = values(dataset);\n var lookupByChar = function (ch) {\n return filter(datasetValues, function (dv) {\n return dv.ch === ch;\n });\n };\n return {\n dataset: dataset,\n triggerChars: triggerChars,\n lookupByChar: lookupByChar\n };\n };\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 var navClass = 'tox-menu-nav__js';\n var selectableClass = 'tox-collection__item';\n var colorClass = 'tox-swatch';\n var presetClasses = {\n normal: navClass,\n color: colorClass\n };\n var tickedClass = 'tox-collection__item--enabled';\n var groupHeadingClass = 'tox-collection__group-heading';\n var iconClass = 'tox-collection__item-icon';\n var textClass = 'tox-collection__item-label';\n var accessoryClass = 'tox-collection__item-accessory';\n var caretClass = 'tox-collection__item-caret';\n var checkmarkClass = 'tox-collection__item-checkmark';\n var activeClass = 'tox-collection__item--active';\n var iconClassRtl = 'tox-collection__item-icon-rtl';\n var containerClass = 'tox-collection__item-container';\n var containerColumnClass = 'tox-collection__item-container--column';\n var containerRowClass = 'tox-collection__item-container--row';\n var containerAlignRightClass = 'tox-collection__item-container--align-right';\n var containerAlignLeftClass = 'tox-collection__item-container--align-left';\n var containerValignTopClass = 'tox-collection__item-container--valign-top';\n var containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n var containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n var classForPreset = function (presets) {\n return get$1(presetClasses, presets).getOr(navClass);\n };\n\n var forMenu = function (presets) {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n var classes = function (presets) {\n return {\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\n var markers$1 = function (presets) {\n var 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 var dom$1 = function (hasIcons, columns, presets) {\n var 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 var components$1 = [Menu.parts.items({})];\n var part = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n var d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers$1(presets)\n };\n };\n\n var chunk$1 = function (rowDom, numColumns) {\n return function (items) {\n var chunks = chunk(items, numColumns);\n return map(chunks, function (c) {\n return {\n dom: rowDom,\n components: c\n };\n });\n };\n };\n var forSwatch = function (columns) {\n return {\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$1({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n };\n };\n var forToolbar = function (columns) {\n return {\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$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n };\n };\n var preprocessCollection = function (items, isSeparator) {\n var allSplits = [];\n var currentSplit = [];\n each(items, function (item, i) {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has(item.dom, 'innerHtml')) {\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(allSplits, function (s) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n };\n });\n };\n var forCollection = function (columns, initItems, _hasIcons) {\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: [Menu.parts.items({\n preprocess: function (items) {\n if (columns !== 'auto' && columns > 1) {\n return chunk$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(items);\n } else {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n }\n })]\n };\n };\n var forHorizontalCollection = function (initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({\n preprocess: function (items) {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n })]\n };\n };\n\n var menuHasIcons = function (xs) {\n return exists(xs, function (item) {\n return 'icon' in item && item.icon !== undefined;\n });\n };\n var handleError = function (error) {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n var createHorizontalPartialMenuWithAlloyItems = function (value, _hasIcons, items, _columns, _presets) {\n var structure = forHorizontalCollection(items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n };\n var createPartialMenuWithAlloyItems = function (value, hasIcons, items, columns, presets) {\n if (presets === 'color') {\n var structure = forSwatch(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 'auto') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 1) {\n var structure = forCollection(1, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'listpreview' && columns !== 'auto') {\n var structure = forToolbar(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n return {\n value: value,\n dom: dom$1(hasIcons, columns, presets),\n components: components$1,\n items: items\n };\n };\n\n var cardImageFields = [\n strictString('type'),\n strictString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n var cardImageSchema = objOf(cardImageFields);\n\n var cardTextFields = [\n strictString('type'),\n strictString('text'),\n optionString('name'),\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n var cardTextSchema = objOf(cardTextFields);\n\n var itemSchema$2 = valueThunkOf(function () {\n return chooseProcessor('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n });\n });\n var cardContainerSchema = objOf([\n strictString('type'),\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n strictArrayOf('items', itemSchema$2)\n ]);\n\n var commonMenuItemFields = [\n defaultedBoolean('disabled', false),\n optionString('text'),\n optionString('shortcut'),\n field('value', 'value', defaultedThunk(function () {\n return generate$1('menuitem-value');\n }), anyValue$1()),\n defaulted$1('meta', {})\n ];\n\n var cardMenuItemSchema = objOf([\n strictString('type'),\n optionString('label'),\n strictArrayOf('items', itemSchema$2),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop)\n ].concat(commonMenuItemFields));\n var createCardMenuItem = function (spec) {\n return asRaw('cardmenuitem', cardMenuItemSchema, spec);\n };\n\n var choiceMenuItemSchema = objOf([\n strictString('type'),\n defaultedBoolean('active', false),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createChoiceMenuItem = function (spec) {\n return asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n };\n\n var fancyTypes = [\n 'inserttable',\n 'colorswatch'\n ];\n var fancyMenuItemSchema = objOf([\n strictString('type'),\n strictStringEnum('fancytype', fancyTypes),\n defaultedFunction('onAction', noop)\n ]);\n var createFancyMenuItem = function (spec) {\n return asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n };\n\n var menuItemSchema = objOf([\n strictString('type'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createMenuItem = function (spec) {\n return asRaw('menuitem', menuItemSchema, spec);\n };\n\n var nestedMenuItemSchema = objOf([\n strictString('type'),\n strictFunction('getSubmenuItems'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createNestedMenuItem = function (spec) {\n return asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n };\n\n var toggleMenuItemSchema = objOf([\n strictString('type'),\n optionString('icon'),\n defaultedBoolean('active', false),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n strictFunction('onAction')\n ].concat(commonMenuItemFields));\n var createToggleMenuItem = function (spec) {\n return asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n };\n\n var detectSize = function (comp, margin, selectorClass) {\n var descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n var columnLength = findIndex(descendants$1, function (c) {\n var thisTop = c.dom.getBoundingClientRect().top;\n var 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 var namedEvents = function (name, handlers) {\n return derive$1([config(name, handlers)]);\n };\n var unnamedEvents = function (handlers) {\n return namedEvents(generate$1('unnamed-events'), handlers);\n };\n var SimpleBehaviours = {\n namedEvents: namedEvents,\n unnamedEvents: unnamedEvents\n };\n\n var ExclusivityChannel = generate$1('tooltip.exclusive');\n var ShowTooltipEvent = generate$1('tooltip.show');\n var HideTooltipEvent = generate$1('tooltip.hide');\n\n var hideAllExclusive = function (component, _tConfig, _tState) {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n var setComponents = function (component, tConfig, tState, specs) {\n tState.getTooltip().each(function (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 var events$8 = function (tooltipConfig, state) {\n var hide = function (comp) {\n state.getTooltip().each(function (p) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n });\n state.clearTimer();\n };\n var show = function (comp) {\n if (!state.isShowing()) {\n hideAllExclusive(comp);\n var sink = tooltipConfig.lazySink(comp).getOrDie();\n var popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive(tooltipConfig.mode === 'normal' ? [\n run(mouseover(), function (_) {\n emit(comp, ShowTooltipEvent);\n }),\n run(mouseout(), function (_) {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach$1(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, tooltipConfig.anchor(comp), popup);\n }\n };\n return derive(flatten([\n [\n run(ShowTooltipEvent, function (comp) {\n state.resetTimer(function () {\n show(comp);\n }, tooltipConfig.delay);\n }),\n run(HideTooltipEvent, function (comp) {\n state.resetTimer(function () {\n hide(comp);\n }, tooltipConfig.delay);\n }),\n run(receive(), function (comp, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n if (contains(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(function (comp) {\n hide(comp);\n })\n ],\n tooltipConfig.mode === 'normal' ? [\n run(focusin(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run(postBlur(), function (comp) {\n emit(comp, HideTooltipEvent);\n }),\n run(mouseover(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run(mouseout(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ] : [\n run(highlight(), function (comp, _se) {\n emit(comp, ShowTooltipEvent);\n }),\n run(dehighlight(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ]\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var TooltippingSchema = [\n strict$1('lazySink'),\n strict$1('tooltipDom'),\n defaulted$1('exclusive', true),\n defaulted$1('tooltipComponents', []),\n defaulted$1('delay', 300),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight'\n ]),\n defaulted$1('anchor', function (comp) {\n return {\n anchor: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant([\n south$1,\n north$1,\n southeast$1,\n northeast$1,\n southwest$1,\n northwest$1\n ]),\n onRtl: constant([\n south$1,\n north$1,\n southeast$1,\n northeast$1,\n southwest$1,\n northwest$1\n ])\n }\n };\n }),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n var init$4 = function () {\n var timer = Cell(Optional.none());\n var popup = Cell(Optional.none());\n var getTooltip = function () {\n return popup.get();\n };\n var setTooltip = function (comp) {\n popup.set(Optional.some(comp));\n };\n var clearTooltip = function () {\n popup.set(Optional.none());\n };\n var clearTimer = function () {\n timer.get().each(function (t) {\n clearTimeout(t);\n });\n };\n var resetTimer = function (f, delay) {\n clearTimer();\n timer.set(Optional.some(setTimeout(function () {\n f();\n }, delay)));\n };\n var isShowing = function () {\n return popup.get().isSome();\n };\n var readState = constant('not-implemented');\n return nu$5({\n getTooltip: getTooltip,\n isShowing: isShowing,\n setTooltip: setTooltip,\n clearTooltip: clearTooltip,\n clearTimer: clearTimer,\n resetTimer: resetTimer,\n readState: readState\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n var Tooltipping = create$1({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n var escape = function (text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$5 = function (component, disableConfig, disableState) {\n var f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig);\n };\n var hasNative = function (component, config) {\n return config.useNative === true && contains(nativeDisabled, name(component.element));\n };\n var nativeIsDisabled = function (component) {\n return has$1(component.element, 'disabled');\n };\n var nativeDisable = function (component) {\n set$1(component.element, 'disabled', 'disabled');\n };\n var nativeEnable = function (component) {\n remove$1(component.element, 'disabled');\n };\n var ariaIsDisabled = function (component) {\n return get$3(component.element, 'aria-disabled') === 'true';\n };\n var ariaDisable = function (component) {\n set$1(component.element, 'aria-disabled', 'true');\n };\n var ariaEnable = function (component) {\n set$1(component.element, 'aria-disabled', 'false');\n };\n var disable = function (component, disableConfig, _disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n add$2(component.element, disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n var enable = function (component, disableConfig, _disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n remove$4(component.element, disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n var isDisabled = function (component, disableConfig) {\n return hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n };\n var set$7 = function (component, disableConfig, disableState, disabled) {\n var 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$5,\n set: set$7\n });\n\n var exhibit$3 = function (base, disableConfig) {\n return nu$6({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n };\n var events$9 = function (disableConfig, disableState) {\n return derive([\n abort(execute(), function (component, _simulatedEvent) {\n return isDisabled(component, disableConfig);\n }),\n loadEvent(disableConfig, disableState, onLoad$5)\n ]);\n };\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$9\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted$1('useNative', true),\n option('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n var Disabling = create$1({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var getSkinUrl = function (editor) {\n var skin = editor.getParam('skin');\n var skinUrl = editor.getParam('skin_url');\n if (skin !== false) {\n var skinName = skin ? skin : 'oxide';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$7.baseURL + '/skins/ui/' + skinName;\n }\n }\n return skinUrl;\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var isSkinDisabled = function (editor) {\n return editor.getParam('skin') === false;\n };\n var getHeightSetting = function (editor) {\n return editor.getParam('height', Math.max(editor.getElement().offsetHeight, 200));\n };\n var getWidthSetting = function (editor) {\n return editor.getParam('width', global$5.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Optional.from(editor.getParam('min_width')).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Optional.from(editor.getParam('min_height')).filter(isNumber);\n };\n var getMaxWidthSetting = function (editor) {\n return Optional.from(editor.getParam('max_width')).filter(isNumber);\n };\n var getMaxHeightSetting = function (editor) {\n return Optional.from(editor.getParam('max_height')).filter(isNumber);\n };\n var getUserStyleFormats = function (editor) {\n return Optional.from(editor.getParam('style_formats')).filter(isArray);\n };\n var isMergeStyleFormats = function (editor) {\n return editor.getParam('style_formats_merge', false, 'boolean');\n };\n var getLineHeightFormats = function (editor) {\n return editor.getParam('lineheight_formats', '1 1.1 1.2 1.3 1.4 1.5 2', 'string').split(' ');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var isMenubarEnabled = function (editor) {\n return editor.getParam('menubar', true, 'boolean') !== false;\n };\n var isToolbarEnabled = function (editor) {\n var toolbar = editor.getParam('toolbar', true);\n var isToolbarTrue = toolbar === true;\n var isToolbarString = isString(toolbar);\n var isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || isToolbarTrue);\n };\n var getMultipleToolbarsSetting = function (editor) {\n var toolbars = range(9, function (num) {\n return editor.getParam('toolbar' + (num + 1), false, 'string');\n });\n var toolbarArray = filter(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? Optional.some(toolbarArray) : Optional.none();\n };\n var isMultipleToolbars = function (editor) {\n return getMultipleToolbarsSetting(editor).fold(function () {\n var toolbar = editor.getParam('toolbar', [], 'string[]');\n return toolbar.length > 0;\n }, always);\n };\n var ToolbarMode;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode || (ToolbarMode = {})));\n var getToolbarMode = function (editor) {\n return editor.getParam('toolbar_mode', '', 'string');\n };\n var ToolbarLocation;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var getToolbarLocation = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.auto, 'string');\n };\n var isToolbarLocationBottom = function (editor) {\n return getToolbarLocation(editor) === ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var isToolbarPersist = function (editor) {\n return editor.getParam('toolbar_persist', false, 'boolean');\n };\n var fixedContainerElement = function (editor) {\n var selector = fixedContainerSelector(editor);\n return selector.length > 0 && editor.inline ? descendant$1(body(), selector) : Optional.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerElement(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerElement(editor);\n return fixedContainer.getOrThunk(function () {\n return getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement())));\n });\n };\n var isDistractionFree = function (editor) {\n return editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n };\n var isStickyToolbar = function (editor) {\n var isStickyToolbar = editor.getParam('toolbar_sticky', false, 'boolean');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n var isDraggableModal = function (editor) {\n return editor.getParam('draggable_modal', false, 'boolean');\n };\n var getMenus = function (editor) {\n var menu = editor.getParam('menu');\n if (menu) {\n return map$2(menu, function (menu) {\n return __assign(__assign({}, menu), { items: menu.items });\n });\n } else {\n return {};\n }\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var getToolbar = function (editor) {\n return editor.getParam('toolbar', true);\n };\n var getFilePickerCallback = function (editor) {\n return editor.getParam('file_picker_callback');\n };\n var getFilePickerTypes = function (editor) {\n return editor.getParam('file_picker_types');\n };\n var getFileBrowserCallbackTypes = function (editor) {\n return editor.getParam('file_browser_callback_types');\n };\n var noTypeaheadUrls = function (editor) {\n return editor.getParam('typeahead_urls') === false;\n };\n var getAnchorTop = function (editor) {\n return editor.getParam('anchor_top', '#top');\n };\n var getAnchorBottom = function (editor) {\n return editor.getParam('anchor_bottom', '#bottom');\n };\n var getFilePickerValidatorHandler = function (editor) {\n var handler = editor.getParam('file_picker_validator_handler', undefined, 'function');\n if (handler === undefined) {\n return editor.getParam('filepicker_validator_handler', undefined, 'function');\n } else {\n return handler;\n }\n };\n\n var ReadOnlyChannel = 'silver.readonly';\n var ReadOnlyDataSchema = objOf([strictBoolean('readonly')]);\n var broadcastReadonly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n var target = outerContainer.element;\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target: target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target: target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n broadcastReadonly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return broadcastReadonly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var receivingConfig = function () {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n Disabling.set(comp, data.readonly);\n }\n }, _a)\n });\n };\n\n var item = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n };\n var button = function (disabled) {\n return Disabling.config({ disabled: disabled });\n };\n var splitButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n };\n var toolbarButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n };\n var DisablingConfigs = {\n item: item,\n button: button,\n splitButton: splitButton,\n toolbarButton: toolbarButton\n };\n\n var runWithApi = function (info, comp) {\n var api = info.getApi(comp);\n return function (f) {\n f(api);\n };\n };\n var onControlAttached = function (info, editorOffCell) {\n return runOnAttached(function (comp) {\n var run = runWithApi(info, comp);\n run(function (api) {\n var onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n };\n var onControlDetached = function (getApi, editorOffCell) {\n return runOnDetached(function (comp) {\n return runWithApi(getApi, comp)(editorOffCell.get());\n });\n };\n\n var _a;\n var onMenuItemExecute = function (info, itemResponse) {\n return runOnExecute(function (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 };\n var menuItemEventOrder = (_a = {}, _a[execute()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ], _a);\n\n var componentRenderPipeline = function (xs) {\n return bind(xs, function (o) {\n return o.toArray();\n });\n };\n var renderCommonItem = function (spec, structure, itemResponse, providersbackstage) {\n var 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(function () {\n return spec.disabled || providersbackstage.isDisabled();\n }),\n receivingConfig(),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n var buildData = function (source) {\n return {\n value: source.value,\n meta: __assign({ text: source.text.getOr('') }, source.meta)\n };\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n var other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n var replace = global$8.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has(replace, search) ? replace[search] : segment;\n });\n return global$8.mac ? updated.join('') : updated.join('+');\n };\n\n var renderIcon = function (iconHtml) {\n return {\n dom: {\n tag: 'div',\n classes: [iconClass],\n innerHtml: iconHtml\n }\n };\n };\n var renderText = function (text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text(global$6.translate(text$1))]\n };\n };\n var renderHtml = function (html, classes) {\n return {\n dom: {\n tag: 'div',\n classes: classes,\n innerHtml: html\n }\n };\n };\n var renderStyledText = function (style, text$1) {\n return {\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(global$6.translate(text$1))]\n }]\n };\n };\n var renderShortcut = function (shortcut) {\n return {\n dom: {\n tag: 'div',\n classes: [accessoryClass],\n innerHtml: convertText(shortcut)\n }\n };\n };\n var renderCheckmark = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [checkmarkClass],\n innerHtml: get$e('checkmark', icons)\n }\n };\n };\n var renderSubmenuCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$e('chevron-right', icons)\n }\n };\n };\n var renderDownwardsCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$e('chevron-down', icons)\n }\n };\n };\n var renderContainer = function (container, components) {\n var directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n var alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n var getValignClass = function () {\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: components\n };\n };\n var renderImage = function (src, classes, alt) {\n return {\n dom: {\n tag: 'img',\n classes: classes,\n attributes: {\n src: src,\n alt: alt.getOr('')\n }\n }\n };\n };\n\n var renderColorStructure = function (itemText, itemValue, iconSvg, providerBackstage) {\n var colorPickerCommand = 'custom';\n var removeColorCommand = 'remove';\n var getDom = function () {\n var common = colorClass;\n var icon = iconSvg.getOr('');\n var attributes = itemText.map(function (text) {\n return { title: providerBackstage.translate(text) };\n }).getOr({});\n var baseDom = {\n tag: 'div',\n attributes: attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return __assign(__assign({}, baseDom), {\n tag: 'button',\n classes: __spreadArrays(baseDom.classes, ['tox-swatches__picker-btn']),\n innerHtml: icon\n });\n } else if (itemValue === removeColorCommand) {\n return __assign(__assign({}, baseDom), {\n classes: __spreadArrays(baseDom.classes, ['tox-swatch--remove']),\n innerHtml: icon\n });\n } else {\n return __assign(__assign({}, baseDom), {\n attributes: __assign(__assign({}, baseDom.attributes), { 'data-mce-color': itemValue }),\n styles: { 'background-color': itemValue }\n });\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n var renderItemDomStructure = function (rtlClass, ariaLabel) {\n var domTitle = ariaLabel.map(function (label) {\n return { attributes: { title: global$6.translate(label) } };\n }).getOr({});\n return __assign({\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ].concat(rtlClass ? [iconClassRtl] : [])\n }, domTitle);\n };\n var renderNormalItemStructure = function (info, icon, renderIcons, textRender, rtlClass) {\n var leftIcon = renderIcons ? icon.or(Optional.some('')).map(renderIcon) : Optional.none();\n var checkmark = info.checkMark;\n var content = info.htmlContent.fold(function () {\n return info.textContent.map(textRender);\n }, function (html) {\n return Optional.some(renderHtml(html, [textClass]));\n });\n var menuItem = {\n dom: renderItemDomStructure(rtlClass, 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 var rtlIcon = [\n 'list-num-default',\n 'list-num-lower-alpha',\n 'list-num-lower-greek',\n 'list-num-lower-roman',\n 'list-num-upper-alpha',\n 'list-num-upper-roman'\n ];\n var rtlTransform = [\n 'list-bull-circle',\n 'list-bull-default',\n 'list-bull-square'\n ];\n var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Optional.none();\n }\n var getIconName = function (iconName) {\n return iconName.map(function (name) {\n return global$6.isRtl() && contains(rtlIcon, name) ? name + '-rtl' : name;\n });\n };\n var needRtlClass = global$6.isRtl() && info.iconContent.exists(function (name) {\n return contains(rtlTransform, name);\n });\n var icon = getIconName(info.iconContent).map(function (iconName) {\n return getOr(iconName, providersBackstage.icons, fallbackIcon);\n });\n var textRender = Optional.from(info.meta).fold(function () {\n return renderText;\n }, function (meta) {\n return has(meta, 'style') ? curry(renderStyledText, meta.style) : renderText;\n });\n if (info.presets === 'color') {\n return renderColorStructure(info.ariaLabel, info.value, icon, providersBackstage);\n } else {\n return renderNormalItemStructure(info, icon, renderIcons, textRender, needRtlClass);\n }\n };\n\n var tooltipBehaviour = function (meta, sharedBackstage) {\n return get$1(meta, 'tooltipWorker').map(function (tooltipWorker) {\n return [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: function (comp) {\n return {\n anchor: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable }\n };\n },\n mode: 'follow-highlight',\n onShow: function (component, _tooltip) {\n tooltipWorker(function (elm) {\n Tooltipping.setComponents(component, [external({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })];\n }).getOr([]);\n };\n var encodeText = function (text) {\n return global$5.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$6.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, function (match) {\n return '' + match + '';\n });\n } else {\n return encoded;\n }\n };\n var renderAutocompleteItem = function (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var structure = renderItemStructure({\n presets: presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(function (text) {\n return replaceText(text, matchText);\n }) : 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 disabled: spec.disabled,\n getApi: constant({}),\n onAction: function (_api) {\n return onItemValueHandler(spec.value, spec.meta);\n },\n onSetup: constant(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n var render = function (items, extras) {\n return map(items, function (item) {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n var shouldHighlight = item.name.exists(function (name) {\n return contains(extras.cardText.highlightOn, name);\n });\n var matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n };\n var renderCardMenuItem = function (spec, itemResponse, sharedBackstage, extras) {\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n Disabling.set(component, state);\n each(descendants(component.element, '*'), function (elm) {\n component.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, state);\n }\n });\n });\n }\n };\n };\n var structure = {\n dom: renderItemDomStructure(false, spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render(spec.items, extras)\n })]\n };\n return renderCommonItem({\n data: buildData(__assign({ text: Optional.none() }, spec)),\n disabled: spec.disabled,\n getApi: 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 var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 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 disabled: spec.disabled,\n getApi: getApi,\n onAction: function (_api) {\n return onItemValueHandler(spec.value);\n },\n onSetup: function (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 }\n });\n };\n\n var parts$2 = generate$4(owner$2(), parts());\n\n var hexColour = function (value) {\n return { value: value };\n };\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var isHexString = function (hex) {\n return shorthandRegex.test(hex) || longformRegex.test(hex);\n };\n var getLongForm = function (hex) {\n var hexString = hex.value.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n return { value: hexString };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round = Math.round;\n var rgbRegex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/;\n var rgbaRegex = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*(\\d?(?:\\.\\d+)?)\\)/;\n var rgbaColour = function (red, green, blue, alpha) {\n return {\n red: red,\n green: green,\n blue: blue,\n alpha: alpha\n };\n };\n var isRgbaComponent = function (value) {\n var num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n var fromHsv = function (hsv) {\n var r;\n var g;\n var b;\n var hue = (hsv.hue || 0) % 360;\n var saturation = hsv.saturation / 100;\n var 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(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var 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(255 * (r + match));\n g = round(255 * (g + match));\n b = round(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n var fromHex = function (hexColour) {\n var result = extractValues(hexColour);\n var red = parseInt(result[1], 16);\n var green = parseInt(result[2], 16);\n var blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n var fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var 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 var toString = function (rgba) {\n return 'rgba(' + rgba.red + ',' + rgba.green + ',' + rgba.blue + ',' + rgba.alpha + ')';\n };\n var red = rgbaColour(255, 0, 0, 1);\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireSkinLoadError = function (editor, error) {\n return editor.fire('SkinLoadError', error);\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireResizeContent = function (editor, e) {\n return editor.fire('ResizeContent', e);\n };\n var fireScrollContent = function (editor, e) {\n return editor.fire('ScrollContent', e);\n };\n var fireTextColorChange = function (editor, data) {\n return editor.fire('TextColorChange', data);\n };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var storageName = 'tinymce-custom-colors';\n function ColorCache (max) {\n if (max === void 0) {\n max = 10;\n }\n var storageString = global$9.getItem(storageName);\n var localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n var prune = function (list) {\n var diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n var cache = prune(localstorage);\n var add = function (key) {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$9.setItem(storageName, JSON.stringify(cache));\n };\n var remove = function (idx) {\n cache.splice(idx, 1);\n };\n var state = function () {\n return cache.slice(0);\n };\n return {\n add: add,\n state: state\n };\n }\n\n var choiceItem = 'choiceitem';\n var defaultColors = [\n {\n type: choiceItem,\n text: 'Light Green',\n value: '#BFEDD2'\n },\n {\n type: choiceItem,\n text: 'Light Yellow',\n value: '#FBEEB8'\n },\n {\n type: choiceItem,\n text: 'Light Red',\n value: '#F8CAC6'\n },\n {\n type: choiceItem,\n text: 'Light Purple',\n value: '#ECCAFA'\n },\n {\n type: choiceItem,\n text: 'Light Blue',\n value: '#C2E0F4'\n },\n {\n type: choiceItem,\n text: 'Green',\n value: '#2DC26B'\n },\n {\n type: choiceItem,\n text: 'Yellow',\n value: '#F1C40F'\n },\n {\n type: choiceItem,\n text: 'Red',\n value: '#E03E2D'\n },\n {\n type: choiceItem,\n text: 'Purple',\n value: '#B96AD9'\n },\n {\n type: choiceItem,\n text: 'Blue',\n value: '#3598DB'\n },\n {\n type: choiceItem,\n text: 'Dark Turquoise',\n value: '#169179'\n },\n {\n type: choiceItem,\n text: 'Orange',\n value: '#E67E23'\n },\n {\n type: choiceItem,\n text: 'Dark Red',\n value: '#BA372A'\n },\n {\n type: choiceItem,\n text: 'Dark Purple',\n value: '#843FA1'\n },\n {\n type: choiceItem,\n text: 'Dark Blue',\n value: '#236FA1'\n },\n {\n type: choiceItem,\n text: 'Light Gray',\n value: '#ECF0F1'\n },\n {\n type: choiceItem,\n text: 'Medium Gray',\n value: '#CED4D9'\n },\n {\n type: choiceItem,\n text: 'Gray',\n value: '#95A5A6'\n },\n {\n type: choiceItem,\n text: 'Dark Gray',\n value: '#7E8C8D'\n },\n {\n type: choiceItem,\n text: 'Navy Blue',\n value: '#34495E'\n },\n {\n type: choiceItem,\n text: 'Black',\n value: '#000000'\n },\n {\n type: choiceItem,\n text: 'White',\n value: '#ffffff'\n }\n ];\n var colorCache = ColorCache(10);\n var mapColors = function (colorMap) {\n var colors = [];\n var canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n var ctx = canvas.getContext('2d');\n var byteAsHex = function (colorByte, alphaByte) {\n var bg = 255;\n var alpha = alphaByte / 255;\n var colorByteWithWhiteBg = Math.round(colorByte * alpha + bg * (1 - alpha));\n return ('0' + colorByteWithWhiteBg.toString(16)).slice(-2).toUpperCase();\n };\n var asHexColor = function (color) {\n if (/^[0-9A-Fa-f]{6}$/.test(color)) {\n return '#' + color.toUpperCase();\n }\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = '#FFFFFF';\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n var rgba = ctx.getImageData(0, 0, 1, 1).data;\n var r = rgba[0], g = rgba[1], b = rgba[2], a = rgba[3];\n return '#' + byteAsHex(r, a) + byteAsHex(g, a) + byteAsHex(b, a);\n };\n for (var i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: asHexColor(colorMap[i]),\n type: 'choiceitem'\n });\n }\n return colors;\n };\n var getColorCols = function (editor, defaultCols) {\n return editor.getParam('color_cols', defaultCols, 'number');\n };\n var hasCustomColors = function (editor) {\n return editor.getParam('custom_colors') !== false;\n };\n var getColorMap = function (editor) {\n return editor.getParam('color_map');\n };\n var getColors = function (editor) {\n var unmapped = getColorMap(editor);\n return unmapped !== undefined ? mapColors(unmapped) : defaultColors;\n };\n var getCurrentColors = function () {\n return map(colorCache.state(), function (color) {\n return {\n type: choiceItem,\n text: color,\n value: color\n };\n });\n };\n var addColor = function (color) {\n colorCache.add(color);\n };\n\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return color;\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var registerCommands = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n removeFormat(editor, format);\n });\n };\n var calcCols = function (colors) {\n return Math.max(5, Math.ceil(Math.sqrt(colors)));\n };\n var getColorCols$1 = function (editor) {\n var colors = getColors(editor);\n var defaultCols = calcCols(colors.length);\n return getColorCols(editor, defaultCols);\n };\n var getAdditionalColors = function (hasCustom) {\n var type = 'choiceitem';\n var remove = {\n type: type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n var custom = {\n type: type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n var applyColor = function (editor, format, value, onChoice) {\n if (value === 'custom') {\n var dialog = colorPickerDialog(editor);\n dialog(function (colorOpt) {\n colorOpt.each(function (color) {\n addColor(color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, '#000000');\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 var getColors$1 = function (colors, hasCustom) {\n return colors.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n };\n var getFetch = function (colors, hasCustom) {\n return function (callback) {\n callback(getColors$1(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var setIconFillAndStroke = function (pathId, color) {\n splitButtonApi.setIconFill(pathId, color);\n splitButtonApi.setIconStroke(pathId, color);\n };\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n setIconFillAndStroke(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = Optional.from(getCurrentColor(editor, format));\n return optCurrentRgb.bind(function (currentRgb) {\n return fromString(currentRgb).map(function (rgba) {\n var currentHex = fromRgba(rgba).value;\n return contains$1(value.toLowerCase(), currentHex);\n });\n }).getOr(false);\n },\n columns: getColorCols$1(editor),\n fetch: getFetch(getColors(editor), hasCustomColors(editor)),\n onAction: function (_splitButtonApi) {\n if (lastColor.get() !== null) {\n applyColor(editor, format, lastColor.get(), noop);\n }\n },\n onItemAction: function (_splitButtonApi, value) {\n applyColor(editor, format, value, function (newColor) {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name: name,\n color: newColor\n });\n });\n },\n onSetup: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n setIconColor(splitButtonApi, name, lastColor.get());\n }\n var handler = function (e) {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return function () {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n var registerTextColorMenuItem = function (editor, name, format, text) {\n editor.ui.registry.addNestedMenuItem(name, {\n text: text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: function (data) {\n applyColor(editor, format, data.value, noop);\n }\n }];\n }\n });\n };\n var colorPickerDialog = function (editor) {\n return function (callback, value) {\n var getOnSubmit = function (callback) {\n return function (api) {\n var data = api.getData();\n callback(Optional.from(data.colorpicker));\n api.close();\n };\n };\n var onAction = function (api, details) {\n if (details.name === 'hex-valid') {\n if (details.value) {\n api.enable('ok');\n } else {\n api.disable('ok');\n }\n }\n };\n var initialData = { colorpicker: value };\n var submit = getOnSubmit(callback);\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: initialData,\n onAction: onAction,\n onSubmit: submit,\n onClose: noop,\n onCancel: function () {\n callback(Optional.none());\n }\n });\n };\n };\n var register$1 = function (editor) {\n registerCommands(editor);\n var lastForeColor = Cell(null);\n var lastBackColor = Cell(null);\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 var createPartialChoiceMenu = function (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) {\n var hasIcons = menuHasIcons(items);\n var presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n var alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, presets);\n };\n var createChoiceItems = function (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) {\n return cat(map(items, function (item) {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, function (d) {\n return Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage, menuHasIcons(items)));\n });\n } else {\n return Optional.none();\n }\n }));\n };\n\n var deriveMenuMovement = function (columns, presets) {\n var menuMarkers = markers$1(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 var rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass\n };\n }\n };\n var deriveCollectionMovement = function (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 var renderColorSwatchItem = function (spec, backstage) {\n var items = getColors$1(backstage.colorinput.getColors(), backstage.colorinput.hasCustomColors());\n var columns = backstage.colorinput.getColorCols();\n var presets = 'color';\n var menuSpec = createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {\n spec.onAction({ value: value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n var widgetSpec = __assign(__assign({}, menuSpec), {\n markers: markers$1(presets),\n movement: deriveMenuMovement(columns, presets)\n });\n return {\n type: 'widget',\n data: { value: generate$1('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$2.widget(Menu.sketch(widgetSpec))]\n };\n };\n\n var cellOverEvent = generate$1('cell-over');\n var cellExecuteEvent = generate$1('cell-execute');\n var makeCell = function (row, col, labelId) {\n var _a;\n var emitCellOver = function (c) {\n return emitWith(c, cellOverEvent, {\n row: row,\n col: col\n });\n };\n var emitExecute = function (c) {\n return emitWith(c, cellExecuteEvent, {\n row: row,\n col: col\n });\n };\n var onClick = function (c, se) {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: (_a = { role: 'button' }, _a['aria-labelledby'] = labelId, _a)\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run(mouseover(), Focusing.focus),\n run(execute(), emitExecute),\n run(click(), onClick),\n run(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 var makeCells = function (labelId, numRows, numCols) {\n var cells = [];\n for (var i = 0; i < numRows; i++) {\n var row = [];\n for (var j = 0; j < numCols; j++) {\n row.push(makeCell(i, j, labelId));\n }\n cells.push(row);\n }\n return cells;\n };\n var selectCells = function (cells, selectedRow, selectedColumn, numRows, numColumns) {\n for (var i = 0; i < numRows; i++) {\n for (var j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n var makeComponents = function (cells) {\n return bind(cells, function (cellRow) {\n return map(cellRow, premade$1);\n });\n };\n var makeLabelText = function (row, col) {\n return text(col + 1 + 'x' + (row + 1));\n };\n var renderInsertTableMenuItem = function (spec) {\n var numRows = 10;\n var numColumns = 10;\n var sizeLabelId = generate$1('size-label');\n var cells = makeCells(sizeLabelId, numRows, numColumns);\n var memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label'],\n attributes: { id: sizeLabelId }\n },\n components: [text('0x0')],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$1('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$2.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 runWithTarget(cellOverEvent, function (c, t, e) {\n var row = e.event.row;\n var col = e.event.col;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);\n }),\n runWithTarget(cellExecuteEvent, function (c, _, e) {\n spec.onAction({\n numRows: e.event.row + 1,\n numColumns: e.event.col + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows: numRows,\n numColumns: numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n var fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n var valueOpt = function (obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key) ? Optional.some(obj[key]) : Optional.none();\n };\n var renderFancyMenuItem = function (spec, backstage) {\n return valueOpt(fancyMenuItems, spec.fancytype).map(function (render) {\n return render(spec, backstage);\n });\n };\n\n var renderNestedItem = function (spec, itemResponse, providersBackstage, renderIcons, downwardsCaret) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n if (downwardsCaret === void 0) {\n downwardsCaret = false;\n }\n var caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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: getApi,\n disabled: spec.disabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderNormalItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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: getApi,\n disabled: spec.disabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderSeparatorItem = function (spec) {\n var innerHtml = spec.text.fold(function () {\n return {};\n }, function (text) {\n return { innerHtml: text };\n });\n return {\n type: 'separator',\n dom: __assign({\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n }, innerHtml),\n components: []\n };\n };\n\n var renderToggleMenuItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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 disabled: spec.disabled,\n getApi: 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 var autocomplete = renderAutocompleteItem;\n var separator = renderSeparatorItem;\n var normal = renderNormalItem;\n var nested = renderNestedItem;\n var toggle$1 = renderToggleMenuItem;\n var fancy = renderFancyMenuItem;\n var card = renderCardMenuItem;\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) {\n var providersBackstage = backstage.shared.providers;\n var parseForHorizontalMenu = function (menuitem) {\n return !isHorizontalMenu ? menuitem : __assign(__assign({}, menuitem), {\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n });\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, function (d) {\n return Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, function (d) {\n return Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu));\n });\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, function (d) {\n return Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, function (d) {\n return Optional.some(separator(d));\n });\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, function (d) {\n return fancy(parseForHorizontalMenu(d), backstage);\n });\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n var createAutocompleteItems = function (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) {\n var renderText = columns === 1;\n var renderIcons = !renderText || menuHasIcons(items);\n return cat(map(items, function (item) {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, function (d) {\n return Optional.some(separator(d));\n });\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, function (d) {\n return Optional.some(card(__assign(__assign({}, d), {\n onAction: function (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: matchText,\n highlightOn: highlightOn\n }\n }));\n });\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, function (d) {\n return Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons));\n });\n }\n }));\n };\n var createPartialMenu = function (value, items, itemResponse, backstage, isHorizontalMenu) {\n var hasIcons = menuHasIcons(items);\n var alloyItems = cat(map(items, function (item) {\n var itemHasIcon = function (i) {\n return isHorizontalMenu ? !i.hasOwnProperty('text') : hasIcons;\n };\n var createItem = function (i) {\n return createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n };\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem(__assign(__assign({}, item), { disabled: true }));\n } else {\n return createItem(item);\n }\n }));\n var createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, 'normal');\n };\n var createTieredDataFrom = function (partialMenu) {\n return tieredMenu.singleData(partialMenu.value, partialMenu);\n };\n var createMenuFrom = function (partialMenu, columns, focusMode, presets) {\n var focusManager = focusMode === FocusMode.ContentFocus ? highlights() : dom();\n var movement = deriveMenuMovement(columns, presets);\n var menuMarkers = markers$1(presets);\n return {\n dom: partialMenu.dom,\n components: partialMenu.components,\n items: partialMenu.items,\n value: partialMenu.value,\n markers: {\n selectedItem: menuMarkers.selectedItem,\n item: menuMarkers.item\n },\n movement: movement,\n fakeFocus: focusMode === FocusMode.ContentFocus,\n focusManager: focusManager,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached(function (comp, _se) {\n detectSize(comp, 4, menuMarkers.item).each(function (_a) {\n var numColumns = _a.numColumns, numRows = _a.numRows;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n };\n };\n\n var register$2 = function (editor, sharedBackstage) {\n var activeAutocompleter = Cell(Optional.none());\n var processingAction = Cell(false);\n var 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(dismissRequested(), function () {\n return cancelIfNecessary();\n })])]),\n lazySink: sharedBackstage.getSink\n }));\n var isMenuOpen = function () {\n return InlineView.isOpen(autocompleter);\n };\n var isActive = function () {\n return activeAutocompleter.get().isSome();\n };\n var hideIfNecessary = function () {\n if (isActive()) {\n InlineView.hide(autocompleter);\n }\n };\n var cancelIfNecessary = function () {\n if (isActive()) {\n var lastElement = activeAutocompleter.get().map(function (ac) {\n return ac.element;\n });\n detect$4(lastElement.getOr(SugarElement.fromDom(editor.selection.getNode()))).each(unwrap);\n hideIfNecessary();\n activeAutocompleter.set(Optional.none());\n processingAction.set(false);\n }\n };\n var getAutocompleters = cached(function () {\n return register(editor);\n });\n var getCombinedItems = function (triggerChar, matches) {\n var columns = findMap(matches, function (m) {\n return Optional.from(m.columns);\n }).getOr(1);\n return bind(matches, function (match) {\n var choices = match.items;\n return createAutocompleteItems(choices, match.matchText, function (itemValue, itemMeta) {\n var nr = editor.selection.getRng();\n getContext(editor.dom, nr, triggerChar).fold(function () {\n return console.error('Lost context. Cursor probably moved');\n }, function (_a) {\n var range = _a.range;\n var autocompleterApi = {\n hide: function () {\n cancelIfNecessary();\n },\n reload: function (fetchOptions) {\n hideIfNecessary();\n load(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 var commenceIfNecessary = function (context) {\n if (!isActive()) {\n var wrapper = create$4(editor, context.range);\n activeAutocompleter.set(Optional.some({\n triggerChar: context.triggerChar,\n element: wrapper,\n matchLength: context.text.length\n }));\n processingAction.set(false);\n }\n };\n var display = function (ac, context, lookupData, items) {\n ac.matchLength = context.text.length;\n var columns = findMap(lookupData, function (ld) {\n return Optional.from(ld.columns);\n }).getOr(1);\n InlineView.showAt(autocompleter, {\n anchor: 'node',\n root: SugarElement.fromDom(editor.getBody()),\n node: Optional.from(ac.element)\n }, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, 'normal'), columns, FocusMode.ContentFocus, 'normal')));\n InlineView.getContent(autocompleter).each(Highlighting.highlightFirst);\n };\n var doLookup = function (fetchOptions) {\n return activeAutocompleter.get().map(function (ac) {\n return getContext(editor.dom, editor.selection.getRng(), ac.triggerChar).bind(function (newContext) {\n return lookupWithContext(editor, getAutocompleters, newContext, fetchOptions);\n });\n }).getOrThunk(function () {\n return lookup(editor, getAutocompleters);\n });\n };\n var load = function (fetchOptions) {\n doLookup(fetchOptions).fold(cancelIfNecessary, function (lookupInfo) {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(function (lookupData) {\n activeAutocompleter.get().map(function (ac) {\n var context = lookupInfo.context;\n if (ac.triggerChar === context.triggerChar) {\n var combinedItems = getCombinedItems(context.triggerChar, lookupData);\n if (combinedItems.length > 0) {\n display(ac, context, lookupData, combinedItems);\n } else if (context.text.length - ac.matchLength >= 10) {\n cancelIfNecessary();\n } else {\n hideIfNecessary();\n }\n }\n });\n });\n });\n };\n var onKeypress = last$2(function (e) {\n if (e.which === 27) {\n return;\n }\n load();\n }, 50);\n var autocompleterUiApi = {\n onKeypress: onKeypress,\n cancelIfNecessary: cancelIfNecessary,\n isMenuOpen: isMenuOpen,\n isActive: isActive,\n isProcessingAction: processingAction.get,\n getView: function () {\n return InlineView.getContent(autocompleter);\n }\n };\n if (editor.hasPlugin('rtc') === false) {\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n }\n };\n var Autocompleter = { register: register$2 };\n\n var filter$2 = always;\n var bind$3 = function (element, event, handler) {\n return bind$2(element, event, filter$2, handler);\n };\n var capture$1 = function (element, event, handler) {\n return capture(element, event, filter$2, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var closest$4 = function (scope, selector, isRoot) {\n return closest$3(scope, selector, isRoot).isSome();\n };\n\n var DelayedFunction = function (fun, delay) {\n var ref = null;\n var schedule = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n ref = setTimeout(function () {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n var cancel = function () {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel: cancel,\n schedule: schedule\n };\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n var 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 var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x);\n var distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var monitor = function (settings) {\n var startData = Cell(Optional.none());\n var longpressFired = Cell(false);\n var longpress$1 = DelayedFunction(function (event) {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n var handleTouchstart = function (event) {\n getTouch(event).each(function (touch) {\n longpress$1.cancel();\n var 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(Optional.some(data));\n });\n return Optional.none();\n };\n var handleTouchmove = function (event) {\n longpress$1.cancel();\n getTouch(event).each(function (touch) {\n startData.get().each(function (data) {\n if (isFarEnough(touch, data)) {\n startData.set(Optional.none());\n }\n });\n });\n return Optional.none();\n };\n var handleTouchend = function (event) {\n longpress$1.cancel();\n var isSame = function (data) {\n return eq$1(data.target, event.target);\n };\n return startData.get().filter(isSame).map(function (_data) {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n var handlers = wrapAll$1([\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 var fireIfReady = function (event, type) {\n return get$1(handlers, type).bind(function (handler) {\n return handler(event);\n });\n };\n return { fireIfReady: fireIfReady };\n };\n\n var isDangerous = function (event) {\n var keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains([\n 'input',\n 'textarea'\n ], name(event.target)) && !closest$4(event.target, '[contenteditable=\"true\"]');\n };\n var isFirefox = function () {\n return detect$3().browser.isFirefox();\n };\n var settingsSchema = objOfOnly([\n strictFunction('triggerEvent'),\n defaulted$1('stopBackspace', true)\n ]);\n var bindFocus = function (container, handler) {\n if (isFirefox()) {\n return capture$1(container, 'focus', handler);\n } else {\n return bind$3(container, 'focusin', handler);\n }\n };\n var bindBlur = function (container, handler) {\n if (isFirefox()) {\n return capture$1(container, 'blur', handler);\n } else {\n return bind$3(container, 'focusout', handler);\n }\n };\n var setup$1 = function (container, rawSettings) {\n var settings = asRawOrDie('Getting GUI events settings', settingsSchema, rawSettings);\n var 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 var tapEvent = monitor(settings);\n var simpleEvents = map(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), function (type) {\n return bind$3(container, type, function (event) {\n tapEvent.fireIfReady(event, type).each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n });\n });\n var pasteTimeout = Cell(Optional.none());\n var onPaste = bind$3(container, 'paste', function (event) {\n tapEvent.fireIfReady(event, 'paste').each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(Optional.some(setTimeout(function () {\n settings.triggerEvent(postPaste(), event);\n }, 0)));\n });\n var onKeydown = bind$3(container, 'keydown', function (event) {\n var stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace === true && isDangerous(event)) {\n event.prevent();\n }\n });\n var onFocusIn = bindFocus(container, function (event) {\n var stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n var focusoutTimeout = Cell(Optional.none());\n var onFocusOut = bindBlur(container, function (event) {\n var stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(Optional.some(setTimeout(function () {\n settings.triggerEvent(postBlur(), event);\n }, 0)));\n });\n var unbind = function () {\n each(simpleEvents, function (e) {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.get().each(clearTimeout);\n focusoutTimeout.get().each(clearTimeout);\n };\n return { unbind: unbind };\n };\n\n var derive$2 = function (rawEvent, rawTarget) {\n var source = get$1(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n var fromSource = function (event, source) {\n var stopper = Cell(false);\n var cutter = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n var cut = function () {\n cutter.set(true);\n };\n return {\n stop: stop,\n cut: cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event: event,\n setSource: source.set,\n getSource: source.get\n };\n };\n var fromExternal = function (event) {\n var stopper = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n return {\n stop: stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event: 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 var adt$b = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n var doTriggerHandler = function (lookup, eventType, rawEvent, target, source, logger) {\n var handler = lookup(eventType, target);\n var simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(function () {\n logger.logEventNoHandlers(eventType, target);\n return adt$b.complete();\n }, function (handlerInfo) {\n var descHandler = handlerInfo.descHandler;\n var eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n return adt$b.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$b.complete();\n } else {\n return parent(handlerInfo.element).fold(function () {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$b.complete();\n }, function (parent) {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$b.resume(parent);\n });\n }\n });\n };\n var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) {\n return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, function (parent) {\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);\n }, never);\n };\n var triggerHandler = function (lookup, eventType, rawEvent, target, logger) {\n var source = derive$2(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n var broadcast = function (listeners, rawEvent, _logger) {\n var simulatedEvent = fromExternal(rawEvent);\n each(listeners, function (listener) {\n var descHandler = listener.descHandler;\n var handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) {\n return triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n };\n var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) {\n var source = derive$2(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n var eventHandler = function (element, descHandler) {\n return {\n element: element,\n descHandler: descHandler\n };\n };\n var broadcastHandler = function (id, handler) {\n return {\n id: id,\n descHandler: handler\n };\n };\n var EventRegistry = function () {\n var registry = {};\n var registerId = function (extraArgs, id, events) {\n each$1(events, function (v, k) {\n var handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n var findHandler = function (handlers, elem) {\n return read$1(elem).fold(function () {\n return Optional.none();\n }, function (id) {\n return handlers.bind(function (h) {\n return get$1(h, id);\n }).map(function (descHandler) {\n return eventHandler(elem, descHandler);\n });\n });\n };\n var filterByType = function (type) {\n return get$1(registry, type).map(function (handlers) {\n return mapToArray(handlers, function (f, id) {\n return broadcastHandler(id, f);\n });\n }).getOr([]);\n };\n var find = function (isAboveRoot, type, target) {\n var handlers = get$1(registry, type);\n return closest(target, function (elem) {\n return findHandler(handlers, elem);\n }, isAboveRoot);\n };\n var unregisterId = function (id) {\n each$1(registry, function (handlersById, _eventName) {\n if (handlersById.hasOwnProperty(id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId: registerId,\n unregisterId: unregisterId,\n filterByType: filterByType,\n find: find\n };\n };\n\n var Registry = function () {\n var events = EventRegistry();\n var components = {};\n var readOrTag = function (component) {\n var elem = component.element;\n return read$1(elem).fold(function () {\n return write('uid-', component.element);\n }, function (uid) {\n return uid;\n });\n };\n var failOnDuplicate = function (component, tagId) {\n var 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 var register = function (component) {\n var tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n var extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n var unregister = function (component) {\n read$1(component.element).each(function (tagId) {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n var filter = function (type) {\n return events.filterByType(type);\n };\n var find = function (isAboveRoot, type, target) {\n return events.find(isAboveRoot, type, target);\n };\n var getById = function (id) {\n return get$1(components, id);\n };\n return {\n find: find,\n filter: filter,\n register: register,\n unregister: unregister,\n getById: getById\n };\n };\n\n var factory$3 = function (detail) {\n var _a = detail.dom, attributes = _a.attributes, domWithoutAttributes = __rest(_a, ['attributes']);\n return {\n uid: detail.uid,\n dom: __assign({\n tag: 'div',\n attributes: __assign({ role: 'presentation' }, attributes)\n }, domWithoutAttributes),\n components: detail.components,\n behaviours: get$d(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n var Container = single$2({\n name: 'Container',\n factory: factory$3,\n configFields: [\n defaulted$1('components', []),\n field$1('containerBehaviours', []),\n defaulted$1('events', {}),\n defaulted$1('domModification', {}),\n defaulted$1('eventOrder', {})\n ]\n });\n\n var takeover = function (root) {\n var isAboveRoot = function (el) {\n return parent(root.element).fold(always, function (parent) {\n return eq$1(el, parent);\n });\n };\n var registry = Registry();\n var lookup = function (eventName, target) {\n return registry.find(isAboveRoot, eventName, target);\n };\n var domEvents = setup$1(root.element, {\n triggerEvent: function (eventName, event) {\n return monitorEvent(eventName, event.target, function (logger) {\n return triggerUntilStopped(lookup, eventName, event, logger);\n });\n }\n });\n var systemApi = {\n debugInfo: constant('real'),\n triggerEvent: function (eventName, target, data) {\n monitorEvent(eventName, target, function (logger) {\n return triggerOnUntilStopped(lookup, eventName, data, target, logger);\n });\n },\n triggerFocus: function (target, originator) {\n read$1(target).fold(function () {\n focus$1(target);\n }, function (_alloyId) {\n monitorEvent(focus(), target, function (logger) {\n triggerHandler(lookup, focus(), {\n originator: originator,\n kill: noop,\n prevent: noop,\n target: target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: function (comp, simulatedEvent) {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: function (uid) {\n return getByUid(uid);\n },\n getByDom: function (elem) {\n return getByDom(elem);\n },\n build: build$1,\n addToGui: function (c) {\n add(c);\n },\n removeFromGui: function (c) {\n remove$1(c);\n },\n addToWorld: function (c) {\n addToWorld(c);\n },\n removeFromWorld: function (c) {\n removeFromWorld(c);\n },\n broadcast: function (message) {\n broadcast$1(message);\n },\n broadcastOn: function (channels, message) {\n broadcastOn(channels, message);\n },\n broadcastEvent: function (eventName, event) {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n var addToWorld = function (component) {\n component.connect(systemApi);\n if (!isText(component.element)) {\n registry.register(component);\n each(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n var removeFromWorld = function (component) {\n if (!isText(component.element)) {\n each(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n var add = function (component) {\n attach$1(root, component);\n };\n var remove$1 = function (component) {\n detach(component);\n };\n var destroy = function () {\n domEvents.unbind();\n remove(root.element);\n };\n var broadcastData = function (data) {\n var receivers = registry.filter(receive());\n each(receivers, function (receiver) {\n var descHandler = receiver.descHandler;\n var handler = getCurried(descHandler);\n handler(data);\n });\n };\n var broadcast$1 = function (message) {\n broadcastData({\n universal: true,\n data: message\n });\n };\n var broadcastOn = function (channels, message) {\n broadcastData({\n universal: false,\n channels: channels,\n data: message\n });\n };\n var broadcastEvent = function (eventName, event) {\n var listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n var getByUid = function (uid) {\n return registry.getById(uid).fold(function () {\n return Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.'));\n }, Result.value);\n };\n var getByDom = function (elem) {\n var uid = read$1(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root: root,\n element: root.element,\n destroy: destroy,\n add: add,\n remove: remove$1,\n getByUid: getByUid,\n getByDom: getByDom,\n addToWorld: addToWorld,\n removeFromWorld: removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn: broadcastOn,\n broadcastEvent: broadcastEvent\n };\n };\n\n var renderBar = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var schema$e = constant([\n defaulted$1('prefix', 'form-field'),\n field$1('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var parts$3 = constant([\n optional({\n schema: [strict$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: function (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: [strict$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: function (spec) {\n var excludeFactory = exclude$1(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [strict$1('factory')],\n name: 'field'\n })\n ]);\n\n var factory$4 = function (detail, components, _spec, _externals) {\n var behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: function (container) {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (field) {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: function (field, value) {\n Composing.getCurrent(field).each(function (current) {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n var events = derive([runOnAttached(function (component, _simulatedEvent) {\n var ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(function (field) {\n var id = generate$1(detail.prefix);\n ps.label().each(function (label) {\n set$1(label.element, 'for', id);\n set$1(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(function (descriptor) {\n var descriptorId = generate$1(detail.prefix);\n set$1(descriptor.element, 'id', descriptorId);\n set$1(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n var apis = {\n getField: function (container) {\n return getPart(container, detail, 'field');\n },\n getLabel: function (container) {\n return getPart(container, detail, 'label');\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: behaviours,\n events: events,\n apis: apis\n };\n };\n var FormField = composite$1({\n name: 'FormField',\n configFields: schema$e(),\n partFields: parts$3(),\n factory: factory$4,\n apis: {\n getField: function (apis, comp) {\n return apis.getField(comp);\n },\n getLabel: function (apis, comp) {\n return apis.getLabel(comp);\n }\n }\n });\n\n var exhibit$4 = function (base, tabConfig) {\n return nu$6({\n attributes: wrapAll$1([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n };\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4\n });\n\n var TabstopSchema = [defaulted$1('tabAttr', 'data-alloy-tabstop')];\n\n var Tabstopping = create$1({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var global$a = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var renderFormFieldWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n var renderFormField = function (pLabel, pField) {\n return renderFormFieldWith(pLabel, pField, [], []);\n };\n var renderFormFieldSpecWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n return {\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n };\n };\n var renderFormFieldDom = function () {\n return renderFormFieldDomWith([]);\n };\n var renderFormFieldDomWith = function (extraClasses) {\n return {\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n };\n };\n var renderLabel = function (label, providersBackstage) {\n return FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n };\n\n var formChangeEvent = generate$1('form-component-change');\n var formCloseEvent = generate$1('form-close');\n var formCancelEvent = generate$1('form-cancel');\n var formActionEvent = generate$1('form-action');\n var formSubmitEvent = generate$1('form-submit');\n var formBlockEvent = generate$1('form-block');\n var formUnblockEvent = generate$1('form-unblock');\n var formTabChangeEvent = generate$1('form-tabchange');\n var formResizeEvent = generate$1('form-resize');\n\n var renderCollection = function (spec, providersBackstage) {\n var _a;\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var runOnItem = function (f) {\n return function (comp, se) {\n closest$3(se.event.target, '[data-collection-item-value]').each(function (target) {\n f(comp, se, target, get$3(target, 'data-collection-item-value'));\n });\n };\n };\n var setContents = function (comp, items) {\n var htmlLines = map(items, function (item) {\n var itemText = global$6.translate(item.text);\n var textContent = spec.columns === 1 ? '
' + itemText + '
' : '';\n var iconContent = '
' + item.icon + '
';\n var mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n var ariaLabel = itemText.replace(/\\_| \\- |\\-/g, function (match) {\n return mapItemName[match];\n });\n var disabledClass = providersBackstage.isDisabled() ? ' tox-collection__item--state-disabled' : '';\n return '
' + iconContent + textContent + '
';\n });\n var chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk(htmlLines, spec.columns) : [htmlLines];\n var html = map(chunks, function (ch) {\n return '
' + ch.join('') + '
';\n });\n set(comp.element, html.join(''));\n };\n var onClick = runOnItem(function (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 var collectionEvents = [\n run(mouseover(), runOnItem(function (comp, se, tgt) {\n focus$1(tgt);\n })),\n run(click(), onClick),\n run(tap(), onClick),\n run(focusin(), runOnItem(function (comp, se, tgt) {\n descendant$1(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run(focusout(), runOnItem(function (comp) {\n descendant$1(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n })),\n runOnExecute(runOnItem(function (comp, se, tgt, itemValue) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n var iterCollectionItems = function (comp, applyAttributes) {\n return map(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n };\n var 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: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$1(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n remove$4(childElm, 'tox-collection__item--state-disabled');\n remove$1(childElm, 'aria-disabled');\n });\n }\n }),\n receivingConfig(),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: []\n },\n onSetValue: function (comp, items) {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.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: (_a = {}, _a[execute()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ], _a)\n });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n var schema$f = constant([\n option('data'),\n defaulted$1('inputAttributes', {}),\n defaulted$1('inputStyles', {}),\n defaulted$1('tag', 'input'),\n defaulted$1('inputClasses', []),\n onHandler('onSetValue'),\n defaulted$1('styles', {}),\n defaulted$1('eventOrder', {}),\n field$1('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted$1('selectOnFocus', true)\n ]);\n var focusBehaviours = function (detail) {\n return derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : function (component) {\n var input = component.element;\n var value = get$6(input);\n input.dom.setSelectionRange(0, value.length);\n }\n })]);\n };\n var behaviours = function (detail) {\n return __assign(__assign({}, focusBehaviours(detail)), augment(detail.inputBehaviours, [Representing.config({\n store: __assign(__assign({ mode: 'manual' }, detail.data.map(function (data) {\n return { initialValue: data };\n }).getOr({})), {\n getValue: function (input) {\n return get$6(input.element);\n },\n setValue: function (input, data) {\n var current = get$6(input.element);\n if (current !== data) {\n set$3(input.element, data);\n }\n }\n }),\n onSetValue: detail.onSetValue\n })]));\n };\n var dom$2 = function (detail) {\n return {\n tag: detail.tag,\n attributes: __assign({ type: 'text' }, detail.inputAttributes),\n styles: detail.inputStyles,\n classes: detail.inputClasses\n };\n };\n\n var factory$5 = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: dom$2(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n };\n };\n var Input = single$2({\n name: 'Input',\n configFields: schema$f(),\n factory: factory$5\n });\n\n var exports$1 = {}, module = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module, undefined));\n var Promise = module.exports.boltExport;\n\n var nu$a = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$a(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu$a(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$a,\n pure: pure\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make$3 = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make$3(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make$3(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make$3(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make$3(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$b = function (baseFn) {\n return make$3(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make$3(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$b,\n pure: pure$1\n };\n\n var ariaElements = [\n 'input',\n 'textarea'\n ];\n var isAriaElement = function (elem) {\n var name$1 = name(elem);\n return contains(ariaElements, name$1);\n };\n var markValid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$4(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element)) {\n set$1(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n var markInvalid = function (component, invalidConfig, invalidState, text) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element)) {\n set$1(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n var query = function (component, invalidConfig, _invalidState) {\n return invalidConfig.validator.fold(function () {\n return Future.pure(Result.value(true));\n }, function (validatorInfo) {\n return validatorInfo.validate(component);\n });\n };\n var run$1 = function (component, invalidConfig, invalidState) {\n invalidConfig.notify.each(function (notifyInfo) {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(function (valid) {\n if (component.getSystem().isConnected()) {\n return valid.fold(function (err) {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, function (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 var isInvalid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n return has$2(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$1,\n isInvalid: isInvalid\n });\n\n var events$a = function (invalidConfig, invalidState) {\n return invalidConfig.validator.map(function (validatorInfo) {\n return derive([run(validatorInfo.onEvent, function (component) {\n run$1(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {\n run$1(component, invalidConfig, invalidState).get(noop);\n })] : []));\n }).getOr({});\n };\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$a\n });\n\n var InvalidateSchema = [\n strict$1('invalidClass'),\n defaulted$1('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted$1('aria', 'alert'),\n defaulted$1('getContainer', Optional.none),\n defaulted$1('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n strict$1('validate'),\n defaulted$1('onEvent', 'input'),\n defaulted$1('validateOnLoad', true)\n ])\n ];\n\n var Invalidating = create$1({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: function (validator) {\n return function (component) {\n var v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n var getCoupled = function (component, coupleConfig, coupleState, name) {\n return coupleState.getOrCreate(component, coupleConfig, name);\n };\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled\n });\n\n var CouplingSchema = [strictOf('others', setOf$1(Result.value, anyValue$1()))];\n\n var init$5 = function () {\n var coupled = {};\n var getOrCreate = function (component, coupleConfig, name) {\n var available = keys(coupleConfig.others);\n if (!available) {\n throw new Error('Cannot find coupled component: ' + name + '. Known coupled components: ' + JSON.stringify(available, null, 2));\n } else {\n return get$1(coupled, name).getOrThunk(function () {\n var builder = get$1(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n var spec = builder(component);\n var built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n }\n };\n var readState = constant({});\n return nu$5({\n readState: readState,\n getOrCreate: getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$5\n });\n\n var Coupling = create$1({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n var suffix = constant('sink');\n var partType = constant(optional({\n name: suffix(),\n overrides: constant({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightFirst'] = 0] = 'HighlightFirst';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 1] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n var getAnchor = function (detail, component) {\n var hotspot = detail.getHotspot(component).getOr(component);\n var anchor = 'hotspot';\n var overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(function () {\n return {\n anchor: anchor,\n hotspot: hotspot,\n overrides: overrides\n };\n }, function (layouts) {\n return {\n anchor: anchor,\n hotspot: hotspot,\n overrides: overrides,\n layouts: layouts\n };\n });\n };\n var fetch = function (detail, mapFetch, component) {\n var fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n var openF = function (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) {\n var futureData = fetch(detail, mapFetch, component);\n var getLazySink = getSink(component, detail);\n return futureData.map(function (tdata) {\n return tdata.bind(function (data) {\n return Optional.from(tieredMenu.sketch(__assign(__assign({}, externals.menu()), {\n uid: generate$2(''),\n data: data,\n highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,\n onOpenMenu: function (tmenu, menu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, anchor, menu);\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: function (tmenu, item, submenu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, {\n anchor: 'submenu',\n item: item\n }, submenu);\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, anchor, primaryMenu);\n each(submenuTriggers, function (st) {\n Positioning.position(sink, {\n anchor: 'submenu',\n item: st.triggeringItem\n }, st.triggeredMenu);\n });\n },\n onEscape: function () {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n })));\n });\n });\n };\n var open$1 = function (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) {\n var anchor = getAnchor(detail, hotspot);\n var processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(function (tdata) {\n tdata.fold(function () {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, function (data) {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n var close$1 = function (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n var togglePopup = function (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) {\n var sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n var showing = Sandboxing.isOpen(sandbox);\n var action = showing ? close$1 : open$1;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n var matchWidth = function (hotspot, container, useMinWidth) {\n var menu = Composing.getCurrent(container).getOr(container);\n var buttonWidth = get$8(hotspot.element);\n if (useMinWidth) {\n set$2(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$4(menu.element, buttonWidth);\n }\n };\n var getSink = function (anyInSystem, sinkDetail) {\n return anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(function (internalSink) {\n return function () {\n return Result.value(internalSink);\n };\n }).getOrThunk(function () {\n return sinkDetail.lazySink.fold(function () {\n return function () {\n return Result.error(new Error('No internal sink is specified, nor could an external sink be found'));\n };\n }, function (lazySinkFn) {\n return function () {\n return lazySinkFn(anyInSystem);\n };\n });\n });\n };\n var doRepositionMenus = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n var makeSandbox = function (detail, hotspot, extras) {\n var ariaOwner = manager();\n var onOpen = function (component, menu) {\n var anchor = getAnchor(detail, hotspot);\n ariaOwner.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 var onClose = function (component, menu) {\n ariaOwner.unlink(hotspot.element);\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n var lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: {\n id: ariaOwner.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: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOf(hotspot, queryElem);\n },\n getAttachPoint: function () {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: function (sandbox) {\n return Sandboxing.getState(sandbox).bind(function (menu) {\n return Composing.getCurrent(menu);\n });\n }\n }),\n Receiving.config({ channels: __assign(__assign({}, receivingChannel({ isExtraPart: never })), receivingChannel$1({ doReposition: doRepositionMenus })) })\n ])\n };\n };\n var repositionMenus = function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n var sandboxFields = function () {\n return [\n defaulted$1('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n };\n\n var schema$g = constant([\n strict$1('dom'),\n strict$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted$1('getHotspot', Optional.some),\n defaulted$1('getAnchorOverrides', constant({})),\n schema$1(),\n field$1('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n strict$1('toggleClass'),\n defaulted$1('eventOrder', {}),\n option('lazySink'),\n defaulted$1('matchWidth', false),\n defaulted$1('useMinWidth', false),\n option('role')\n ].concat(sandboxFields()));\n var parts$4 = constant([\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return { onExecute: detail.onExecute };\n }\n }),\n partType()\n ]);\n\n var factory$6 = function (detail, components, _spec, externals) {\n var _a;\n var lookupAttr = function (attr) {\n return get$1(detail.dom, 'attributes').bind(function (attrs) {\n return get$1(attrs, attr);\n });\n };\n var switchToMenu = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, function (x) {\n return x;\n }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var apis = {\n expand: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n isOpen: Toggling.isOn,\n close: function (comp) {\n if (Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n var triggerExecute = function (comp, _se) {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: 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: function (hotspot) {\n return makeSandbox(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: function (comp, _se) {\n if (Dropdown.isOpen(comp)) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: function (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$7(Optional.some(action)),\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n apis: apis,\n domModification: {\n attributes: __assign(__assign({ 'aria-haspopup': 'true' }, detail.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n })), detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {})\n }\n };\n };\n var Dropdown = composite$1({\n name: 'Dropdown',\n configFields: schema$g(),\n partFields: parts$4(),\n factory: factory$6,\n apis: {\n open: function (apis, comp) {\n return apis.open(comp);\n },\n expand: function (apis, comp) {\n return apis.expand(comp);\n },\n close: function (apis, comp) {\n return apis.close(comp);\n },\n isOpen: function (apis, comp) {\n return apis.isOpen(comp);\n },\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var exhibit$5 = function () {\n return nu$6({\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 };\n var events$b = function () {\n return derive([abort(selectstart(), always)]);\n };\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$b,\n exhibit: exhibit$5\n });\n\n var Unselecting = create$1({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n var renderPanelButton = function (spec, sharedBackstage) {\n return 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: function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (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 });\n },\n parts: { menu: part(false, 1, spec.presets) }\n });\n };\n\n var colorInputChangeEvent = generate$1('color-input-change');\n var colorSwatchChangeEvent = generate$1('color-swatch-change');\n var colorPickerCancelEvent = generate$1('color-picker-cancel');\n var renderColorInput = function (spec, sharedBackstage, colorInputBackstage) {\n var pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n onSetValue: function (c) {\n return Invalidating.run(c).get(noop);\n },\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: function (comp) {\n return parent(comp.element);\n },\n notify: {\n onValid: function (comp) {\n var val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: function (input) {\n var inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n var span = SugarElement.fromTag('span');\n set$2(span, 'background-color', inputValue);\n var res = getRaw(span, 'background-color').fold(function () {\n return Result.error('blah');\n }, function (_) {\n return Result.value(inputValue);\n });\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, sharedBackstage.providers);\n });\n var emitSwatchChange = function (colorBit, value) {\n emitWith(colorBit, colorSwatchChangeEvent, { value: value });\n };\n var onItemAction = function (comp, value) {\n memColorButton.getOpt(comp).each(function (colorBit) {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(function (valueOpt) {\n valueOpt.fold(function () {\n return emit(colorBit, colorPickerCancelEvent);\n }, function (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 var memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: function () {\n return [\n southwest$1,\n southeast$1,\n south$1\n ];\n },\n onLtr: function () {\n return [\n southeast$1,\n southwest$1,\n south$1\n ];\n }\n },\n components: [],\n fetch: getFetch(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction: 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(colorInputChangeEvent, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$2(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run(colorSwatchChangeEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run(colorPickerCancelEvent, function (comp, _se) {\n FormField.getField(comp).each(function (_field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var hsvColour = function (hue, saturation, value) {\n return {\n hue: hue,\n saturation: saturation,\n value: value\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red / 255;\n var g = rgbaColour.green / 255;\n var b = rgbaColour.blue / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var 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 var calcHex = function (value) {\n var hue = (100 - value) / 100 * 360;\n var hsv = hsvColour(hue, 100, 100);\n var rgb = fromHsv(hsv);\n return fromRgba(rgb);\n };\n\n var fieldsUpdate = generate$1('rgb-hex-update');\n var sliderUpdate = generate$1('slider-update');\n var paletteUpdate = generate$1('palette-update');\n\n var labelPart = optional({\n schema: [strict$1('dom')],\n name: 'label'\n });\n var edgePart = function (name) {\n return optional({\n name: '' + name + '-edge',\n overrides: function (detail) {\n var action = detail.model.manager.edgeActions[name];\n return action.fold(function () {\n return {};\n }, function (a) {\n return {\n events: derive([\n runActionExtra(touchstart(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousedown(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousemove(), function (comp, se, det) {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n };\n });\n }\n });\n };\n var tlEdgePart = edgePart('top-left');\n var tedgePart = edgePart('top');\n var trEdgePart = edgePart('top-right');\n var redgePart = edgePart('right');\n var brEdgePart = edgePart('bottom-right');\n var bedgePart = edgePart('bottom');\n var blEdgePart = edgePart('bottom-left');\n var ledgePart = edgePart('left');\n var thumbPart = required({\n name: 'thumb',\n defaults: constant({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (detail) {\n return {\n events: derive([\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 var spectrumPart = required({\n schema: [state$1('mouseIsDown', function () {\n return Cell(false);\n })],\n name: 'spectrum',\n overrides: function (detail) {\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var setValueFrom = function (component, simulatedEvent) {\n return model.getValueFromEvent(simulatedEvent).map(function (value) {\n return model.setValueFrom(component, detail, value);\n });\n };\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: function (spectrum) {\n return model.onLeft(spectrum, detail);\n },\n onRight: function (spectrum) {\n return model.onRight(spectrum, detail);\n },\n onUp: function (spectrum) {\n return model.onUp(spectrum, detail);\n },\n onDown: function (spectrum) {\n return model.onDown(spectrum, detail);\n }\n }),\n Focusing.config({})\n ]),\n events: derive([\n run(touchstart(), setValueFrom),\n run(touchmove(), setValueFrom),\n run(mousedown(), setValueFrom),\n run(mousemove(), function (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 var _sliderChangeEvent = 'slider.change.value';\n var sliderChangeEvent = constant(_sliderChangeEvent);\n var isTouchEvent = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event.raw;\n if (isTouchEvent(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(function (t) {\n return SugarPosition(t.clientX, t.clientY);\n }) : Optional.none();\n } else {\n var mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(function (me) {\n return SugarPosition(me.clientX, me.clientY);\n }) : Optional.none();\n }\n };\n\n var t = 'top', r$1 = 'right', b = 'bottom', l = 'left';\n var minX = function (detail) {\n return detail.model.minX;\n };\n var minY = function (detail) {\n return detail.model.minY;\n };\n var min1X = function (detail) {\n return detail.model.minX - 1;\n };\n var min1Y = function (detail) {\n return detail.model.minY - 1;\n };\n var maxX = function (detail) {\n return detail.model.maxX;\n };\n var maxY = function (detail) {\n return detail.model.maxY;\n };\n var max1X = function (detail) {\n return detail.model.maxX + 1;\n };\n var max1Y = function (detail) {\n return detail.model.maxY + 1;\n };\n var range$2 = function (detail, max, min) {\n return max(detail) - min(detail);\n };\n var xRange = function (detail) {\n return range$2(detail, maxX, minX);\n };\n var yRange = function (detail) {\n return range$2(detail, maxY, minY);\n };\n var halfX = function (detail) {\n return xRange(detail) / 2;\n };\n var halfY = function (detail) {\n return yRange(detail) / 2;\n };\n var step = function (detail) {\n return detail.stepSize;\n };\n var snap = function (detail) {\n return detail.snapToGrid;\n };\n var snapStart = function (detail) {\n return detail.snapStart;\n };\n var rounded = function (detail) {\n return detail.rounded;\n };\n var hasEdge = function (detail, edgeName) {\n return detail[edgeName + '-edge'] !== undefined;\n };\n var hasLEdge = function (detail) {\n return hasEdge(detail, l);\n };\n var hasREdge = function (detail) {\n return hasEdge(detail, r$1);\n };\n var hasTEdge = function (detail) {\n return hasEdge(detail, t);\n };\n var hasBEdge = function (detail) {\n return hasEdge(detail, b);\n };\n var currentValue = function (detail) {\n return detail.model.value.get();\n };\n\n var xValue = function (x) {\n return { x: x };\n };\n var yValue = function (y) {\n return { y: y };\n };\n var xyValue = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var fireSliderChange = function (component, value) {\n emitWith(component, sliderChangeEvent(), { value: value });\n };\n var setToTLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n var setToTEdge = function (edge, detail) {\n fireSliderChange(edge, yValue(min1Y(detail)));\n };\n var setToTEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n var setToTREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n var setToREdge = function (edge, detail) {\n fireSliderChange(edge, xValue(max1X(detail)));\n };\n var setToREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), halfY(detail)));\n };\n var setToBREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n var setToBEdge = function (edge, detail) {\n fireSliderChange(edge, yValue(max1Y(detail)));\n };\n var setToBEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n var setToBLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n var setToLEdge = function (edge, detail) {\n fireSliderChange(edge, xValue(min1X(detail)));\n };\n var setToLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n var reduceBy = function (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 var increaseBy = function (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 var capValue = function (value, min, max) {\n return Math.max(min, Math.min(max, value));\n };\n var snapValueOf = function (value, min, max, step, snapStart) {\n return snapStart.fold(function () {\n var initValue = value - min;\n var extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, function (start) {\n var remainder = (value - start) % step;\n var adjustment = Math.round(remainder / step);\n var rawSteps = Math.floor((value - start) / step);\n var maxSteps = Math.floor((max - start) / step);\n var numSteps = Math.min(maxSteps, rawSteps + adjustment);\n var r = start + numSteps * step;\n return Math.max(start, r);\n });\n };\n var findOffsetOf = function (value, min, max) {\n return Math.min(max, Math.max(value, min)) - min;\n };\n var findValueOf = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, step = args.step, snap = args.snap, snapStart = args.snapStart, rounded = args.rounded, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, minBound = args.minBound, maxBound = args.maxBound, screenRange = args.screenRange;\n var capMin = hasMinEdge ? min - 1 : min;\n var capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n var offset = findOffsetOf(value, minBound, maxBound);\n var 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 var findOffsetOfValue = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, maxBound = args.maxBound, maxOffset = args.maxOffset, centerMinEdge = args.centerMinEdge, centerMaxEdge = args.centerMaxEdge;\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 var top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n var getBounds$1 = function (component) {\n return component.element.dom.getBoundingClientRect();\n };\n var getBoundsProperty = function (bounds, property) {\n return bounds[property];\n };\n var getMinXBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, left);\n };\n var getMaxXBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, right);\n };\n var getMinYBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, top);\n };\n var getMaxYBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, bottom);\n };\n var getXScreenRange = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, width);\n };\n var getYScreenRange = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, height);\n };\n var getCenterOffsetOf = function (componentMinEdge, componentMaxEdge, spectrumMinEdge) {\n return (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n };\n var getXCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds$1(component);\n var spectrumBounds = getBounds$1(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, left);\n var componentMaxEdge = getBoundsProperty(componentBounds, right);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n var getYCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds$1(component);\n var spectrumBounds = getBounds$1(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, top);\n var componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n var fireSliderChange$1 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue = function (x) {\n return { x: x };\n };\n var findValueOfOffset = function (spectrum, detail, left) {\n var 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 var setValueFrom = function (spectrum, detail, value) {\n var xValue = findValueOfOffset(spectrum, detail, value);\n var sliderVal = sliderValue(xValue);\n fireSliderChange$1(spectrum, sliderVal);\n return xValue;\n };\n var setToMin = function (spectrum, detail) {\n var min = minX(detail);\n fireSliderChange$1(spectrum, sliderValue(min));\n };\n var setToMax = function (spectrum, detail) {\n var max = maxX(detail);\n fireSliderChange$1(spectrum, sliderValue(max));\n };\n var moveBy = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n fireSliderChange$1(spectrum, sliderValue(xValue));\n return Optional.some(xValue);\n };\n var handleMovement = function (direction) {\n return function (spectrum, detail) {\n return moveBy(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.left;\n });\n };\n var findOffsetOfValue$1 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getXScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue(args);\n };\n var findPositionOfValue = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n var setPositionFromValue = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var thumbRadius = get$8(thumb.element) / 2;\n set$2(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n var onLeft = handleMovement(-1);\n var onRight = handleMovement(1);\n var onUp = Optional.none;\n var onDown = Optional.none;\n var edgeActions = {\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,\n setToMin: setToMin,\n setToMax: setToMax,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n var fireSliderChange$2 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$1 = function (y) {\n return { y: y };\n };\n var findValueOfOffset$1 = function (spectrum, detail, top) {\n var 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 var setValueFrom$1 = function (spectrum, detail, value) {\n var yValue = findValueOfOffset$1(spectrum, detail, value);\n var sliderVal = sliderValue$1(yValue);\n fireSliderChange$2(spectrum, sliderVal);\n return yValue;\n };\n var setToMin$1 = function (spectrum, detail) {\n var min = minY(detail);\n fireSliderChange$2(spectrum, sliderValue$1(min));\n };\n var setToMax$1 = function (spectrum, detail) {\n var max = maxY(detail);\n fireSliderChange$2(spectrum, sliderValue$1(max));\n };\n var moveBy$1 = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var yValue = f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n fireSliderChange$2(spectrum, sliderValue$1(yValue));\n return Optional.some(yValue);\n };\n var handleMovement$1 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$1(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent$1 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.top;\n });\n };\n var findOffsetOfValue$2 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getYScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue(args);\n };\n var findPositionOfValue$1 = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue$2(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n var setPositionFromValue$1 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbRadius = get$7(thumb.element) / 2;\n set$2(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n var onLeft$1 = Optional.none;\n var onRight$1 = Optional.none;\n var onUp$1 = handleMovement$1(-1);\n var onDown$1 = handleMovement$1(1);\n var 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$1,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue$1,\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 var fireSliderChange$3 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$2 = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var setValueFrom$2 = function (spectrum, detail, value) {\n var xValue = findValueOfOffset(spectrum, detail, value.left);\n var yValue = findValueOfOffset$1(spectrum, detail, value.top);\n var val = sliderValue$2(xValue, yValue);\n fireSliderChange$3(spectrum, val);\n return val;\n };\n var moveBy$2 = function (direction, isVerticalMovement, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n var yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n fireSliderChange$3(spectrum, sliderValue$2(xValue, yValue));\n return Optional.some(xValue);\n };\n var handleMovement$2 = function (direction, isVerticalMovement) {\n return function (spectrum, detail) {\n return moveBy$2(direction, isVerticalMovement, spectrum, detail).map(always);\n };\n };\n var setToMin$2 = function (spectrum, detail) {\n var mX = minX(detail);\n var mY = minY(detail);\n fireSliderChange$3(spectrum, sliderValue$2(mX, mY));\n };\n var setToMax$2 = function (spectrum, detail) {\n var mX = maxX(detail);\n var mY = maxY(detail);\n fireSliderChange$3(spectrum, sliderValue$2(mX, mY));\n };\n var getValueFromEvent$2 = function (simulatedEvent) {\n return getEventSource(simulatedEvent);\n };\n var setPositionFromValue$2 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var xPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var yPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbXRadius = get$8(thumb.element) / 2;\n var thumbYRadius = get$7(thumb.element) / 2;\n set$2(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$2(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n var onLeft$2 = handleMovement$2(-1, false);\n var onRight$2 = handleMovement$2(1, false);\n var onUp$2 = handleMovement$2(-1, true);\n var onDown$2 = handleMovement$2(1, true);\n var edgeActions$2 = {\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$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n getValueFromEvent: getValueFromEvent$2,\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 var SliderSchema = [\n defaulted$1('stepSize', 1),\n defaulted$1('onChange', noop),\n defaulted$1('onChoose', noop),\n defaulted$1('onInit', noop),\n defaulted$1('onDragStart', noop),\n defaulted$1('onDragEnd', noop),\n defaulted$1('snapToGrid', false),\n defaulted$1('rounded', true),\n option('snapStart'),\n strictOf('model', choose$1('mode', {\n x: [\n defaulted$1('minX', 0),\n defaulted$1('maxX', 100),\n state$1('value', function (spec) {\n return Cell(spec.mode.minX);\n }),\n strict$1('getInitialValue'),\n output('manager', HorizontalModel)\n ],\n y: [\n defaulted$1('minY', 0),\n defaulted$1('maxY', 100),\n state$1('value', function (spec) {\n return Cell(spec.mode.minY);\n }),\n strict$1('getInitialValue'),\n output('manager', VerticalModel)\n ],\n xy: [\n defaulted$1('minX', 0),\n defaulted$1('maxX', 100),\n defaulted$1('minY', 0),\n defaulted$1('maxY', 100),\n state$1('value', function (spec) {\n return Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n });\n }),\n strict$1('getInitialValue'),\n output('manager', TwoDModel)\n ]\n })),\n field$1('sliderBehaviours', [\n Keying,\n Representing\n ]),\n state$1('mouseIsDown', function () {\n return Cell(false);\n })\n ];\n\n var sketch = function (detail, components, _spec, _externals) {\n var _a;\n var getThumb = function (component) {\n return getPartOrDie(component, detail, 'thumb');\n };\n var getSpectrum = function (component) {\n return getPartOrDie(component, detail, 'spectrum');\n };\n var getLeftEdge = function (component) {\n return getPart(component, detail, 'left-edge');\n };\n var getRightEdge = function (component) {\n return getPart(component, detail, 'right-edge');\n };\n var getTopEdge = function (component) {\n return getPart(component, detail, 'top-edge');\n };\n var getBottomEdge = function (component) {\n return getPart(component, detail, 'bottom-edge');\n };\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var refresh = function (slider, thumb) {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge: getLeftEdge,\n getRightEdge: getRightEdge,\n getTopEdge: getTopEdge,\n getBottomEdge: getBottomEdge,\n getSpectrum: getSpectrum\n });\n };\n var changeValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n var resetToMin = function (slider) {\n model.setToMin(slider, detail);\n };\n var resetToMax = function (slider) {\n model.setToMax(slider, detail);\n };\n var choose = function (slider) {\n var fireOnChoose = function () {\n getPart(slider, detail, 'thumb').each(function (thumb) {\n var value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n var wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n var onDragStart = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n var onDragEnd = function (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: components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: function (slider) {\n return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(always);\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_) {\n return modelDetail.value.get();\n }\n }\n }),\n Receiving.config({ channels: (_a = {}, _a[mouseReleased()] = { onReceive: choose }, _a) })\n ]),\n events: derive([\n run(sliderChangeEvent(), function (slider, simulatedEvent) {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached(function (slider, _simulatedEvent) {\n var getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n var spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run(touchstart(), onDragStart),\n run(touchend(), onDragEnd),\n run(mousedown(), onDragStart),\n run(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin: resetToMin,\n resetToMax: resetToMax,\n changeValue: changeValue,\n refresh: refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n var Slider = composite$1({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch,\n apis: {\n resetToMin: function (apis, slider) {\n apis.resetToMin(slider);\n },\n resetToMax: function (apis, slider) {\n apis.resetToMax(slider);\n },\n refresh: function (apis, slider) {\n apis.refresh(slider);\n }\n }\n });\n\n var sliderFactory = function (translate, getClass) {\n var spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n var 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({ y: 0 })\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: function (slider, _thumb, value) {\n emitWith(slider, sliderUpdate, { value: value });\n }\n });\n };\n\n var owner$3 = 'form';\n var schema$h = [field$1('formBehaviours', [Representing])];\n var getPartName = function (name) {\n return '';\n };\n var sketch$1 = function (fSpec) {\n var parts = function () {\n var record = [];\n var field = function (name, config) {\n record.push(name);\n return generateOne(owner$3, getPartName(name), config);\n };\n return {\n field: field,\n record: function () {\n return record;\n }\n };\n }();\n var spec = fSpec(parts);\n var partNames = parts.record();\n var fieldParts = map(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName(n)\n });\n });\n return composite(owner$3, schema$h, fieldParts, make$4, spec);\n };\n var toResult$1 = function (o, e) {\n return o.fold(function () {\n return Result.error(e);\n }, Result.value);\n };\n var make$4 = function (detail, components) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: function (form) {\n var resPs = getAllParts(form, detail);\n return map$2(resPs, function (resPThunk, pName) {\n return resPThunk().bind(function (v) {\n var opt = Composing.getCurrent(v);\n return toResult$1(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 },\n setValue: function (form, values) {\n each$1(values, function (newValue, key) {\n getPart(form, detail, key).each(function (wrapper) {\n Composing.getCurrent(wrapper).each(function (field) {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: function (form, key) {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n };\n };\n var Form = {\n getField: makeApi(function (apis, component, key) {\n return apis.getField(component, key);\n }),\n sketch: sketch$1\n };\n\n var validInput = generate$1('valid-input');\n var invalidInput = generate$1('invalid-input');\n var validatingInput = generate$1('validating-input');\n var translatePrefix = 'colorcustom.rgb.';\n var rgbFormFactory = function (translate, getClass, onValidHexx, onInvalidHexx) {\n var invalidation = function (label, isValid) {\n return Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: function (comp) {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: function (comp) {\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: function (comp) {\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: function (comp) {\n var value = Representing.getValue(comp);\n var res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n };\n var renderTextField = function (isValid, name, label, description, data) {\n var helptext = translate(translatePrefix + 'range');\n var pLabel = FormField.parts.label({\n dom: {\n tag: 'label',\n innerHtml: label,\n attributes: { 'aria-label': description }\n }\n });\n var pField = FormField.parts.field({\n data: data,\n factory: Input,\n inputAttributes: __assign({ type: 'text' }, name === 'hex' ? { 'aria-live': 'polite' } : {}),\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid),\n Tabstopping.config({})\n ]),\n onSetValue: function (input) {\n if (Invalidating.isInvalid(input)) {\n var run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n var comps = [\n pLabel,\n pField\n ];\n var concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n var components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: components\n };\n };\n var copyRgbToHex = function (form, rgba) {\n var hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(function (hexField) {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n var copyRgbToForm = function (form, rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n Representing.setValue(form, {\n red: red,\n green: green,\n blue: blue\n });\n };\n var memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n var updatePreview = function (anyInSystem, hex) {\n memPreview.getOpt(anyInSystem).each(function (preview) {\n set$2(preview.element, 'background-color', '#' + hex.value);\n });\n };\n var factory = function () {\n var 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 var copyHexToRgb = function (form, hex) {\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n var get = function (prop) {\n return state[prop].get();\n };\n var set = function (prop, value) {\n state[prop].set(value);\n };\n var getValueRgb = function () {\n return get('red').bind(function (red) {\n return get('green').bind(function (green) {\n return get('blue').map(function (blue) {\n return rgbaColour(red, green, blue, 1);\n });\n });\n });\n };\n var setValueRgb = function (rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n var onInvalidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n var onValidHex = function (form, value) {\n onValidHexx(form);\n var hex = hexColour(value);\n set('hex', Optional.some(value));\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex: hex });\n updatePreview(form, hex);\n };\n var onValidRgb = function (form, prop, value) {\n var val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(function (rgb) {\n var hex = copyRgbToHex(form, rgb);\n updatePreview(form, hex);\n });\n };\n var isHexInputEvent = function (data) {\n return data.type === 'hex';\n };\n var onValidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n var formPartStrings = function (key) {\n return {\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n };\n };\n var redStrings = formPartStrings('red');\n var greenStrings = formPartStrings('green');\n var blueStrings = formPartStrings('blue');\n var hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(function (parts) {\n return {\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(validInput, onValidInput),\n run(invalidInput, onInvalidInput),\n run(validatingInput, onInvalidInput)\n ])\n ])\n };\n }), {\n apis: {\n updateHex: function (form, hex) {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n var rgbFormSketcher = single$2({\n factory: factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: function (apis, form, hex) {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n var paletteFactory = function (_translate, getClass) {\n var spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n var thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: '
'\n }\n });\n var setColour = function (canvas, rgba) {\n var width = canvas.width, height = canvas.height;\n var ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n var 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 var 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 var setSliderColour = function (slider, rgba) {\n var canvas = slider.components()[0].element.dom;\n setColour(canvas, toString(rgba));\n };\n var factory = function (_detail) {\n var getInitialValue = constant({\n x: 0,\n y: 0\n });\n var onChange = function (slider, _thumb, value) {\n emitWith(slider, paletteUpdate, { value: value });\n };\n var onInit = function (_slider, _thumb, spectrum, _value) {\n setColour(spectrum.element.dom, toString(red));\n };\n var 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: getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange: onChange,\n onInit: onInit,\n sliderBehaviours: sliderBehaviours\n });\n };\n var saturationBrightnessPaletteSketcher = single$2({\n factory: factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setRgba: function (_apis, slider, rgba) {\n setSliderColour(slider, rgba);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n var makeFactory = function (translate, getClass) {\n var factory = function (detail) {\n var rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n var sbPalette = paletteFactory(translate, getClass);\n var state = { paletteRgba: Cell(red) };\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n var rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n sbPalette.setRgba(palette, rgba);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var runUpdates = function (anyInSystem, hex, updates) {\n each(updates, function (update) {\n update(anyInSystem, hex);\n });\n };\n var paletteUpdates = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event.value;\n var oldRgb = state.paletteRgba.get();\n var hsvColour$1 = fromRgb(oldRgb);\n var newHsvColour = hsvColour(hsvColour$1.hue, value.x, 100 - value.y);\n var rgb = fromHsv(newHsvColour);\n var nuHex = fromRgba(rgb);\n runUpdates(form, nuHex, updates);\n };\n };\n var sliderUpdates = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event.value;\n var hex = calcHex(value.y);\n runUpdates(form, hex, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n sliderFactory(translate, getClass),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run(paletteUpdate, paletteUpdates()),\n run(sliderUpdate, sliderUpdates())\n ]),\n Composing.config({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single$2({\n name: 'ColourPicker',\n configFields: [\n strict$1('dom'),\n defaulted$1('onValidHex', noop),\n defaulted$1('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: Optional.some });\n };\n var memento = function (mem) {\n return Composing.config({ find: mem.getOpt });\n };\n var childAt = function (index) {\n return Composing.config({\n find: function (comp) {\n return child(comp.element, index).bind(function (element) {\n return comp.getSystem().getByDom(element).toOptional();\n });\n }\n });\n };\n var ComposingConfigs = {\n self: self$1,\n memento: memento,\n childAt: childAt\n };\n\n var 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 'colorcustom.sb.saturation': 'Saturation',\n 'colorcustom.sb.brightness': 'Brightness',\n 'colorcustom.sb.picker': 'Saturation and Brightness Picker',\n 'colorcustom.sb.palette': 'Saturation and Brightness Palette',\n 'colorcustom.sb.instructions': 'Use arrow keys to select saturation and brightness, on x and y axes',\n 'colorcustom.hue.hue': 'Hue',\n 'colorcustom.hue.slider': 'Hue Slider',\n 'colorcustom.hue.palette': 'Hue Palette',\n 'colorcustom.hue.instructions': 'Use arrow keys to select a hue',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n var getEnglishText = function (key) {\n return english[key];\n };\n var translate$1 = function (key) {\n return getEnglishText(key);\n };\n var renderColorPicker = function (_spec) {\n var getClass = function (key) {\n return 'tox-' + key;\n };\n var colourPickerFactory = makeFactory(translate$1, getClass);\n var onValidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n var onInvalidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n var memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex: onValidHex,\n onInvalidHex: onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n var optHex = optRgbForm.bind(function (rgbForm) {\n var formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(function (hex) {\n return '#' + hex;\n }).getOr('');\n },\n setValue: function (comp, newValue) {\n var pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n var m = pattern.exec(newValue);\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(function () {\n console.log('Can not find form');\n }, function (rgbForm) {\n Representing.setValue(rgbForm, { hex: Optional.from(m[1]).getOr('') });\n Form.getField(rgbForm, 'hex').each(function (hexField) {\n emit(hexField, input());\n });\n });\n }\n }\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var isOldCustomEditor = function (spec) {\n return Object.prototype.hasOwnProperty.call(spec, 'init');\n };\n var renderCustomEditor = function (spec) {\n var editorApi = Cell(Optional.none());\n var memReplaced = record({ dom: { tag: spec.tag } });\n var initialValue = Cell(Optional.none());\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(function (component) {\n memReplaced.getOpt(component).each(function (ta) {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$b.load(spec.scriptId, spec.scriptUrl).then(function (init) {\n return init(ta.element.dom, spec.settings);\n })).then(function (ea) {\n initialValue.get().each(function (cvalue) {\n ea.setValue(cvalue);\n });\n initialValue.set(Optional.none());\n editorApi.set(Optional.some(ea));\n });\n });\n })]),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return editorApi.get().fold(function () {\n return initialValue.get().getOr('');\n }, function (ed) {\n return ed.getValue();\n });\n },\n setValue: function (component, value) {\n editorApi.get().fold(function () {\n initialValue.set(Optional.some(value));\n }, function (ed) {\n return ed.setValue(value);\n });\n }\n }\n }),\n ComposingConfigs.self()\n ]),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var processors = objOf([\n defaulted$1('preprocess', identity),\n defaulted$1('postprocess', identity)\n ]);\n var memento$1 = function (mem, rawProcessors) {\n var ps = asRawOrDie('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var other = mem.get(comp);\n var rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: function (comp, rawValue) {\n var newValue = ps.preprocess(rawValue);\n var other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n var withComp = function (optInitialValue, getter, setter) {\n return Representing.config(deepMerge({\n store: {\n mode: 'manual',\n getValue: getter,\n setValue: setter\n }\n }, optInitialValue.map(function (initialValue) {\n return { store: { initialValue: initialValue } };\n }).getOr({})));\n };\n var withElement = function (initialValue, getter, setter) {\n return withComp(initialValue, function (c) {\n return getter(c.element);\n }, function (c, v) {\n return setter(c.element, v);\n });\n };\n var domValue = function (optInitialValue) {\n return withElement(optInitialValue, get$6, set$3);\n };\n var domHtml = function (optInitialValue) {\n return withElement(optInitialValue, get$2, set);\n };\n var memory$1 = function (initialValue) {\n return Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialValue\n }\n });\n };\n var RepresentingConfigs = {\n memento: memento$1,\n withElement: withElement,\n withComp: withComp,\n domValue: domValue,\n domHtml: domHtml,\n memory: memory$1\n };\n\n var defaultImageFileTypes = 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp';\n var filterByExtension = function (files, providersBackstage) {\n var allowedImageFileTypes = global$c.explode(providersBackstage.getSetting('images_file_types', defaultImageFileTypes, 'string'));\n var isFileInAllowedTypes = function (file) {\n return exists(allowedImageFileTypes, function (type) {\n return endsWith(file.name.toLowerCase(), '.' + type.toLowerCase());\n });\n };\n return filter(from$1(files), isFileInAllowedTypes);\n };\n var renderDropZone = function (spec, providersBackstage) {\n var stopper = function (_, se) {\n se.stop();\n };\n var sequence = function (actions) {\n return function (comp, se) {\n each(actions, function (a) {\n a(comp, se);\n });\n };\n };\n var onDrop = function (comp, se) {\n if (!Disabling.isDisabled(comp)) {\n var transferEvent = se.event.raw;\n handleFiles(comp, transferEvent.dataTransfer.files);\n }\n };\n var onSelect = function (component, simulatedEvent) {\n var input = simulatedEvent.event.raw.target;\n handleFiles(component, input.files);\n };\n var handleFiles = function (component, files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n };\n var 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 var renderField = function (s) {\n return {\n uid: s.uid,\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n RepresentingConfigs.memory([]),\n ComposingConfigs.self(),\n Disabling.config({}),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run('dragover', stopper),\n run('drop', sequence([\n stopper,\n onDrop\n ])),\n run(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: {\n tag: 'p',\n innerHtml: providersBackstage.translate('Drop an image here')\n }\n },\n Button.sketch({\n dom: {\n tag: 'button',\n innerHtml: providersBackstage.translate('Browse for an image'),\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [memInput.asSpec()],\n action: function (comp) {\n var 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 };\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts.field({ factory: { sketch: renderField } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var renderGrid = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n 'tox-form__grid--' + spec.columns + 'col'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var beforeObject = generate$1('alloy-fake-before-tabstop');\n var afterObject = generate$1('alloy-fake-after-tabstop');\n var craftWithClasses = function (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: classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n var craft = function (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 var triggerTab = function (placeholder, shiftKey) {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey: shiftKey\n }\n });\n };\n var onFocus$1 = function (container, targetComp) {\n var target = targetComp.element;\n if (has$2(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has$2(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n var isPseudoStop = function (element) {\n return closest$4(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n var platformNeedsSandboxing = !(detect$3().browser.isIE() || detect$3().browser.isEdge());\n var getDynamicSource = function (isSandbox) {\n var cachedValue = Cell('');\n return {\n getValue: function (_frameComponent) {\n return cachedValue.get();\n },\n setValue: function (frameComponent, html) {\n if (!isSandbox) {\n set$1(frameComponent.element, 'src', 'javascript:\\'\\'');\n var doc = frameComponent.element.dom.contentWindow.document;\n doc.open();\n doc.write(html);\n doc.close();\n } else {\n set$1(frameComponent.element, 'srcdoc', html);\n }\n cachedValue.set(html);\n }\n };\n };\n var renderIFrame = function (spec, providersBackstage) {\n var isSandbox = platformNeedsSandboxing && spec.sandboxed;\n var attributes = __assign(__assign({}, spec.label.map(function (title) {\n return { title: title };\n }).getOr({})), isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {});\n var sourcing = getDynamicSource(isSandbox);\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var factory = function (newSpec) {\n return craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes: attributes\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(Optional.none(), sourcing.getValue, sourcing.setValue)\n ])\n });\n };\n var pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var create$5 = function (width, height) {\n return resize(document.createElement('canvas'), width, height);\n };\n var clone$1 = function (canvas) {\n var tCanvas = create$5(canvas.width, canvas.height);\n var ctx = get2dContext(tCanvas);\n ctx.drawImage(canvas, 0, 0);\n return tCanvas;\n };\n var get2dContext = function (canvas) {\n return canvas.getContext('2d');\n };\n var resize = function (canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n };\n\n var getWidth = function (image) {\n return image.naturalWidth || image.width;\n };\n var getHeight = function (image) {\n return image.naturalHeight || image.height;\n };\n\n var promise = function () {\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var anyWindow = window;\n var asap = Promise.immediateFn || typeof anyWindow.setImmediate === 'function' && anyWindow.setImmediate || function (fn) {\n return setTimeout(fn, 1);\n };\n var bind = function (fn, thisArg) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fn.apply(thisArg, args);\n };\n };\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var _i = 0, _a = this._deferreds; _i < _a.length; _i++) {\n var deferred = _a[_i];\n handle.call(this, deferred);\n }\n this._deferreds = [];\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n var doResolve = function (fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n };\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n var res = function (i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n };\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (reason) {\n return new Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n value.then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var Promise$1 = window.Promise ? window.Promise : promise();\n\n var blobToImage = function (blob) {\n return new Promise$1(function (resolve, reject) {\n var blobUrl = URL.createObjectURL(blob);\n var image = new Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n var loaded = function () {\n removeListeners();\n resolve(image);\n };\n var error = function () {\n removeListeners();\n reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);\n };\n image.addEventListener('load', loaded);\n image.addEventListener('error', error);\n image.src = blobUrl;\n if (image.complete) {\n setTimeout(loaded, 0);\n }\n });\n };\n var dataUriToBlobSync = function (uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Optional.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = atob(base64);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return Optional.some(new Blob(byteArrays, { type: mimetype }));\n };\n var dataUriToBlob = function (uri) {\n return new Promise$1(function (resolve, reject) {\n dataUriToBlobSync(uri).fold(function () {\n reject('uri is not base64: ' + uri);\n }, resolve);\n });\n };\n var canvasToBlob = function (canvas, type, quality) {\n type = type || 'image/png';\n if (isFunction(HTMLCanvasElement.prototype.toBlob)) {\n return new Promise$1(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n } else {\n reject();\n }\n }, type, quality);\n });\n } else {\n return dataUriToBlob(canvas.toDataURL(type, quality));\n }\n };\n var canvasToDataURL = function (canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n };\n var blobToCanvas = function (blob) {\n return blobToImage(blob).then(function (image) {\n revokeImageUrl(image);\n var canvas = create$5(getWidth(image), getHeight(image));\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0);\n return canvas;\n });\n };\n var blobToDataUri = function (blob) {\n return new Promise$1(function (resolve) {\n var reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var revokeImageUrl = function (image) {\n URL.revokeObjectURL(image.src);\n };\n\n var create$6 = function (getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant(initialType);\n var toBlob = function () {\n return Promise$1.resolve(blob);\n };\n var toDataURL = constant(uri);\n var toBase64 = function () {\n return uri.split(',')[1];\n };\n var toAdjustedBlob = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n };\n var toAdjustedDataURL = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n };\n var toAdjustedBase64 = function (type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n };\n var toCanvas = function () {\n return getCanvas.then(clone$1);\n };\n return {\n getType: getType,\n toBlob: toBlob,\n toDataURL: toDataURL,\n toBase64: toBase64,\n toAdjustedBlob: toAdjustedBlob,\n toAdjustedDataURL: toAdjustedDataURL,\n toAdjustedBase64: toAdjustedBase64,\n toCanvas: toCanvas\n };\n };\n var fromBlob = function (blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$6(blobToCanvas(blob), blob, uri);\n });\n };\n var fromCanvas = function (canvas, type) {\n return canvasToBlob(canvas, type).then(function (blob) {\n return create$6(Promise$1.resolve(canvas), blob, canvas.toDataURL());\n });\n };\n\n var blobToImageResult = function (blob) {\n return fromBlob(blob);\n };\n\n var clamp$1 = function (value, min, max) {\n var parsedValue = typeof value === 'string' ? parseFloat(value) : value;\n if (parsedValue > max) {\n parsedValue = max;\n } else if (parsedValue < min) {\n parsedValue = min;\n }\n return parsedValue;\n };\n var identity$1 = function () {\n return [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ];\n };\n var DELTA_INDEX = [\n 0,\n 0.01,\n 0.02,\n 0.04,\n 0.05,\n 0.06,\n 0.07,\n 0.08,\n 0.1,\n 0.11,\n 0.12,\n 0.14,\n 0.15,\n 0.16,\n 0.17,\n 0.18,\n 0.2,\n 0.21,\n 0.22,\n 0.24,\n 0.25,\n 0.27,\n 0.28,\n 0.3,\n 0.32,\n 0.34,\n 0.36,\n 0.38,\n 0.4,\n 0.42,\n 0.44,\n 0.46,\n 0.48,\n 0.5,\n 0.53,\n 0.56,\n 0.59,\n 0.62,\n 0.65,\n 0.68,\n 0.71,\n 0.74,\n 0.77,\n 0.8,\n 0.83,\n 0.86,\n 0.89,\n 0.92,\n 0.95,\n 0.98,\n 1,\n 1.06,\n 1.12,\n 1.18,\n 1.24,\n 1.3,\n 1.36,\n 1.42,\n 1.48,\n 1.54,\n 1.6,\n 1.66,\n 1.72,\n 1.78,\n 1.84,\n 1.9,\n 1.96,\n 2,\n 2.12,\n 2.25,\n 2.37,\n 2.5,\n 2.62,\n 2.75,\n 2.87,\n 3,\n 3.2,\n 3.4,\n 3.6,\n 3.8,\n 4,\n 4.3,\n 4.7,\n 4.9,\n 5,\n 5.5,\n 6,\n 6.5,\n 6.8,\n 7,\n 7.3,\n 7.5,\n 7.8,\n 8,\n 8.4,\n 8.7,\n 9,\n 9.4,\n 9.6,\n 9.8,\n 10\n ];\n var multiply = function (matrix1, matrix2) {\n var col = [];\n var out = new Array(25);\n var val;\n for (var i = 0; i < 5; i++) {\n for (var j = 0; j < 5; j++) {\n col[j] = matrix2[j + i * 5];\n }\n for (var j = 0; j < 5; j++) {\n val = 0;\n for (var k = 0; k < 5; k++) {\n val += matrix1[j + k * 5] * col[k];\n }\n out[j + i * 5] = val;\n }\n }\n return out;\n };\n var adjustContrast = function (matrix, value) {\n var x;\n value = clamp$1(value, -1, 1);\n value *= 100;\n if (value < 0) {\n x = 127 + value / 100 * 127;\n } else {\n x = value % 1;\n if (x === 0) {\n x = DELTA_INDEX[value];\n } else {\n x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;\n }\n x = x * 127 + 127;\n }\n return multiply(matrix, [\n x / 127,\n 0,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n x / 127,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n x / 127,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustBrightness = function (matrix, value) {\n value = clamp$1(255 * value, -255, 255);\n return multiply(matrix, [\n 1,\n 0,\n 0,\n 0,\n value,\n 0,\n 1,\n 0,\n 0,\n value,\n 0,\n 0,\n 1,\n 0,\n value,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustColors = function (matrix, adjustR, adjustG, adjustB) {\n adjustR = clamp$1(adjustR, 0, 2);\n adjustG = clamp$1(adjustG, 0, 2);\n adjustB = clamp$1(adjustB, 0, 2);\n return multiply(matrix, [\n adjustR,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustG,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n\n var colorFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyColorFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pixelsData, m) {\n var r, g, b, a;\n var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];\n for (var i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;\n data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;\n data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;\n data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;\n }\n return pixelsData;\n };\n var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n var convoluteFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyConvoluteFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pIn, pOut, aMatrix) {\n var clamp = function (value, min, max) {\n if (value > max) {\n value = max;\n } else if (value < min) {\n value = min;\n }\n return value;\n };\n var side = Math.round(Math.sqrt(aMatrix.length));\n var halfSide = Math.floor(side / 2);\n var rgba = pIn.data;\n var drgba = pOut.data;\n var w = pIn.width;\n var h = pIn.height;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scx = clamp(x + cx - halfSide, 0, w - 1);\n var scy = clamp(y + cy - halfSide, 0, h - 1);\n var innerOffset = (scy * w + scx) * 4;\n var wt = aMatrix[cy * side + cx];\n r += rgba[innerOffset] * wt;\n g += rgba[innerOffset + 1] * wt;\n b += rgba[innerOffset + 2] * wt;\n }\n }\n var offset = (y * w + x) * 4;\n drgba[offset] = clamp(r, 0, 255);\n drgba[offset + 1] = clamp(g, 0, 255);\n drgba[offset + 2] = clamp(b, 0, 255);\n }\n }\n return pOut;\n };\n var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);\n var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);\n pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);\n context.putImageData(pixelsOut, 0, 0);\n return fromCanvas(canvas, type);\n };\n var functionColorFilter = function (colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n var applyLookup = function (pixelsData, lookupData) {\n var data = pixelsData.data;\n for (var i = 0; i < data.length; i += 4) {\n data[i] = lookupData[data[i]];\n data[i + 1] = lookupData[data[i + 1]];\n data[i + 2] = lookupData[data[i + 2]];\n }\n return pixelsData;\n };\n for (var i = 0; i < lookup.length; i++) {\n lookup[i] = colorFn(i, value);\n }\n var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n return function (ir, value) {\n return ir.toCanvas().then(function (canvas) {\n return filterImpl(canvas, ir.getType(), value);\n });\n };\n };\n var complexAdjustableColorFilter = function (matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity$1(), adjust));\n };\n };\n var basicColorFilter = function (matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n };\n var basicConvolutionFilter = function (kernel) {\n return function (ir) {\n return convoluteFilter(ir, kernel);\n };\n };\n var invert = basicColorFilter([\n -1,\n 0,\n 0,\n 0,\n 255,\n 0,\n -1,\n 0,\n 0,\n 255,\n 0,\n 0,\n -1,\n 0,\n 255,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n var brightness = complexAdjustableColorFilter(adjustBrightness);\n var contrast = complexAdjustableColorFilter(adjustContrast);\n var colorize = function (ir, adjustR, adjustG, adjustB) {\n return colorFilter(ir, adjustColors(identity$1(), adjustR, adjustG, adjustB));\n };\n var sharpen = basicConvolutionFilter([\n 0,\n -1,\n 0,\n -1,\n 5,\n -1,\n 0,\n -1,\n 0\n ]);\n var gamma = functionColorFilter(function (color, value) {\n return Math.pow(color / 255, 1 - value) * 255;\n });\n\n var scale = function (image, dW, dH) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var wRatio = dW / sW;\n var hRatio = dH / sH;\n var scaleCapped = false;\n if (wRatio < 0.5 || wRatio > 2) {\n wRatio = wRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n if (hRatio < 0.5 || hRatio > 2) {\n hRatio = hRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n var scaled = _scale(image, wRatio, hRatio);\n return !scaleCapped ? scaled : scaled.then(function (tCanvas) {\n return scale(tCanvas, dW, dH);\n });\n };\n var _scale = function (image, wRatio, hRatio) {\n return new Promise$1(function (resolve) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var dW = Math.floor(sW * wRatio);\n var dH = Math.floor(sH * hRatio);\n var canvas = create$5(dW, dH);\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);\n resolve(canvas);\n });\n };\n\n var rotate = function (ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n };\n var applyRotate = function (image, type, angle) {\n var canvas = create$5(image.width, image.height);\n var context = get2dContext(canvas);\n var translateX = 0;\n var translateY = 0;\n angle = angle < 0 ? 360 + angle : angle;\n if (angle === 90 || angle === 270) {\n resize(canvas, canvas.height, canvas.width);\n }\n if (angle === 90 || angle === 180) {\n translateX = canvas.width;\n }\n if (angle === 270 || angle === 180) {\n translateY = canvas.height;\n }\n context.translate(translateX, translateY);\n context.rotate(angle * Math.PI / 180);\n context.drawImage(image, 0, 0);\n return fromCanvas(canvas, type);\n };\n var flip = function (ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n };\n var applyFlip = function (image, type, axis) {\n var canvas = create$5(image.width, image.height);\n var context = get2dContext(canvas);\n if (axis === 'v') {\n context.scale(1, -1);\n context.drawImage(image, 0, -canvas.height);\n } else {\n context.scale(-1, 1);\n context.drawImage(image, -canvas.width, 0);\n }\n return fromCanvas(canvas, type);\n };\n var crop = function (ir, x, y, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return applyCrop(canvas, ir.getType(), x, y, w, h);\n });\n };\n var applyCrop = function (image, type, x, y, w, h) {\n var canvas = create$5(w, h);\n var context = get2dContext(canvas);\n context.drawImage(image, -x, -y);\n return fromCanvas(canvas, type);\n };\n var resize$1 = function (ir, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return scale(canvas, w, h).then(function (newCanvas) {\n return fromCanvas(newCanvas, ir.getType());\n });\n });\n };\n\n var invert$1 = function (ir) {\n return invert(ir);\n };\n var sharpen$1 = function (ir) {\n return sharpen(ir);\n };\n var gamma$1 = function (ir, value) {\n return gamma(ir, value);\n };\n var colorize$1 = function (ir, adjustR, adjustG, adjustB) {\n return colorize(ir, adjustR, adjustG, adjustB);\n };\n var brightness$1 = function (ir, adjust) {\n return brightness(ir, adjust);\n };\n var contrast$1 = function (ir, adjust) {\n return contrast(ir, adjust);\n };\n var flip$1 = function (ir, axis) {\n return flip(ir, axis);\n };\n var crop$1 = function (ir, x, y, w, h) {\n return crop(ir, x, y, w, h);\n };\n var resize$2 = function (ir, w, h) {\n return resize$1(ir, w, h);\n };\n var rotate$1 = function (ir, angle) {\n return rotate(ir, angle);\n };\n\n var renderIcon$1 = function (iconHtml, behaviours) {\n return __assign({\n dom: {\n tag: 'span',\n innerHtml: iconHtml,\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ]\n }\n }, behaviours);\n };\n var renderIconFromPack = function (iconName, iconsProvider) {\n return renderIcon$1(get$e(iconName, iconsProvider), {});\n };\n var renderReplacableIconFromPack = function (iconName, iconsProvider) {\n return renderIcon$1(get$e(iconName, iconsProvider), { behaviours: derive$1([Replacing.config({})]) });\n };\n var renderLabel$1 = function (text, prefix, providersBackstage) {\n return {\n dom: {\n tag: 'span',\n innerHtml: providersBackstage.translate(text),\n classes: [prefix + '__select-label']\n },\n behaviours: derive$1([Replacing.config({})])\n };\n };\n\n var _a$1;\n var internalToolbarButtonExecute = generate$1('toolbar.button.execute');\n var onToolbarButtonExecute = function (info) {\n return runOnExecute(function (comp, _simulatedEvent) {\n runWithApi(info, comp)(function (itemApi) {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n };\n var toolbarButtonEventOrder = (_a$1 = {}, _a$1[execute()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ], _a$1);\n\n var updateMenuText = generate$1('update-menu-text');\n var updateMenuIcon = generate$1('update-menu-icon');\n var renderCommonDropdown = function (spec, prefix, sharedBackstage) {\n var editorOffCell = Cell(noop);\n var optMemDisplayText = spec.text.map(function (text) {\n return record(renderLabel$1(text, prefix, sharedBackstage.providers));\n });\n var optMemDisplayIcon = spec.icon.map(function (iconName) {\n return record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons));\n });\n var onLeftOrRightInMenu = function (comp, se) {\n var 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 var role = spec.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n });\n var tooltipAttributes = spec.tooltip.fold(function () {\n return {};\n }, function (tooltip) {\n var translatedTooltip = sharedBackstage.providers.translate(tooltip);\n return {\n 'title': translatedTooltip,\n 'aria-label': translatedTooltip\n };\n });\n var memDropdown = record(Dropdown.sketch(__assign(__assign(__assign({}, spec.uid ? { uid: spec.uid } : {}), role), {\n dom: {\n tag: 'button',\n classes: [\n prefix,\n prefix + '--select'\n ].concat(map(spec.classes, function (c) {\n return prefix + '--' + c;\n })),\n attributes: __assign({}, tooltipAttributes)\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(function (mem) {\n return mem.asSpec();\n }),\n optMemDisplayText.map(function (mem) {\n return mem.asSpec();\n }),\n Optional.some({\n dom: {\n tag: 'div',\n classes: [prefix + '__select-chevron'],\n innerHtml: get$e('chevron-down', sharedBackstage.providers.icons)\n }\n })\n ]),\n matchWidth: true,\n useMinWidth: true,\n dropdownBehaviours: derive$1(__spreadArrays(spec.dropdownBehaviours, [\n DisablingConfigs.button(function () {\n return spec.disabled || sharedBackstage.providers.isDisabled();\n }),\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(updateMenuText, function (comp, se) {\n optMemDisplayText.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayText) {\n Replacing.set(displayText, [text(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run(updateMenuIcon, function (comp, se) {\n optMemDisplayIcon.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayIcon) {\n Replacing.set(displayIcon, [renderReplacableIconFromPack(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([Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n })]),\n lazySink: sharedBackstage.getSink,\n toggleClass: prefix + '--active',\n parts: { menu: part(false, spec.columns, spec.presets) },\n fetch: function (comp) {\n return Future.nu(curry(spec.fetch, comp));\n }\n })));\n return memDropdown.asSpec();\n };\n\n var isMenuItemReference = function (item) {\n return isString(item);\n };\n var isSeparator = function (item) {\n return item.type === 'separator';\n };\n var isExpandingMenuItem = function (item) {\n return has(item, 'getSubmenuItems');\n };\n var separator$1 = { type: 'separator' };\n var unwrapReferences = function (items, menuItems) {\n var realItems = foldl(items, function (acc, item) {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator(acc[acc.length - 1]) ? acc.concat([separator$1]) : acc;\n } else if (has(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(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n var getFromExpandingItem = function (item, menuItems) {\n var submenuItems = item.getSubmenuItems();\n var rest = expand(submenuItems, menuItems);\n var newMenus = deepMerge(rest.menus, wrap$1(item.value, rest.items));\n var newExpansions = deepMerge(rest.expansions, wrap$1(item.value, item.value));\n return {\n item: item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n var getFromItem = function (item, menuItems) {\n return isExpandingMenuItem(item) ? getFromExpandingItem(item, menuItems) : {\n item: item,\n menus: {},\n expansions: {}\n };\n };\n var generateValueIfRequired = function (item) {\n if (isSeparator(item)) {\n return item;\n } else {\n var itemValue = get$1(item, 'value').getOrThunk(function () {\n return generate$1('generated-menu-item');\n });\n return deepMerge({ value: itemValue }, item);\n }\n };\n var expand = function (items, menuItems) {\n var realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, function (acc, item) {\n var itemWithValue = generateValueIfRequired(item);\n var newData = getFromItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [newData.item].concat(acc.items),\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n var build$2 = function (items, itemResponse, backstage, isHorizontalMenu) {\n var primary = generate$1('primary-menu');\n var data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, isHorizontalMenu);\n var submenus = map$2(data.menus, function (menuItems, menuName) {\n return createPartialMenu(menuName, menuItems, itemResponse, backstage, false);\n });\n var menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n var getMenuButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n },\n setActive: function (state) {\n var elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$1(elm, 'aria-pressed', true);\n } else {\n remove$4(elm, 'tox-tbtn--enabled');\n remove$1(elm, 'aria-pressed');\n }\n },\n isActive: function () {\n return has$2(component.element, 'tox-tbtn--enabled');\n }\n };\n };\n var renderMenuButton = function (spec, prefix, backstage, role) {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n role: role,\n fetch: function (_comp, callback) {\n spec.fetch(function (items) {\n callback(build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n });\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 var getFetch$1 = function (items, getButton, backstage) {\n var getMenuItemAction = function (item) {\n return function (api) {\n var newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(function (sink) {\n getButton().getOpt(sink).each(function (orig) {\n focus$1(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n };\n var getMenuItemSetup = function (item) {\n return function (api) {\n api.setActive(item.storage.get());\n };\n };\n return function (success) {\n success(map(items, function (item) {\n var text = item.text.fold(function () {\n return {};\n }, function (text) {\n return { text: text };\n });\n return __assign(__assign({\n type: item.type,\n active: false\n }, text), {\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n });\n }));\n };\n };\n\n var renderCommonSpec = function (spec, actionOpt, extraBehaviours, dom, components, providersBackstage) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var action = actionOpt.fold(function () {\n return {};\n }, function (action) {\n return { action: action };\n });\n var common = __assign({\n buttonBehaviours: derive$1([\n DisablingConfigs.button(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\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 var domFinal = deepMerge(common, { dom: dom });\n return deepMerge(domFinal, { components: components });\n };\n var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var tooltipAttributes = spec.tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n var dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n var icon = spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n });\n var components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours);\n return Button.sketch(iconButtonSpec);\n };\n var renderButtonSpec = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var translatedText = providersBackstage.translate(spec.text);\n var icon = spec.icon ? spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }) : Optional.none();\n var components = icon.isSome() ? componentRenderPipeline([icon]) : [];\n var innerHtml = icon.isSome() ? {} : { innerHtml: translatedText };\n var classes = __spreadArrays(!spec.primary && !spec.borderless ? [\n 'tox-button',\n 'tox-button--secondary'\n ] : ['tox-button'], icon.isSome() ? ['tox-button--icon'] : [], spec.borderless ? ['tox-button--naked'] : [], extraClasses);\n var dom = __assign(__assign({\n tag: 'button',\n classes: classes\n }, innerHtml), { attributes: { title: translatedText } });\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderButton = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n var getAction = function (name, buttonType) {\n return function (comp) {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name: 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 };\n var isMenuFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'menu';\n };\n var isNormalFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n };\n var renderFooterButton = function (spec, buttonType, backstage) {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n var getButton = function () {\n return memButton_1;\n };\n var menuButtonSpec = spec;\n var fixedSpec = __assign(__assign({}, spec), {\n onSetup: function (api) {\n api.setDisabled(spec.disabled);\n return noop;\n },\n fetch: getFetch$1(menuButtonSpec.items, getButton, backstage)\n });\n var memButton_1 = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none()));\n return memButton_1.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n var action = getAction(spec.name, buttonType);\n var buttonSpec = __assign(__assign({}, spec), { borderless: false });\n return renderButton(buttonSpec, action, backstage.shared.providers, []);\n } else {\n console.error('Unknown footer button type: ', buttonType);\n }\n };\n var renderDialogButton = function (spec, providersBackstage) {\n var action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field(__assign({ factory: Button }, renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n RepresentingConfigs.memory(''),\n ComposingConfigs.self()\n ]))));\n };\n\n var schema$i = constant([\n defaulted$1('field1Name', 'field1'),\n defaulted$1('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers(['lockClass']),\n defaulted$1('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var getField = function (comp, detail, partName) {\n return getPart(comp, detail, partName).bind(Composing.getCurrent);\n };\n var coupledPart = function (selfName, otherName) {\n return required({\n factory: FormField,\n name: selfName,\n overrides: function (detail) {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run(input(), function (me) {\n getField(me, detail, otherName).each(function (other) {\n getPart(me, detail, 'lock').each(function (lock) {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n });\n });\n })])])\n };\n }\n });\n };\n var parts$5 = constant([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'lock',\n overrides: function (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 var factory$7 = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var _a;\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return _a = {}, _a[detail.field1Name] = Representing.getValue(parts.field1()), _a[detail.field2Name] = Representing.getValue(parts.field2()), _a;\n },\n setValue: function (comp, value) {\n var 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: function (component) {\n return getPart(component, detail, 'field1');\n },\n getField2: function (component) {\n return getPart(component, detail, 'field2');\n },\n getLock: function (component) {\n return getPart(component, detail, 'lock');\n }\n }\n };\n };\n var FormCoupledInputs = composite$1({\n name: 'FormCoupledInputs',\n configFields: schema$i(),\n partFields: parts$5(),\n factory: factory$7,\n apis: {\n getField1: function (apis, component) {\n return apis.getField1(component);\n },\n getField2: function (apis, component) {\n return apis.getField2(component);\n },\n getLock: function (apis, component) {\n return apis.getLock(component);\n }\n }\n });\n\n var formatSize = function (size) {\n var 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 var maxDecimal = function (unit) {\n return unit in unitDec ? unitDec[unit] : 1;\n };\n var 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 var parseSize = function (sizeText) {\n var numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n var match = numPattern.exec(sizeText);\n if (match !== null) {\n var value = parseFloat(match[1]);\n var unit = match[2];\n return Result.value({\n value: value,\n unit: unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n var convertUnit = function (size, unit) {\n var 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 var supported = function (u) {\n return Object.prototype.hasOwnProperty.call(inInch, u);\n };\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 var noSizeConversion = function (_input) {\n return Optional.none();\n };\n var ratioSizeConversion = function (scale, unit) {\n return function (size) {\n return convertUnit(size, unit).map(function (value) {\n return {\n value: value * scale,\n unit: unit\n };\n });\n };\n };\n var makeRatioConverter = function (currentFieldText, otherFieldText) {\n var cValue = parseSize(currentFieldText).toOptional();\n var oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, function (cSize, oSize) {\n return convertUnit(cSize, oSize.unit).map(function (val) {\n return oSize.value / val;\n }).map(function (r) {\n return ratioSizeConversion(r, oSize.unit);\n }).getOr(noSizeConversion);\n }).getOr(noSizeConversion);\n };\n\n var renderSizeInput = function (spec, providersBackstage) {\n var converter = noSizeConversion;\n var ratioEvent = generate$1('ratio-event');\n var 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 {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__lock'\n ],\n innerHtml: get$e('lock', providersBackstage.icons)\n }\n },\n {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__unlock'\n ],\n innerHtml: get$e('unlock', providersBackstage.icons)\n }\n }\n ],\n buttonBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({})\n ])\n });\n var formGroup = function (components) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: components\n };\n };\n var getFieldPart = function (isField1) {\n return FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('size-input-events', [\n run(focusin(), function (component, _simulatedEvent) {\n emitWith(component, ratioEvent, { isField1: isField1 });\n }),\n run(change(), function (component, _simulatedEvent) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n };\n var getLabel = function (label) {\n return {\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n };\n };\n var widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n var 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(' '),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: function (current, other, _lock) {\n parseSize(Representing.getValue(current)).each(function (size) {\n converter(size).each(function (newSize) {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (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: function (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(ratioEvent, function (component, simulatedEvent) {\n var isField1 = simulatedEvent.event.isField1;\n var optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n var optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n var value1 = optCurrent.map(Representing.getValue).getOr('');\n var value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n var undo = constant(generate$1('undo'));\n var redo = constant(generate$1('redo'));\n var zoom = constant(generate$1('zoom'));\n var back = constant(generate$1('back'));\n var apply = constant(generate$1('apply'));\n var swap = constant(generate$1('swap'));\n var transform = constant(generate$1('transform'));\n var tempTransform = constant(generate$1('temp-transform'));\n var transformApply = constant(generate$1('transform-apply'));\n var internal = {\n undo: undo,\n redo: redo,\n zoom: zoom,\n back: back,\n apply: apply,\n swap: swap,\n transform: transform,\n tempTransform: tempTransform,\n transformApply: transformApply\n };\n var saveState = constant('save-state');\n var disable$1 = constant('disable');\n var enable$1 = constant('enable');\n var external$2 = {\n formActionEvent: formActionEvent,\n saveState: saveState,\n disable: disable$1,\n enable: enable$1\n };\n\n var renderEditPanel = function (imagePanel, providersBackstage) {\n var createButton = function (text, action, disabled, primary) {\n return record(renderButton({\n name: text,\n text: text,\n disabled: disabled,\n primary: primary,\n icon: Optional.none(),\n borderless: false\n }, action, providersBackstage));\n };\n var createIconButton = function (icon, tooltip, action, disabled) {\n return record(renderIconButton({\n name: icon,\n icon: Optional.some(icon),\n tooltip: Optional.some(tooltip),\n disabled: disabled,\n primary: false,\n borderless: false\n }, action, providersBackstage));\n };\n var disableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.disable(component);\n }\n });\n };\n var enableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.enable(component);\n }\n });\n };\n var panelDom = {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools-edit-panel'\n ]\n };\n var noop$1 = noop;\n var emit$1 = function (comp, event, data) {\n emitWith(comp, event, data);\n };\n var emitDisable = function (component) {\n return emit(component, external$2.disable());\n };\n var emitEnable = function (component) {\n return emit(component, external$2.enable());\n };\n var emitTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transform(), { transform: transform });\n emitEnable(comp);\n };\n var emitTempTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.tempTransform(), { transform: transform });\n emitEnable(comp);\n };\n var getBackSwap = function (anyInSystem) {\n return function () {\n memContainer.getOpt(anyInSystem).each(function (container) {\n Replacing.set(container, [ButtonPanel]);\n });\n };\n };\n var emitTransformApply = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transformApply(), {\n transform: transform,\n swap: getBackSwap(comp)\n });\n emitEnable(comp);\n };\n var createBackButton = function () {\n return createButton('Back', function (button) {\n return emit$1(button, internal.back(), { swap: getBackSwap(button) });\n }, false, false);\n };\n var createSpacer = function () {\n return record({\n dom: {\n tag: 'div',\n classes: ['tox-spacer']\n },\n behaviours: derive$1([Disabling.config({})])\n });\n };\n var createApplyButton = function () {\n return createButton('Apply', function (button) {\n return emit$1(button, internal.apply(), { swap: getBackSwap(button) });\n }, true, true);\n };\n var makeCropTransform = function () {\n return function (ir) {\n var rect = imagePanel.getRect();\n return crop$1(ir, rect.x, rect.y, rect.w, rect.h);\n };\n };\n var cropPanelComponents = [\n createBackButton(),\n createSpacer(),\n createButton('Apply', function (button) {\n var transform = makeCropTransform();\n emitTransformApply(button, transform);\n imagePanel.hideCrop();\n }, false, true)\n ];\n var CropPanel = Container.sketch({\n dom: panelDom,\n components: cropPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-crop-buttons-events', [\n run(external$2.disable(), function (comp, _se) {\n disableAllComponents(cropPanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, _se) {\n enableAllComponents(cropPanelComponents, comp);\n })\n ])])\n });\n var memSize = record(renderSizeInput({\n name: 'size',\n label: Optional.none(),\n constrain: true,\n disabled: false\n }, providersBackstage));\n var makeResizeTransform = function (width, height) {\n return function (ir) {\n return resize$2(ir, width, height);\n };\n };\n var resizePanelComponents = [\n createBackButton(),\n createSpacer(),\n memSize,\n createSpacer(),\n createButton('Apply', function (button) {\n memSize.getOpt(button).each(function (sizeInput) {\n var value = Representing.getValue(sizeInput);\n var width = parseInt(value.width, 10);\n var height = parseInt(value.height, 10);\n var transform = makeResizeTransform(width, height);\n emitTransformApply(button, transform);\n });\n }, false, true)\n ];\n var ResizePanel = Container.sketch({\n dom: panelDom,\n components: resizePanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-resize-buttons-events', [\n run(external$2.disable(), function (comp, _se) {\n disableAllComponents(resizePanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, _se) {\n enableAllComponents(resizePanelComponents, comp);\n })\n ])])\n });\n var makeValueTransform = function (transform, value) {\n return function (ir) {\n return transform(ir, value);\n };\n };\n var horizontalFlip = makeValueTransform(flip$1, 'h');\n var verticalFlip = makeValueTransform(flip$1, 'v');\n var counterclockwiseRotate = makeValueTransform(rotate$1, -90);\n var clockwiseRotate = makeValueTransform(rotate$1, 90);\n var flipRotateOnAction = function (comp, operation) {\n emitTempTransform(comp, operation);\n };\n var flipRotateComponents = [\n createBackButton(),\n createSpacer(),\n createIconButton('flip-horizontally', 'Flip horizontally', function (button) {\n flipRotateOnAction(button, horizontalFlip);\n }, false),\n createIconButton('flip-vertically', 'Flip vertically', function (button) {\n flipRotateOnAction(button, verticalFlip);\n }, false),\n createIconButton('rotate-left', 'Rotate counterclockwise', function (button) {\n flipRotateOnAction(button, counterclockwiseRotate);\n }, false),\n createIconButton('rotate-right', 'Rotate clockwise', function (button) {\n flipRotateOnAction(button, clockwiseRotate);\n }, false),\n createSpacer(),\n createApplyButton()\n ];\n var FlipRotatePanel = Container.sketch({\n dom: panelDom,\n components: flipRotateComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-fliprotate-buttons-events', [\n run(external$2.disable(), function (comp, _se) {\n disableAllComponents(flipRotateComponents, comp);\n }),\n run(external$2.enable(), function (comp, _se) {\n enableAllComponents(flipRotateComponents, comp);\n })\n ])])\n });\n var makeSlider = function (label, onChoose, min, value, max) {\n var labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n var spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return record(Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: min,\n maxX: max,\n getInitialValue: constant({ x: value })\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChoose: onChoose\n }));\n };\n var makeVariableSlider = function (label, transform, min, value, max) {\n var onChoose = function (slider, _thumb, value) {\n var valTransform = makeValueTransform(transform, value.x / 100);\n emitTransform(slider, valTransform);\n };\n return makeSlider(label, onChoose, min, value, max);\n };\n var variableFilterPanelComponents = function (label, transform, min, value, max) {\n return [\n createBackButton(),\n makeVariableSlider(label, transform, min, value, max),\n createApplyButton()\n ];\n };\n var createVariableFilterPanel = function (label, transform, min, value, max) {\n var filterPanelComponents = variableFilterPanelComponents(label, transform, min, value, max);\n return Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-filter-panel-buttons-events', [\n run(external$2.disable(), function (comp, _se) {\n disableAllComponents(filterPanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, _se) {\n enableAllComponents(filterPanelComponents, comp);\n })\n ])])\n });\n };\n var filterPanelComponents = [\n createBackButton(),\n createSpacer(),\n createApplyButton()\n ];\n var FilterPanel = Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var BrightnessPanel = createVariableFilterPanel('Brightness', brightness$1, -100, 0, 100);\n var ContrastPanel = createVariableFilterPanel('Contrast', contrast$1, -100, 0, 100);\n var GammaPanel = createVariableFilterPanel('Gamma', gamma$1, -100, 0, 100);\n var makeColorTransform = function (red, green, blue) {\n return function (ir) {\n return colorize$1(ir, red, green, blue);\n };\n };\n var makeColorSlider = function (label) {\n var onChoose = function (slider, _thumb, _value) {\n var redOpt = memRed.getOpt(slider);\n var blueOpt = memBlue.getOpt(slider);\n var greenOpt = memGreen.getOpt(slider);\n redOpt.each(function (red) {\n blueOpt.each(function (blue) {\n greenOpt.each(function (green) {\n var r = Representing.getValue(red).x / 100;\n var g = Representing.getValue(green).x / 100;\n var b = Representing.getValue(blue).x / 100;\n var transform = makeColorTransform(r, g, b);\n emitTransform(slider, transform);\n });\n });\n });\n };\n return makeSlider(label, onChoose, 0, 100, 200);\n };\n var memRed = makeColorSlider('R');\n var memGreen = makeColorSlider('G');\n var memBlue = makeColorSlider('B');\n var colorizePanelComponents = [\n createBackButton(),\n memRed,\n memGreen,\n memBlue,\n createApplyButton()\n ];\n var ColorizePanel = Container.sketch({\n dom: panelDom,\n components: colorizePanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var getTransformPanelEvent = function (panel, transform, update) {\n return function (button) {\n var swap = function () {\n memContainer.getOpt(button).each(function (container) {\n Replacing.set(container, [panel]);\n update(container);\n });\n };\n emit$1(button, internal.swap(), {\n transform: transform,\n swap: swap\n });\n };\n };\n var cropPanelUpdate = function (_anyInSystem) {\n imagePanel.showCrop();\n };\n var resizePanelUpdate = function (anyInSystem) {\n memSize.getOpt(anyInSystem).each(function (sizeInput) {\n var measurements = imagePanel.getMeasurements();\n var width = measurements.width;\n var height = measurements.height;\n Representing.setValue(sizeInput, {\n width: width,\n height: height\n });\n });\n };\n var sharpenTransform = Optional.some(sharpen$1);\n var invertTransform = Optional.some(invert$1);\n var buttonPanelComponents = [\n createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, Optional.none(), cropPanelUpdate), false),\n createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, Optional.none(), resizePanelUpdate), false),\n createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, Optional.none(), noop$1), false),\n createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, Optional.none(), noop$1), false),\n createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),\n createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, Optional.none(), noop$1), false),\n createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, Optional.none(), noop$1), false),\n createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, Optional.none(), noop$1), false),\n createIconButton('invert', 'Invert', getTransformPanelEvent(FilterPanel, invertTransform, noop$1), false)\n ];\n var ButtonPanel = Container.sketch({\n dom: panelDom,\n components: buttonPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var container = Container.sketch({\n dom: { tag: 'div' },\n components: [ButtonPanel],\n containerBehaviours: derive$1([Replacing.config({})])\n });\n var memContainer = record(container);\n var getApplyButton = function (anyInSystem) {\n return memContainer.getOpt(anyInSystem).map(function (container) {\n var panel = container.components()[0];\n return panel.components()[panel.components().length - 1];\n });\n };\n return {\n memContainer: memContainer,\n getApplyButton: getApplyButton\n };\n };\n\n var global$d = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$e = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$f = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$g = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getDocumentSize = function (doc) {\n var max = Math.max;\n var documentElement = doc.documentElement;\n var body = doc.body;\n var scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n var clientWidth = max(documentElement.clientWidth, body.clientWidth);\n var offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n var scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n var clientHeight = max(documentElement.clientHeight, body.clientHeight);\n var offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n };\n var updateWithTouchData = function (e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n };\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || document;\n var downButton;\n var startX, startY;\n var handleElement = doc.getElementById(settings.handle || id);\n var start = function (e) {\n var docSize = getDocumentSize(doc);\n var cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n var handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (window.getComputedStyle) {\n cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$e('
').css({\n position: 'absolute',\n top: 0,\n left: 0,\n width: docSize.width,\n height: docSize.height,\n zIndex: 2147483647,\n opacity: 0.0001,\n cursor: cursor\n }).appendTo(doc.body);\n global$e(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n var drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n var stop = function (e) {\n updateWithTouchData(e);\n global$e(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n var destroy = function () {\n global$e(handleElement).off();\n };\n global$e(handleElement).on('mousedown touchstart', start);\n return { destroy: destroy };\n }\n\n var count = 0;\n var create$7 = function (currentRect, viewPortRect, clampRect, containerElm, action) {\n var dragHelpers;\n var prefix = 'tox-';\n var id = prefix + 'crid-' + count++;\n var handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n var blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n var getAbsoluteRect = function (outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n };\n var getRelativeRect = function (outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n };\n var getInnerRect = function () {\n return getRelativeRect(clampRect, currentRect);\n };\n var moveRect = function (handle, startRect, deltaX, deltaY) {\n var x, y, w, h, rect;\n x = startRect.x;\n y = startRect.y;\n w = startRect.w;\n h = startRect.h;\n x += deltaX * handle.deltaX;\n y += deltaY * handle.deltaY;\n w += deltaX * handle.deltaW;\n h += deltaY * handle.deltaH;\n if (w < 20) {\n w = 20;\n }\n if (h < 20) {\n h = 20;\n }\n rect = currentRect = global$d.clamp({\n x: x,\n y: y,\n w: w,\n h: h\n }, clampRect, handle.name === 'move');\n rect = getRelativeRect(clampRect, rect);\n instance.fire('updateRect', { rect: rect });\n setInnerRect(rect);\n };\n var render = function () {\n var createDragHelper = function (handle) {\n var startRect;\n return DragHelper(id, {\n document: containerElm.ownerDocument,\n handle: id + '-' + handle.name,\n start: function () {\n startRect = currentRect;\n },\n drag: function (e) {\n moveRect(handle, startRect, e.deltaX, e.deltaY);\n }\n });\n };\n global$e('
').appendTo(containerElm);\n global$c.each(blockers, function (blocker) {\n global$e('#' + id, containerElm).append('
');\n });\n global$c.each(handles, function (handle) {\n global$e('#' + id, containerElm).append('
');\n });\n dragHelpers = global$c.map(handles, createDragHelper);\n repaint(currentRect);\n global$e(containerElm).on('focusin focusout', function (e) {\n global$e(e.target).attr('aria-grabbed', e.type === 'focus' ? 'true' : 'false');\n });\n global$e(containerElm).on('keydown', function (e) {\n var activeHandle;\n global$c.each(handles, function (handle) {\n if (e.target.id === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n var moveAndBlock = function (evt, handle, startRect, deltaX, deltaY) {\n evt.stopPropagation();\n evt.preventDefault();\n moveRect(activeHandle, startRect, deltaX, deltaY);\n };\n switch (e.keyCode) {\n case global$g.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$g.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$g.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$g.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$g.ENTER:\n case global$g.SPACEBAR:\n e.preventDefault();\n action();\n break;\n }\n });\n };\n var toggleVisibility = function (state) {\n var selectors = global$c.map(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }).concat(global$c.map(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n })).join(',');\n if (state) {\n global$e(selectors, containerElm).show();\n } else {\n global$e(selectors, containerElm).hide();\n }\n };\n var repaint = function (rect) {\n var updateElementRect = function (name, rect) {\n if (rect.h < 0) {\n rect.h = 0;\n }\n if (rect.w < 0) {\n rect.w = 0;\n }\n global$e('#' + id + '-' + name, containerElm).css({\n left: rect.x,\n top: rect.y,\n width: rect.w,\n height: rect.h\n });\n };\n global$c.each(handles, function (handle) {\n global$e('#' + id + '-' + handle.name, containerElm).css({\n left: rect.w * handle.xMul + rect.x,\n top: rect.h * handle.yMul + rect.y\n });\n });\n updateElementRect('top', {\n x: viewPortRect.x,\n y: viewPortRect.y,\n w: viewPortRect.w,\n h: rect.y - viewPortRect.y\n });\n updateElementRect('right', {\n x: rect.x + rect.w,\n y: rect.y,\n w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,\n h: rect.h\n });\n updateElementRect('bottom', {\n x: viewPortRect.x,\n y: rect.y + rect.h,\n w: viewPortRect.w,\n h: viewPortRect.h - rect.y - rect.h + viewPortRect.y\n });\n updateElementRect('left', {\n x: viewPortRect.x,\n y: rect.y,\n w: rect.x - viewPortRect.x,\n h: rect.h\n });\n updateElementRect('move', rect);\n };\n var setRect = function (rect) {\n currentRect = rect;\n repaint(currentRect);\n };\n var setViewPortRect = function (rect) {\n viewPortRect = rect;\n repaint(currentRect);\n };\n var setInnerRect = function (rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n };\n var setClampRect = function (rect) {\n clampRect = rect;\n repaint(currentRect);\n };\n var destroy = function () {\n global$c.each(dragHelpers, function (helper) {\n helper.destroy();\n });\n dragHelpers = [];\n };\n render();\n var instance = global$c.extend({\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n }, global$f);\n return instance;\n };\n var CropRect = { create: create$7 };\n\n var loadImage = function (image) {\n return new global$4(function (resolve) {\n var loaded = function () {\n image.removeEventListener('load', loaded);\n resolve(image);\n };\n if (image.complete) {\n resolve(image);\n } else {\n image.addEventListener('load', loaded);\n }\n });\n };\n var renderImagePanel = function (initialUrl) {\n var memBg = record({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image-bg'],\n attributes: { role: 'presentation' }\n }\n });\n var zoomState = Cell(1);\n var cropRect = Cell(Optional.none());\n var rectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var viewRectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var repaintImg = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var zoom = zoomState.get();\n var panelW = get$8(panel.element);\n var panelH = get$7(panel.element);\n var width = img.dom.naturalWidth * zoom;\n var height = img.dom.naturalHeight * zoom;\n var left = Math.max(0, panelW / 2 - width / 2);\n var top = Math.max(0, panelH / 2 - height / 2);\n var css = {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px',\n position: 'absolute'\n };\n setAll$1(img, css);\n memBg.getOpt(panel).each(function (bg) {\n setAll$1(bg.element, css);\n });\n cropRect.get().each(function (cRect) {\n var rect = rectState.get();\n cRect.setRect({\n x: rect.x * zoom + left,\n y: rect.y * zoom + top,\n w: rect.w * zoom,\n h: rect.h * zoom\n });\n cRect.setClampRect({\n x: left,\n y: top,\n w: width,\n h: height\n });\n cRect.setViewPortRect({\n x: 0,\n y: 0,\n w: panelW,\n h: panelH\n });\n });\n });\n };\n var zoomFit = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var panelW = get$8(panel.element);\n var panelH = get$7(panel.element);\n var width = img.dom.naturalWidth;\n var height = img.dom.naturalHeight;\n var zoom = Math.min(panelW / width, panelH / height);\n if (zoom >= 1) {\n zoomState.set(1);\n } else {\n zoomState.set(zoom);\n }\n });\n };\n var updateSrc = function (anyInSystem, url) {\n var img = SugarElement.fromTag('img');\n set$1(img, 'src', url);\n return loadImage(img.dom).then(function () {\n return memContainer.getOpt(anyInSystem).map(function (panel) {\n var aImg = external({ element: img });\n Replacing.replaceAt(panel, 1, Optional.some(aImg));\n var lastViewRect = viewRectState.get();\n var viewRect = {\n x: 0,\n y: 0,\n w: img.dom.naturalWidth,\n h: img.dom.naturalHeight\n };\n viewRectState.set(viewRect);\n var rect = global$d.inflate(viewRect, -20, -20);\n rectState.set(rect);\n if (lastViewRect.w !== viewRect.w || lastViewRect.h !== viewRect.h) {\n zoomFit(panel, img);\n }\n repaintImg(panel, img);\n return img;\n });\n });\n };\n var zoom = function (anyInSystem, direction) {\n var currentZoom = zoomState.get();\n var newZoom = direction > 0 ? Math.min(2, currentZoom + 0.1) : Math.max(0.1, currentZoom - 0.1);\n zoomState.set(newZoom);\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var img = panel.components()[1].element;\n repaintImg(panel, img);\n });\n };\n var showCrop = function () {\n cropRect.get().each(function (cRect) {\n cRect.toggleVisibility(true);\n });\n };\n var hideCrop = function () {\n cropRect.get().each(function (cRect) {\n cRect.toggleVisibility(false);\n });\n };\n var getRect = function () {\n return rectState.get();\n };\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image']\n },\n components: [\n memBg.asSpec(),\n {\n dom: {\n tag: 'img',\n attributes: { src: initialUrl }\n }\n },\n {\n dom: { tag: 'div' },\n behaviours: derive$1([config('image-panel-crop-events', [runOnAttached(function (comp) {\n memContainer.getOpt(comp).each(function (container) {\n var el = container.element.dom;\n var cRect = CropRect.create({\n x: 10,\n y: 10,\n w: 100,\n h: 100\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, el, noop);\n cRect.toggleVisibility(false);\n cRect.on('updateRect', function (e) {\n var rect = e.rect;\n var zoom = zoomState.get();\n var newRect = {\n x: Math.round(rect.x / zoom),\n y: Math.round(rect.y / zoom),\n w: Math.round(rect.w / zoom),\n h: Math.round(rect.h / zoom)\n };\n rectState.set(newRect);\n });\n cropRect.set(Optional.some(cRect));\n });\n })])])\n }\n ],\n containerBehaviours: derive$1([\n Replacing.config({}),\n config('image-panel-events', [runOnAttached(function (comp) {\n updateSrc(comp, initialUrl);\n })])\n ])\n });\n var memContainer = record(container);\n var getMeasurements = function () {\n var viewRect = viewRectState.get();\n return {\n width: viewRect.w,\n height: viewRect.h\n };\n };\n return {\n memContainer: memContainer,\n updateSrc: updateSrc,\n zoom: zoom,\n showCrop: showCrop,\n hideCrop: hideCrop,\n getRect: getRect,\n getMeasurements: getMeasurements\n };\n };\n\n var createButton = function (innerHtml, icon, disabled, action, providersBackstage) {\n return renderIconButton({\n name: innerHtml,\n icon: Optional.some(icon),\n disabled: disabled,\n tooltip: Optional.some(innerHtml),\n primary: false,\n borderless: false\n }, action, providersBackstage);\n };\n var setButtonEnabled = function (button, enabled) {\n if (enabled) {\n Disabling.enable(button);\n } else {\n Disabling.disable(button);\n }\n };\n var renderSideBar = function (providersBackstage) {\n var updateButtonUndoStates = function (anyInSystem, undoEnabled, redoEnabled) {\n memUndo.getOpt(anyInSystem).each(function (undo) {\n setButtonEnabled(undo, undoEnabled);\n });\n memRedo.getOpt(anyInSystem).each(function (redo) {\n setButtonEnabled(redo, redoEnabled);\n });\n };\n var memUndo = record(createButton('Undo', 'undo', true, function (button) {\n emitWith(button, internal.undo(), { direction: 1 });\n }, providersBackstage));\n var memRedo = record(createButton('Redo', 'redo', true, function (button) {\n emitWith(button, internal.redo(), { direction: 1 });\n }, providersBackstage));\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools__sidebar'\n ]\n },\n components: [\n memUndo.asSpec(),\n memRedo.asSpec(),\n createButton('Zoom in', 'zoom-in', false, function (button) {\n emitWith(button, internal.zoom(), { direction: 1 });\n }, providersBackstage),\n createButton('Zoom out', 'zoom-out', false, function (button) {\n emitWith(button, internal.zoom(), { direction: -1 });\n }, providersBackstage)\n ]\n });\n return {\n container: container,\n updateButtonUndoStates: updateButtonUndoStates\n };\n };\n\n function UndoStack () {\n var data = [];\n var index = -1;\n var add = function (state) {\n var removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n };\n var undo = function () {\n if (canUndo()) {\n return data[--index];\n }\n };\n var redo = function () {\n if (canRedo()) {\n return data[++index];\n }\n };\n var canUndo = function () {\n return index > 0;\n };\n var canRedo = function () {\n return index !== -1 && index < data.length - 1;\n };\n return {\n data: data,\n add: add,\n undo: undo,\n redo: redo,\n canUndo: canUndo,\n canRedo: canRedo\n };\n }\n\n var makeState = function (initialState) {\n var blobState = Cell(initialState);\n var tempState = Cell(Optional.none());\n var undoStack = UndoStack();\n undoStack.add(initialState);\n var getBlobState = function () {\n return blobState.get();\n };\n var setBlobState = function (state) {\n blobState.set(state);\n };\n var getTempState = function () {\n return tempState.get().fold(function () {\n return blobState.get();\n }, function (temp) {\n return temp;\n });\n };\n var updateTempState = function (blob) {\n var newTempState = createState(blob);\n destroyTempState();\n tempState.set(Optional.some(newTempState));\n return newTempState.url;\n };\n var createState = function (blob) {\n return {\n blob: blob,\n url: URL.createObjectURL(blob)\n };\n };\n var destroyState = function (state) {\n URL.revokeObjectURL(state.url);\n };\n var destroyStates = function (states) {\n global$c.each(states, destroyState);\n };\n var destroyTempState = function () {\n tempState.get().each(destroyState);\n tempState.set(Optional.none());\n };\n var addBlobState = function (blob) {\n var newState = createState(blob);\n setBlobState(newState);\n var removed = undoStack.add(newState).removed;\n destroyStates(removed);\n return newState.url;\n };\n var addTempState = function (blob) {\n var newState = createState(blob);\n tempState.set(Optional.some(newState));\n return newState.url;\n };\n var applyTempState = function (postApply) {\n return tempState.get().fold(noop, function (temp) {\n addBlobState(temp.blob);\n postApply();\n });\n };\n var undo = function () {\n var currentState = undoStack.undo();\n setBlobState(currentState);\n return currentState.url;\n };\n var redo = function () {\n var currentState = undoStack.redo();\n setBlobState(currentState);\n return currentState.url;\n };\n var getHistoryStates = function () {\n var undoEnabled = undoStack.canUndo();\n var redoEnabled = undoStack.canRedo();\n return {\n undoEnabled: undoEnabled,\n redoEnabled: redoEnabled\n };\n };\n return {\n getBlobState: getBlobState,\n setBlobState: setBlobState,\n addBlobState: addBlobState,\n getTempState: getTempState,\n updateTempState: updateTempState,\n addTempState: addTempState,\n applyTempState: applyTempState,\n destroyTempState: destroyTempState,\n undo: undo,\n redo: redo,\n getHistoryStates: getHistoryStates\n };\n };\n\n var renderImageTools = function (detail, providersBackstage) {\n var state = makeState(detail.currentState);\n var zoom = function (anyInSystem, simulatedEvent) {\n var direction = simulatedEvent.event.direction;\n imagePanel.zoom(anyInSystem, direction);\n };\n var updateButtonUndoStates = function (anyInSystem) {\n var historyStates = state.getHistoryStates();\n sideBar.updateButtonUndoStates(anyInSystem, historyStates.undoEnabled, historyStates.redoEnabled);\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.saveState(),\n value: historyStates.undoEnabled\n });\n };\n var disableUndoRedo = function (anyInSystem) {\n sideBar.updateButtonUndoStates(anyInSystem, false, false);\n };\n var undo = function (anyInSystem, _simulatedEvent) {\n var url = state.undo();\n updateSrc(anyInSystem, url).then(function (_oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var redo = function (anyInSystem, _simulatedEvent) {\n var url = state.redo();\n updateSrc(anyInSystem, url).then(function (_oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var imageResultToBlob = function (ir) {\n return ir.toBlob();\n };\n var block = function (anyInSystem) {\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.disable(),\n value: {}\n });\n };\n var unblock = function (anyInSystem) {\n editPanel.getApplyButton(anyInSystem).each(function (applyButton) {\n Disabling.enable(applyButton);\n });\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.enable(),\n value: {}\n });\n };\n var updateSrc = function (anyInSystem, src) {\n block(anyInSystem);\n return imagePanel.updateSrc(anyInSystem, src);\n };\n var blobManipulate = function (anyInSystem, blob, filter, action, swap) {\n block(anyInSystem);\n return blobToImageResult(blob).then(filter).then(imageResultToBlob).then(action).then(function (url) {\n return updateSrc(anyInSystem, url).then(function (oImg) {\n updateButtonUndoStates(anyInSystem);\n swap();\n unblock(anyInSystem);\n return oImg;\n });\n }).catch(function (err) {\n console.log(err);\n unblock(anyInSystem);\n return err;\n });\n };\n var manipulate = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n return state.updateTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var tempManipulate = function (anyInSystem, filter) {\n var blob = state.getTempState().blob;\n var action = function (blob) {\n return state.addTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, noop);\n };\n var manipulateApply = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n var url = state.addBlobState(blob);\n destroyTempState(anyInSystem);\n return url;\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var apply = function (anyInSystem, simulatedEvent) {\n var postApply = function () {\n destroyTempState(anyInSystem);\n var swap = simulatedEvent.event.swap;\n swap();\n };\n state.applyTempState(postApply);\n };\n var destroyTempState = function (anyInSystem) {\n var currentUrl = state.getBlobState().url;\n state.destroyTempState();\n updateButtonUndoStates(anyInSystem);\n return currentUrl;\n };\n var cancel = function (anyInSystem) {\n var currentUrl = destroyTempState(anyInSystem);\n updateSrc(anyInSystem, currentUrl).then(function (_oImg) {\n unblock(anyInSystem);\n });\n };\n var back = function (anyInSystem, simulatedEvent) {\n cancel(anyInSystem);\n var swap = simulatedEvent.event.swap;\n swap();\n imagePanel.hideCrop();\n };\n var transform = function (anyInSystem, simulatedEvent) {\n return manipulate(anyInSystem, simulatedEvent.event.transform, noop);\n };\n var tempTransform = function (anyInSystem, simulatedEvent) {\n return tempManipulate(anyInSystem, simulatedEvent.event.transform);\n };\n var transformApply = function (anyInSystem, simulatedEvent) {\n return manipulateApply(anyInSystem, simulatedEvent.event.transform, simulatedEvent.event.swap);\n };\n var imagePanel = renderImagePanel(detail.currentState.url);\n var sideBar = renderSideBar(providersBackstage);\n var editPanel = renderEditPanel(imagePanel, providersBackstage);\n var swap = function (anyInSystem, simulatedEvent) {\n disableUndoRedo(anyInSystem);\n var transform = simulatedEvent.event.transform;\n var swap = simulatedEvent.event.swap;\n transform.fold(function () {\n swap();\n }, function (transform) {\n manipulate(anyInSystem, transform, swap);\n });\n };\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: [\n editPanel.memContainer.asSpec(),\n imagePanel.memContainer.asSpec(),\n sideBar.container\n ],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return state.getBlobState();\n }\n }\n }),\n config('image-tools-events', [\n run(internal.undo(), undo),\n run(internal.redo(), redo),\n run(internal.zoom(), zoom),\n run(internal.back(), back),\n run(internal.apply(), apply),\n run(internal.transform(), transform),\n run(internal.tempTransform(), tempTransform),\n run(internal.transformApply(), transformApply),\n run(internal.swap(), swap)\n ]),\n ComposingConfigs.self()\n ])\n };\n };\n\n var renderLabel$2 = function (spec, backstageShared) {\n var label = {\n dom: {\n tag: 'label',\n innerHtml: backstageShared.providers.translate(spec.label),\n classes: ['tox-label']\n }\n };\n var comps = map(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [label].concat(comps),\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 var isSingleListItem = function (item) {\n return !has(item, 'items');\n };\n var dataAttribute = 'data-value';\n var fetchItems = function (dropdownComp, name, items, selectedValue) {\n return map(items, function (item) {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: function () {\n return fetchItems(dropdownComp, name, item.items, selectedValue);\n }\n };\n } else {\n return {\n type: 'togglemenuitem',\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: function () {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name: name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n };\n var findItemByValue = function (items, value) {\n return findMap(items, function (item) {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n };\n var renderListBox = function (spec, backstage) {\n var providersBackstage = backstage.shared.providers;\n var initialItem = head(spec.items).filter(isSingleListItem);\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: function (sketchSpec) {\n return renderCommonDropdown({\n uid: sketchSpec.uid,\n text: initialItem.map(function (item) {\n return item.text;\n }),\n icon: Optional.none(),\n tooltip: spec.label,\n role: Optional.none(),\n fetch: function (comp, callback) {\n var items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n callback(build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n },\n onSetup: constant(noop),\n getApi: constant({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n initialValue: initialItem.map(function (item) {\n return item.value;\n }).getOr(''),\n getValue: function (comp) {\n return get$3(comp.element, dataAttribute);\n },\n setValue: function (comp, data) {\n findItemByValue(spec.items, data).each(function (item) {\n set$1(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n }\n }\n })\n ]\n }, 'tox-listbox', backstage.shared);\n }\n }\n });\n var 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(spec.disabled),\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n var renderPanel = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map(spec.items, backstage.shared.interpreter)\n };\n };\n\n var factory$8 = function (detail, _spec) {\n var options = map(detail.options, function (option) {\n return {\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n };\n });\n var initialValues = detail.data.map(function (v) {\n return wrap$1('initialValue', v);\n }).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: __assign({\n mode: 'manual',\n getValue: function (select) {\n return get$6(select.element);\n },\n setValue: function (select, newValue) {\n var found = find(detail.options, function (opt) {\n return opt.value === newValue;\n });\n if (found.isSome()) {\n set$3(select.element, newValue);\n }\n }\n }, initialValues)\n })\n ])\n };\n };\n var HtmlSelect = single$2({\n name: 'HtmlSelect',\n configFields: [\n strict$1('options'),\n field$1('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted$1('selectClasses', []),\n defaulted$1('selectAttributes', {}),\n option('data')\n ],\n factory: factory$8\n });\n\n var renderSelectBox = function (spec, providersBackstage) {\n var translatedOptions = map(spec.items, function (item) {\n return {\n text: providersBackstage.translate(item.text),\n value: item.value\n };\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('selectbox-change', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var chevron = spec.size > 1 ? Optional.none() : Optional.some({\n dom: {\n tag: 'div',\n classes: ['tox-selectfield__icon-js'],\n innerHtml: get$e('chevron-down', providersBackstage.icons)\n }\n });\n var 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: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderTable = function (spec, providersBackstage) {\n var renderTh = function (text) {\n return {\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderHeader = function (header) {\n return {\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map(header, renderTh)\n }]\n };\n };\n var renderTd = function (text) {\n return {\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderTr = function (row) {\n return {\n dom: { tag: 'tr' },\n components: map(row, renderTd)\n };\n };\n var renderRows = function (rows) {\n return {\n dom: { tag: 'tbody' },\n components: map(rows, renderTr)\n };\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 var renderTextField = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: function (comp) {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run(input(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run(postPaste(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n var validatingBehaviours = spec.validation.map(function (vl) {\n return Invalidating.config({\n getRoot: function (input) {\n return parent(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: function (input) {\n var v = Representing.getValue(input);\n var result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n });\n }).toArray();\n var placeholder = spec.placeholder.fold(constant({}), function (p) {\n return { placeholder: providersBackstage.translate(p) };\n });\n var inputMode = spec.inputMode.fold(constant({}), function (mode) {\n return { inputmode: mode };\n });\n var inputAttributes = __assign(__assign({}, placeholder), inputMode);\n var pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n inputAttributes: inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n var extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n var extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n var extraBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n var renderInput = function (spec, providersBackstage) {\n return 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.disabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n var renderTextarea = function (spec, providersBackstage) {\n return 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.disabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n\n var events$c = function (streamConfig, streamState) {\n var streams = streamConfig.stream.streams;\n var processor = streams.setup(streamConfig, streamState);\n return derive([\n run(streamConfig.event, processor),\n runOnDetached(function () {\n return streamState.cancel();\n })\n ].concat(streamConfig.cancelEvent.map(function (e) {\n return [run(e, function () {\n return streamState.cancel();\n })];\n }).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$c\n });\n\n var throttle = function (_config) {\n var state = Cell(null);\n var readState = function () {\n return { timer: state.get() !== null ? 'set' : 'unset' };\n };\n var setTimer = function (t) {\n state.set(t);\n };\n var cancel = function () {\n var t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$5({\n readState: readState,\n setTimer: setTimer,\n cancel: cancel\n });\n };\n var init$6 = function (spec) {\n return spec.stream.streams.state(spec);\n };\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$6\n });\n\n var setup$2 = function (streamInfo, streamState) {\n var sInfo = streamInfo.stream;\n var throttler = last$2(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return function (component, simulatedEvent) {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n strictOf('stream', choose$1('mode', {\n throttle: [\n strict$1('delay'),\n defaulted$1('stopEvent', true),\n output('streams', {\n setup: setup$2,\n state: throttle\n })\n ]\n })),\n defaulted$1('event', 'input'),\n option('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n var Streaming = create$1({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n var setValueFromItem = function (model, input, item) {\n var itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n var setSelectionOn = function (input, f) {\n var el = input.element;\n var value = get$6(el);\n var node = el.dom;\n if (get$3(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n var setCursorAtEnd = function (input) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(value.length, value.length);\n });\n };\n var setSelectionToEnd = function (input, startOffset) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(startOffset, value.length);\n });\n };\n var attemptSelectOver = function (model, input, item) {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n var currentValue = Representing.getValue(input);\n var inputDisplay_1 = model.getDisplayText(currentValue);\n var itemValue = Representing.getValue(item);\n var itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay_1) === 0 ? Optional.some(function () {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay_1.length);\n }) : Optional.none();\n }\n };\n\n var itemExecute = constant('alloy.typeahead.itemexecute');\n\n var make$5 = function (detail, components, spec, externals) {\n var navigateList = function (comp, simulatedEvent, highlighter) {\n detail.previewing.set(false);\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(function (menu) {\n Highlighting.getHighlighted(menu).fold(function () {\n highlighter(menu);\n }, function () {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n var onOpenSync = function (sandbox) {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open$1(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n };\n var focusBehaviours$1 = focusBehaviours(detail);\n var mapFetch = function (comp) {\n return function (tdata) {\n return tdata.map(function (data) {\n var menus = values(data.menus);\n var items = bind(menus, function (menu) {\n return filter(menu.items, function (item) {\n return item.type === 'item';\n });\n });\n var repState = Representing.getState(comp);\n repState.update(map(items, function (item) {\n return item.data;\n }));\n return data;\n });\n };\n };\n var behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: __assign({\n mode: 'dataset',\n getDataKey: function (comp) {\n return get$6(comp.element);\n },\n getFallbackEntry: function (itemString) {\n return {\n value: itemString,\n meta: {}\n };\n },\n setValue: function (comp, data) {\n set$3(comp.element, detail.model.getDisplayText(data));\n }\n }, detail.initialData.map(function (d) {\n return wrap$1('initialValue', d);\n }).getOr({}))\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: function (component, _simulatedEvent) {\n var sandbox = Coupling.getCoupled(component, 'sandbox');\n var focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$6(component.element).length >= detail.minChars) {\n var previousValue_1 = Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu).map(Representing.getValue);\n });\n detail.previewing.set(true);\n var onOpenSync = function (_sandbox) {\n Composing.getCurrent(sandbox).each(function (menu) {\n previousValue_1.fold(function () {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(menu);\n }\n }, function (pv) {\n Highlighting.highlightBy(menu, function (item) {\n var itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(menu).orThunk(function () {\n Highlighting.highlightFirst(menu);\n return Optional.none();\n });\n });\n });\n };\n open$1(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: function (comp) {\n var 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: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n var sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu);\n }).map(function (item) {\n emitWith(comp, itemExecute(), { item: item });\n return true;\n });\n } else {\n var 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: function (hotspot) {\n return makeSandbox(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config('typeaheadevents', [\n runOnExecute(function (comp) {\n var onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }),\n run(itemExecute(), function (comp, se) {\n var 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(postBlur(), function (typeahead) {\n var sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n return {\n uid: detail.uid,\n dom: dom$2(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: __assign(__assign({}, focusBehaviours$1), augment(detail.typeaheadBehaviours, behaviours)),\n eventOrder: detail.eventOrder\n };\n };\n\n var schema$j = constant([\n option('lazySink'),\n strict$1('fetch'),\n defaulted$1('minChars', 5),\n defaulted$1('responseTime', 1000),\n onHandler('onOpen'),\n defaulted$1('getHotspot', Optional.some),\n defaulted$1('getAnchorOverrides', constant({})),\n defaulted$1('layouts', Optional.none()),\n defaulted$1('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted$1('getDisplayText', function (itemData) {\n return itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value;\n }),\n defaulted$1('selectsOver', true),\n defaulted$1('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted$1('inputClasses', []),\n defaulted$1('inputAttributes', {}),\n defaulted$1('inputStyles', {}),\n defaulted$1('matchWidth', true),\n defaulted$1('useMinWidth', false),\n defaulted$1('dismissOnBlur', true),\n markers(['openClass']),\n option('initialData'),\n field$1('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n state$1('previewing', function () {\n return Cell(true);\n })\n ].concat(schema$f()).concat(sandboxFields()));\n var parts$6 = constant([external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: function (detail) {\n return {\n fakeFocus: true,\n onHighlight: function (menu, item) {\n if (!detail.previewing.get()) {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n } else {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n attemptSelectOver(detail.model, input, item).fold(function () {\n return Highlighting.dehighlight(menu, item);\n }, function (fn) {\n return fn();\n });\n });\n }\n detail.previewing.set(false);\n },\n onExecute: function (menu, item) {\n return menu.getSystem().getByUid(detail.uid).toOptional().map(function (typeahead) {\n emitWith(typeahead, itemExecute(), { item: item });\n return true;\n });\n },\n onHover: function (menu, item) {\n detail.previewing.set(false);\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n var Typeahead = composite$1({\n name: 'Typeahead',\n configFields: schema$j(),\n partFields: parts$6(),\n factory: make$5\n });\n\n var wrap$2 = function (delegate) {\n var toCached = function () {\n return wrap$2(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap$2(delegate.bind(function (resA) {\n return resA.fold(function (err) {\n return Future.pure(Result.error(err));\n }, function (a) {\n return f(a);\n });\n }));\n };\n var bindResult = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.mapError(f);\n }));\n };\n var foldResult = function (whenError, whenValue) {\n return delegate.map(function (res) {\n return res.fold(whenError, whenValue);\n });\n };\n var withTimeout = function (timeout, errorThunk) {\n return wrap$2(Future.nu(function (callback) {\n var timedOut = false;\n var timer = setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return __assign(__assign({}, delegate), {\n toCached: toCached,\n bindFuture: bindFuture,\n bindResult: bindResult,\n mapResult: mapResult,\n mapError: mapError,\n foldResult: foldResult,\n withTimeout: withTimeout\n });\n };\n var nu$c = function (worker) {\n return wrap$2(Future.nu(worker));\n };\n var value$2 = function (value) {\n return wrap$2(Future.pure(Result.value(value)));\n };\n var error$1 = function (error) {\n return wrap$2(Future.pure(Result.error(error)));\n };\n var fromResult$1 = function (result) {\n return wrap$2(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap$2(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$c(function (completer) {\n promise.then(function (value) {\n completer(Result.value(value));\n }, function (error) {\n completer(Result.error(error));\n });\n });\n };\n var FutureResult = {\n nu: nu$c,\n wrap: wrap$2,\n pure: value$2,\n value: value$2,\n error: error$1,\n fromResult: fromResult$1,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var separator$2 = { type: 'separator' };\n var toMenuItem = function (target) {\n return {\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n };\n };\n var staticMenuItem = function (title, url) {\n return {\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n };\n };\n var toMenuItems = function (targets) {\n return map(targets, toMenuItem);\n };\n var filterLinkTargets = function (type, targets) {\n return filter(targets, function (target) {\n return target.type === type;\n });\n };\n var filteredTargets = function (type, targets) {\n return toMenuItems(filterLinkTargets(type, targets));\n };\n var headerTargets = function (linkInfo) {\n return filteredTargets('header', linkInfo.targets);\n };\n var anchorTargets = function (linkInfo) {\n return filteredTargets('anchor', linkInfo.targets);\n };\n var anchorTargetTop = function (linkInfo) {\n return Optional.from(linkInfo.anchorTop).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Optional.from(linkInfo.anchorBottom).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var historyTargets = function (history) {\n return map(history, function (url) {\n return staticMenuItem(url, url);\n });\n };\n var joinMenuLists = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$2, b);\n }, []);\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n return filter(menuItems, function (item) {\n var text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(item.value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n var getItems = function (fileType, input, urlBackstage) {\n var urlInputValue = Representing.getValue(input);\n var term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n var info = urlBackstage.getLinkInformation();\n return info.fold(function () {\n return [];\n }, function (linkInfo) {\n var 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 var errorId = generate$1('aria-invalid');\n var renderUrlInput = function (spec, backstage, urlBackstage) {\n var _a;\n var providersBackstage = backstage.shared.providers;\n var updateHistory = function (component) {\n var urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n var pField = FormField.parts.field({\n factory: Typeahead,\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: function (input) {\n var items = getItems(spec.filetype, input, urlBackstage);\n var tdata = build$2(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, false);\n return Future.pure(tdata);\n },\n getHotspot: function (comp) {\n return memUrlBox.getOpt(comp);\n },\n onSetValue: function (comp, _newValue) {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1(flatten([\n urlBackstage.getValidationHandler().map(function (handler) {\n return Invalidating.config({\n getRoot: function (comp) {\n return parent(comp.element);\n },\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: function (comp, err) {\n memInvalidIcon.getOpt(comp).each(function (invalidComp) {\n set$1(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: function (input) {\n var urlEntry = Representing.getValue(input);\n return FutureResult.nu(function (completer) {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, function (validation) {\n if (validation.status === 'invalid') {\n var err = Result.error(validation.message);\n completer(err);\n } else {\n var val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n });\n }).toArray(),\n [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('urlinput-events', flatten([\n spec.filetype === 'file' ? [run(input(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n })] : [],\n [\n run(change(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run(postPaste(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ]\n ]))\n ]\n ])),\n eventOrder: (_a = {}, _a[input()] = [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ], _a),\n model: {\n getDisplayText: function (itemData) {\n return itemData.value;\n },\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: function (_menu, component, _entry) {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: function (typeahead, _sandbox, _item, _value) {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var makeIcon = function (name, errId, icon, label) {\n if (icon === void 0) {\n icon = name;\n }\n if (label === void 0) {\n label = name;\n }\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n innerHtml: get$e(icon, providersBackstage.icons),\n attributes: __assign({\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite'\n }, errId.fold(function () {\n return {};\n }, function (id) {\n return { id: id };\n }))\n }\n };\n };\n var memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n var memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n var optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n var browseUrlEvent = generate$1('browser.url.event');\n var 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({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n })])\n });\n var memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.label.getOr(''),\n disabled: spec.disabled,\n primary: false,\n borderless: true\n }, function (component) {\n return emit(component, browseUrlEvent);\n }, providersBackstage, [], ['tox-browse-url']));\n var controlHWrapper = function () {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(function () {\n return memUrlPickerButton.asSpec();\n }).toArray()\n ])\n };\n };\n var openUrlPicker = function (comp) {\n Composing.getCurrent(comp).each(function (field) {\n var componentData = Representing.getValue(field);\n var urlData = __assign({ fieldname: spec.name }, componentData);\n optUrlPicker.each(function (picker) {\n picker(urlData).get(function (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: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: function (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(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n var renderAlertBanner = function (spec, providersBackstage) {\n return 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$e(spec.icon, providersBackstage.icons),\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: function (comp) {\n emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n });\n }\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\n var renderCheckbox = function (spec, providerBackstage) {\n var repBehaviour = Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var el = comp.element.dom;\n return el.checked;\n },\n setValue: function (comp, value) {\n var el = comp.element.dom;\n el.checked = value;\n }\n }\n });\n var toggleCheckboxHandler = function (comp) {\n comp.element.dom.click();\n return Optional.some(true);\n };\n var 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({\n disabled: function () {\n return spec.disabled || providerBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n repBehaviour,\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label'],\n innerHtml: providerBackstage.translate(spec.label)\n },\n behaviours: derive$1([Unselecting.config({})])\n });\n var makeIcon = function (className) {\n var iconName = className === 'checked' ? 'selected' : 'unselected';\n return {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ],\n innerHtml: get$e(iconName, providerBackstage.icons)\n }\n };\n };\n var 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: function () {\n return spec.disabled || providerBackstage.isDisabled();\n },\n disableClass: 'tox-checkbox--disabled',\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderHtmlPanel = function (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 var make$6 = function (render) {\n return function (parts, spec, backstage) {\n return get$1(spec, 'name').fold(function () {\n return render(spec, backstage);\n }, function (fieldName) {\n return parts.field(fieldName, render(spec, backstage));\n });\n };\n };\n var makeIframe = function (render) {\n return function (parts, spec, backstage) {\n var iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$6(render)(parts, iframeSpec, backstage);\n };\n };\n var factories = {\n bar: make$6(function (spec, backstage) {\n return renderBar(spec, backstage.shared);\n }),\n collection: make$6(function (spec, backstage) {\n return renderCollection(spec, backstage.shared.providers);\n }),\n alertbanner: make$6(function (spec, backstage) {\n return renderAlertBanner(spec, backstage.shared.providers);\n }),\n input: make$6(function (spec, backstage) {\n return renderInput(spec, backstage.shared.providers);\n }),\n textarea: make$6(function (spec, backstage) {\n return renderTextarea(spec, backstage.shared.providers);\n }),\n label: make$6(function (spec, backstage) {\n return renderLabel$2(spec, backstage.shared);\n }),\n iframe: makeIframe(function (spec, backstage) {\n return renderIFrame(spec, backstage.shared.providers);\n }),\n button: make$6(function (spec, backstage) {\n return renderDialogButton(spec, backstage.shared.providers);\n }),\n checkbox: make$6(function (spec, backstage) {\n return renderCheckbox(spec, backstage.shared.providers);\n }),\n colorinput: make$6(function (spec, backstage) {\n return renderColorInput(spec, backstage.shared, backstage.colorinput);\n }),\n colorpicker: make$6(renderColorPicker),\n dropzone: make$6(function (spec, backstage) {\n return renderDropZone(spec, backstage.shared.providers);\n }),\n grid: make$6(function (spec, backstage) {\n return renderGrid(spec, backstage.shared);\n }),\n listbox: make$6(function (spec, backstage) {\n return renderListBox(spec, backstage);\n }),\n selectbox: make$6(function (spec, backstage) {\n return renderSelectBox(spec, backstage.shared.providers);\n }),\n sizeinput: make$6(function (spec, backstage) {\n return renderSizeInput(spec, backstage.shared.providers);\n }),\n urlinput: make$6(function (spec, backstage) {\n return renderUrlInput(spec, backstage, backstage.urlinput);\n }),\n customeditor: make$6(renderCustomEditor),\n htmlpanel: make$6(renderHtmlPanel),\n imagetools: make$6(function (spec, backstage) {\n return renderImageTools(spec, backstage.shared.providers);\n }),\n table: make$6(function (spec, backstage) {\n return renderTable(spec, backstage.shared.providers);\n }),\n panel: make$6(function (spec, backstage) {\n return renderPanel(spec, backstage);\n })\n };\n var noFormParts = {\n field: function (_name, spec) {\n return spec;\n }\n };\n var interpretInForm = function (parts, spec, oldBackstage) {\n var newBackstage = deepMerge(oldBackstage, {\n shared: {\n interpreter: function (childSpec) {\n return interpretParts(parts, childSpec, newBackstage);\n }\n }\n });\n return interpretParts(parts, spec, newBackstage);\n };\n var interpretParts = function (parts, spec, backstage) {\n return get$1(factories, spec.type).fold(function () {\n console.error('Unknown factory type \"' + spec.type + '\", defaulting to container: ', spec);\n return spec;\n }, function (factory) {\n return factory(parts, spec, backstage);\n });\n };\n var interpretWithoutForm = function (spec, backstage) {\n var parts = noFormParts;\n return interpretParts(parts, spec, backstage);\n };\n\n var bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n var getInlineDialogAnchor = function (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) {\n var bubble = nu$8(-12, 12, bubbleAlignments);\n var overrides = { maxHeightFunction: expandable() };\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n bubble: bubble,\n layouts: {\n onRtl: function () {\n return [northwest$3];\n },\n onLtr: function () {\n return [northeast$3];\n }\n },\n overrides: overrides\n };\n };\n var standardAnchor = function () {\n return {\n anchor: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: bubble,\n layouts: {\n onRtl: function () {\n return [southeast$1];\n },\n onLtr: function () {\n return [southwest$1];\n }\n },\n overrides: overrides\n };\n };\n return function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getBannerAnchor = function (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) {\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: function () {\n return [north$3];\n },\n onLtr: function () {\n return [north$3];\n }\n }\n };\n };\n var standardAnchor = function () {\n return {\n anchor: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: function () {\n return [south$1];\n },\n onLtr: function () {\n return [south$1];\n }\n }\n };\n };\n return function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getCursorAnchor = function (editor, bodyElement) {\n return function () {\n return {\n anchor: 'selection',\n root: bodyElement(),\n getSelection: function () {\n var 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 };\n };\n var getNodeAnchor = function (bodyElement) {\n return function (element) {\n return {\n anchor: 'node',\n root: bodyElement(),\n node: element\n };\n };\n };\n var getAnchors = function (editor, lazyAnchorbar, isToolbarTop) {\n var useFixedToolbarContainer = useFixedContainer(editor);\n var bodyElement = function () {\n return SugarElement.fromDom(editor.getBody());\n };\n var contentAreaElement = function () {\n return SugarElement.fromDom(editor.getContentAreaContainer());\n };\n var lazyUseEditableAreaAnchor = function () {\n return useFixedToolbarContainer || !isToolbarTop();\n };\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor(bodyElement)\n };\n };\n\n var colorPicker = function (editor) {\n return function (callback, value) {\n var dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n };\n var hasCustomColors$1 = function (editor) {\n return function () {\n return hasCustomColors(editor);\n };\n };\n var getColors$2 = function (editor) {\n return function () {\n return getColors(editor);\n };\n };\n var getColorCols$2 = function (editor) {\n return function () {\n return getColorCols$1(editor);\n };\n };\n var ColorInputBackstage = function (editor) {\n return {\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors$1(editor),\n getColors: getColors$2(editor),\n getColorCols: getColorCols$2(editor)\n };\n };\n\n var isDraggableModal$1 = function (editor) {\n return function () {\n return isDraggableModal(editor);\n };\n };\n var DialogBackstage = function (editor) {\n return { isDraggableModal: isDraggableModal$1(editor) };\n };\n\n var HeaderBackstage = function (editor) {\n var mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: function () {\n return mode.get() === 'top';\n },\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n var 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 var isNestedFormat = function (format) {\n return has(format, 'items');\n };\n var isBlockFormat = function (format) {\n return has(format, 'block');\n };\n var isInlineFormat = function (format) {\n return has(format, 'inline');\n };\n var isSelectorFormat = function (format) {\n return has(format, 'selector');\n };\n var mapFormats = function (userFormats) {\n return foldl(userFormats, function (acc, fmt) {\n if (isNestedFormat(fmt)) {\n var 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 var formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n var 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 __assign(__assign({}, acc), { formats: acc.formats.concat(fmt) });\n }\n }, {\n customFormats: [],\n formats: []\n });\n };\n var registerCustomFormats = function (editor, userFormats) {\n var result = mapFormats(userFormats);\n var registerFormats = function (customFormats) {\n each(customFormats, function (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', function () {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n var getStyleFormats = function (editor) {\n return getUserStyleFormats(editor).map(function (userFormats) {\n var registeredUserFormats = registerCustomFormats(editor, userFormats);\n return isMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n };\n\n var processBasic = function (item, isSelectedFor, getPreviewFor) {\n var formatterSpec = {\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n };\n return deepMerge(item, formatterSpec);\n };\n var register$3 = function (editor, formats, isSelectedFor, getPreviewFor) {\n var enrichSupported = function (item) {\n return processBasic(item, isSelectedFor, getPreviewFor);\n };\n var enrichMenu = function (item) {\n var submenuSpec = { type: 'submenu' };\n return deepMerge(item, submenuSpec);\n };\n var enrichCustom = function (item) {\n var formatName = isString(item.name) ? item.name : generate$1(item.title);\n var formatNameWithPrefix = 'custom-' + formatName;\n var customSpec = {\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n var newItem = deepMerge(item, customSpec);\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n var doEnrich = function (items) {\n return map(items, function (item) {\n var keys$1 = keys(item);\n if (hasNonNullableKey(item, 'items')) {\n var newItems_1 = doEnrich(item.items);\n return deepMerge(enrichMenu(item), {\n getStyleItems: function () {\n return newItems_1;\n }\n });\n } else if (hasNonNullableKey(item, 'format')) {\n return enrichSupported(item);\n } else if (keys$1.length === 1 && contains(keys$1, 'title')) {\n return deepMerge(item, { type: 'separator' });\n } else {\n return enrichCustom(item);\n }\n });\n };\n return doEnrich(formats);\n };\n\n var init$7 = function (editor) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var 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 };\n var flatten = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind(subs, flatten) : [fmt.format];\n };\n var settingsFormats = Cell([]);\n var settingsFlattenedFormats = Cell([]);\n var eventsFormats = Cell([]);\n var eventsFlattenedFormats = Cell([]);\n var replaceSettings = Cell(false);\n editor.on('PreInit', function (_e) {\n var formats = getStyleFormats(editor);\n var enriched = register$3(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n settingsFlattenedFormats.set(bind(enriched, flatten));\n });\n editor.on('addStyleModifications', function (e) {\n var modifications = register$3(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n eventsFlattenedFormats.set(bind(modifications, flatten));\n });\n var getData = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n var fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n var getFlattenedKeys = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();\n var fromEvents = eventsFlattenedFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return {\n getData: getData,\n getFlattenedKeys: getFlattenedKeys\n };\n };\n\n var isElement$2 = function (node) {\n return isNonNullable(node) && node.nodeType === 1;\n };\n var trim$1 = global$c.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$2(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 var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create$8 = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map(descendants(SugarElement.fromDom(root), selector), function (element) {\n return element.dom;\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate$1('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create$8('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create$8('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map(filter(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map(filter(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim$1(target.title).length > 0;\n };\n var find$5 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$5 };\n\n var STORAGE_KEY = 'tinymce-url-history';\n var HISTORY_LENGTH = 5;\n var isHttpUrl = function (url) {\n return isString(url) && /^https?/.test(url);\n };\n var isArrayOfUrl = function (a) {\n return isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n };\n var isRecordOfUrlArray = function (r) {\n return isObject(r) && find$1(r, function (value) {\n return !isArrayOfUrl(value);\n }).isNone();\n };\n var getAllHistory = function () {\n var unparsedHistory = global$9.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n var 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 var setAllHistory = function (history) {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$9.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n var getHistory = function (fileType) {\n var history = getAllHistory();\n return Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n };\n var addToHistory = function (url, fileType) {\n if (!isHttpUrl(url)) {\n return;\n }\n var history = getAllHistory();\n var items = Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n var itemsWithoutUrl = filter(items, function (item) {\n return item !== url;\n });\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n var isTruthy = function (value) {\n return !!value;\n };\n var makeMap = function (value) {\n return map$2(global$c.makeMap(value, /[, ]/), isTruthy);\n };\n var getPicker = function (editor) {\n return Optional.from(getFilePickerCallback(editor)).filter(isFunction);\n };\n var getPickerTypes = function (editor) {\n var optFileTypes = Optional.some(getFilePickerTypes(editor)).filter(isTruthy);\n var optLegacyTypes = Optional.some(getFileBrowserCallbackTypes(editor)).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(editor).fold(never, function (_picker) {\n return optTypes.fold(always, function (types) {\n return keys(types).length > 0 ? types : false;\n });\n });\n };\n var getPickerSetting = function (editor, filetype) {\n var 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 var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor, filetype).map(function (picker) {\n return function (entry) {\n return Future.nu(function (completer) {\n var handler = function (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 var r = {\n value: value,\n meta: meta\n };\n completer(r);\n };\n var meta = __assign({\n filetype: filetype,\n fieldname: entry.fieldname\n }, Optional.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getTextSetting = function (value) {\n return Optional.from(value).filter(isString).getOrUndefined();\n };\n var getLinkInformation = function (editor) {\n if (noTypeaheadUrls(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 var getValidationHandler = function (editor) {\n return Optional.from(getFilePickerValidatorHandler(editor));\n };\n var UrlInputBackstage = function (editor) {\n return {\n getHistory: getHistory,\n addToHistory: addToHistory,\n getLinkInformation: function () {\n return getLinkInformation(editor);\n },\n getValidationHandler: function () {\n return getValidationHandler(editor);\n },\n getUrlPicker: function (filetype) {\n return getUrlPicker(editor, filetype);\n }\n };\n };\n\n var init$8 = function (sink, editor, lazyAnchorbar) {\n var contextMenuState = Cell(false);\n var toolbar = HeaderBackstage(editor);\n var backstage = {\n shared: {\n providers: {\n icons: function () {\n return editor.ui.registry.getAll().icons;\n },\n menuItems: function () {\n return editor.ui.registry.getAll().menuItems;\n },\n translate: global$6.translate,\n isDisabled: function () {\n return editor.mode.isReadOnly() || editor.ui.isDisabled();\n },\n getSetting: editor.getParam.bind(editor)\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n header: toolbar,\n getSink: function () {\n return Result.value(sink);\n }\n },\n urlinput: UrlInputBackstage(editor),\n styleselect: init$7(editor),\n colorinput: ColorInputBackstage(editor),\n dialog: DialogBackstage(editor),\n isContextMenuOpen: function () {\n return contextMenuState.get();\n },\n setContextMenuState: function (state) {\n return contextMenuState.set(state);\n }\n };\n return backstage;\n };\n\n var expandable$1 = constant(function (element, available) {\n setMax$1(element, Math.floor(available));\n });\n\n var showContextToolbarEvent = 'contexttoolbar-show';\n var hideContextToolbarEvent = 'contexttoolbar-hide';\n\n var schema$k = constant([\n strict$1('dom'),\n defaulted$1('shell', true),\n field$1('toolbarBehaviours', [Replacing])\n ]);\n var enhanceGroups = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var parts$7 = constant([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n var factory$9 = function (detail, components, _spec, _externals) {\n var setGroups = function (toolbar, groups) {\n getGroupContainer(toolbar).fold(function () {\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 }, function (container) {\n Replacing.set(container, groups);\n });\n };\n var getGroupContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: 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: setGroups },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var Toolbar = composite$1({\n name: 'Toolbar',\n configFields: schema$k(),\n partFields: parts$7(),\n factory: factory$9,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n var generate$6 = function (xs, f) {\n var init = {\n len: 0,\n list: []\n };\n var r = foldl(xs, function (b, a) {\n var value = f(a, b.len);\n return value.fold(constant(b), function (v) {\n return {\n len: v.finish,\n list: b.list.concat([v])\n };\n });\n }, init);\n return r.list;\n };\n\n var output$1 = function (within, extra, withinWidth) {\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var apportion = function (units, total, len) {\n var parray = generate$6(units, function (unit, current) {\n var width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width: width\n });\n });\n var within = filter(parray, function (unit) {\n return unit.finish <= total;\n });\n var withinWidth = foldr(within, function (acc, el) {\n return acc + el.width;\n }, 0);\n var extra = parray.slice(within.length);\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var toUnit = function (parray) {\n return map(parray, function (unit) {\n return unit.element;\n });\n };\n var fitLast = function (within, extra, withinWidth) {\n var fits = toUnit(within.concat(extra));\n return output$1(fits, [], withinWidth);\n };\n var overflow = function (within, extra, overflower, withinWidth) {\n var fits = toUnit(within).concat([overflower]);\n return output$1(fits, toUnit(extra), withinWidth);\n };\n var fitAll = function (within, extra, withinWidth) {\n return output$1(toUnit(within), [], withinWidth);\n };\n var tryFit = function (total, units, len) {\n var divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n var partition$3 = function (total, units, len, overflower) {\n var divide = tryFit(total, units, len).getOrThunk(function () {\n return apportion(units, total - len(overflower), len);\n });\n var within = divide.within;\n var extra = divide.extra;\n var 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 var setGroups = function (toolbar, storedGroups) {\n var bGroups = map(storedGroups, function (g) {\n return premade$1(g);\n });\n Toolbar.setGroups(toolbar, bGroups);\n };\n var findFocusedComp = function (comps) {\n return findMap(comps, function (comp) {\n return search(comp.element).bind(function (focusedElm) {\n return comp.getSystem().getByDom(focusedElm).toOptional();\n });\n });\n };\n var refresh = function (toolbar, detail, setOverflow) {\n var primary = getPartOrDie(toolbar, detail, 'primary');\n var overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$2(primary.element, 'visibility', 'hidden');\n var groups = detail.builtGroups.get().concat([overflowGroup]);\n var focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups(primary, groups);\n var availableWidth = get$8(primary.element);\n var overflows = partition$3(availableWidth, detail.builtGroups.get(), function (comp) {\n return get$8(comp.element);\n }, overflowGroup);\n if (overflows.extra.length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups(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 var schema$l = constant([\n field$1('splitToolbarBehaviours', [Coupling]),\n state$1('builtGroups', function () {\n return Cell([]);\n })\n ]);\n\n var schema$m = constant([\n markers(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n strict$1('lazySink'),\n state$1('overflowGroups', function () {\n return Cell([]);\n })\n ].concat(schema$l()));\n var parts$8 = constant([\n required({\n factory: Toolbar,\n schema: schema$k(),\n name: 'primary'\n }),\n external$1({\n schema: schema$k(),\n name: 'overflow'\n }),\n external$1({ name: 'overflow-button' }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var schema$n = constant([\n markers(['toggledClass']),\n strict$1('lazySink'),\n strictFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted$1('event', dismissRequested())]),\n schema$1()\n ]);\n var parts$9 = constant([\n external$1({\n name: 'button',\n overrides: function (detail) {\n return {\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 }),\n external$1({\n factory: Toolbar,\n schema: schema$k(),\n name: 'toolbar',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n var toggle$2 = function (button, externals) {\n var 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 var position$2 = function (button, toolbar, detail, layouts) {\n var bounds = detail.getBounds.map(function (bounder) {\n return bounder();\n });\n var sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, {\n anchor: 'hotspot',\n hotspot: button,\n layouts: layouts,\n overrides: { maxWidthFunction: expandable$1() }\n }, toolbar, bounds);\n };\n var setGroups$1 = function (button, toolbar, detail, layouts, groups) {\n Toolbar.setGroups(toolbar, groups);\n position$2(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n var makeSandbox$1 = function (button, spec, detail) {\n var ariaOwner = manager();\n var onOpen = function (sandbox, toolbar) {\n detail.fetch().get(function (groups) {\n setGroups$1(button, toolbar, detail, spec.layouts, groups);\n ariaOwner.link(button.element);\n Keying.focusIn(toolbar);\n });\n };\n var onClose = function () {\n Toggling.off(button);\n Focusing.focus(button);\n ariaOwner.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaOwner.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOf(button, queryElem);\n },\n getAttachPoint: function () {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel(__assign({ isExtraPart: never }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel$1({\n doReposition: function () {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position$2(button, toolbar, detail, spec.layouts);\n });\n }\n }))\n })\n ])\n };\n };\n var factory$a = function (detail, components, spec, externals) {\n return __assign(__assign({}, Button.sketch(__assign(__assign({}, externals.button()), {\n action: function (button) {\n toggle$2(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: function (button) {\n return makeSandbox$1(button, spec, detail);\n }\n }\n })])\n }))), {\n apis: {\n setGroups: function (button, groups) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n setGroups$1(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: function (button) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position$2(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: function (button) {\n toggle$2(button, externals);\n },\n getToolbar: function (button) {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: function (button) {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n };\n var FloatingToolbarButton = composite$1({\n name: 'FloatingToolbarButton',\n factory: factory$a,\n configFields: schema$n(),\n partFields: parts$9(),\n apis: {\n setGroups: function (apis, button, groups) {\n apis.setGroups(button, groups);\n },\n reposition: function (apis, button) {\n apis.reposition(button);\n },\n toggle: function (apis, button) {\n apis.toggle(button);\n },\n getToolbar: function (apis, button) {\n return apis.getToolbar(button);\n },\n isOpen: function (apis, button) {\n return apis.isOpen(button);\n }\n }\n });\n\n var schema$o = constant([\n strict$1('items'),\n markers(['itemSelector']),\n field$1('tgroupBehaviours', [Keying])\n ]);\n var parts$a = constant([group({\n name: 'items',\n unit: 'item'\n })]);\n\n var factory$b = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n };\n };\n var ToolbarGroup = composite$1({\n name: 'ToolbarGroup',\n configFields: schema$o(),\n partFields: parts$a(),\n factory: factory$b\n });\n\n var buildGroups = function (comps) {\n return map(comps, function (g) {\n return premade$1(g);\n });\n };\n var refresh$1 = function (toolbar, memFloatingToolbarButton, detail) {\n refresh(toolbar, detail, function (overflowGroups) {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n var factory$c = function (detail, components, spec, externals) {\n var memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(buildGroups(detail.overflowGroups.get()));\n });\n },\n layouts: {\n onLtr: function () {\n return [\n southwest$1,\n southeast$1\n ];\n },\n onRtl: function () {\n return [\n southeast$1,\n southwest$1\n ];\n },\n onBottomLtr: function () {\n return [\n northwest$1,\n northeast$1\n ];\n },\n onBottomRtl: function () {\n return [\n northeast$1,\n northwest$1\n ];\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: components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: function () {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), { items: [memFloatingToolbarButton.asSpec()] }));\n }\n }\n })]),\n apis: {\n setGroups: function (toolbar, groups) {\n detail.builtGroups.set(map(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: function (toolbar) {\n return refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n toggle: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n isOpen: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false);\n },\n reposition: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitFloatingToolbar = composite$1({\n name: 'SplitFloatingToolbar',\n configFields: schema$m(),\n partFields: parts$8(),\n factory: factory$c,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n reposition: function (apis, toolbar) {\n apis.reposition(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n },\n getOverflow: function (apis, toolbar) {\n return apis.getOverflow(toolbar);\n }\n }\n });\n\n var getAnimationRoot = function (component, slideConfig) {\n return slideConfig.getAnimationRoot.fold(function () {\n return component.element;\n }, function (get) {\n return get(component);\n });\n };\n\n var getDimensionProperty = function (slideConfig) {\n return slideConfig.dimension.property;\n };\n var getDimension = function (slideConfig, elem) {\n return slideConfig.dimension.getDimension(elem);\n };\n var disableTransitions = function (component, slideConfig) {\n var root = getAnimationRoot(component, slideConfig);\n remove$5(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n var setShrunk = function (component, slideConfig) {\n remove$4(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$2(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n var setGrown = function (component, slideConfig) {\n remove$4(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$6(component.element, getDimensionProperty(slideConfig));\n };\n var doImmediateShrink = function (component, slideConfig, slideState, _calculatedSize) {\n slideState.setCollapsed();\n set$2(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n reflow(component.element);\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n var doStartShrink = function (component, slideConfig, slideState, calculatedSize) {\n var size = calculatedSize.getOrThunk(function () {\n return getDimension(slideConfig, component.element);\n });\n slideState.setCollapsed();\n set$2(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n var root = getAnimationRoot(component, slideConfig);\n remove$4(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n var doStartSmartShrink = function (component, slideConfig, slideState) {\n var size = getDimension(slideConfig, component.element);\n var shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n var doStartGrow = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n var wasShrinking = has$2(root, slideConfig.shrinkingClass);\n var beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n var fullSize = getDimension(slideConfig, component.element);\n var startPartialGrow = function () {\n set$2(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n var startCompleteGrow = function () {\n setShrunk(component, slideConfig);\n };\n var setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$4(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$2(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n var refresh$2 = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n remove$6(component.element, getDimensionProperty(slideConfig));\n var fullSize = getDimension(slideConfig, component.element);\n set$2(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n var grow = function (component, slideConfig, slideState) {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n var shrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n var immediateShrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState, Optional.none());\n }\n };\n var hasGrown = function (component, slideConfig, slideState) {\n return slideState.isExpanded();\n };\n var hasShrunk = function (component, slideConfig, slideState) {\n return slideState.isCollapsed();\n };\n var isGrowing = function (component, slideConfig, _slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has$2(root, slideConfig.growingClass) === true;\n };\n var isShrinking = function (component, slideConfig, _slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has$2(root, slideConfig.shrinkingClass) === true;\n };\n var isTransitioning = function (component, slideConfig, slideState) {\n return isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n };\n var toggleGrow = function (component, slideConfig, slideState) {\n var f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$2,\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 });\n\n var exhibit$6 = function (base, slideConfig, _slideState) {\n var expanded = slideConfig.expanded;\n return expanded ? nu$6({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$6({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n var events$d = function (slideConfig, slideState) {\n return derive([runOnSource(transitionend(), function (component, simulatedEvent) {\n var 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 var notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n };\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6,\n events: events$d\n });\n\n var SlidingSchema = [\n strict$1('closedClass'),\n strict$1('openClass'),\n strict$1('shrinkingClass'),\n strict$1('growingClass'),\n option('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted$1('expanded', false),\n strictOf('dimension', choose$1('property', {\n width: [\n output('property', 'width'),\n output('getDimension', function (elem) {\n return get$8(elem) + 'px';\n })\n ],\n height: [\n output('property', 'height'),\n output('getDimension', function (elem) {\n return get$7(elem) + 'px';\n })\n ]\n }))\n ];\n\n var init$9 = function (spec) {\n var state = Cell(spec.expanded);\n var readState = function () {\n return 'expanded: ' + state.get();\n };\n return nu$5({\n isExpanded: function () {\n return state.get() === true;\n },\n isCollapsed: function () {\n return state.get() === false;\n },\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState: readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$9\n });\n\n var Sliding = create$1({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n var schema$p = constant([\n markers([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$l()));\n var parts$b = constant([\n required({\n factory: Toolbar,\n schema: schema$k(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$k(),\n name: 'overflow',\n overrides: function (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: function (comp) {\n getPart(comp, detail, 'overflow-button').each(function (button) {\n Toggling.off(button);\n Focusing.focus(button);\n });\n detail.onClosed(comp);\n },\n onGrown: function (comp) {\n Keying.focusIn(comp);\n detail.onOpened(comp);\n },\n onStartGrow: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external$1({\n name: 'overflow-button',\n overrides: function (detail) {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })])\n };\n }\n }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var isOpen$1 = function (toolbar, detail) {\n return getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n };\n var toggleToolbar = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow-button').bind(function () {\n return getPart(toolbar, detail, 'overflow');\n }).each(function (overf) {\n refresh$3(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n };\n var refresh$3 = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').each(function (overflow) {\n refresh(toolbar, detail, function (groups) {\n var builtGroups = map(groups, function (g) {\n return premade$1(g);\n });\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(function (button) {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n var factory$d = function (detail, components, spec, externals) {\n var toolbarToggleEvent = 'alloy.toolbar.toggle';\n var doSetGroups = function (toolbar, groups) {\n var built = map(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: function (toolbar) {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), {\n items: [Button.sketch(__assign(__assign({}, externals['overflow-button']()), {\n action: function (_button) {\n emit(toolbar, toolbarToggleEvent);\n }\n }))]\n }));\n }\n }\n }),\n config('toolbar-toggle-events', [run(toolbarToggleEvent, function (toolbar) {\n toggleToolbar(toolbar, detail);\n })])\n ]),\n apis: {\n setGroups: function (toolbar, groups) {\n doSetGroups(toolbar, groups);\n refresh$3(toolbar, detail);\n },\n refresh: function (toolbar) {\n return refresh$3(toolbar, detail);\n },\n toggle: function (toolbar) {\n return toggleToolbar(toolbar, detail);\n },\n isOpen: function (toolbar) {\n return isOpen$1(toolbar, detail);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitSlidingToolbar = composite$1({\n name: 'SplitSlidingToolbar',\n configFields: schema$p(),\n partFields: parts$b(),\n factory: factory$d,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n }\n }\n });\n\n var toolbarHeightChange = constant(generate$1('toolbar-height-change'));\n\n var renderToolbarGroupCommon = function (toolbarGroup) {\n var attributes = toolbarGroup.title.fold(function () {\n return {};\n }, function (title) {\n return { attributes: { title: title } };\n });\n return {\n dom: __assign({\n tag: 'div',\n classes: ['tox-toolbar__group']\n }, attributes),\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 var renderToolbarGroup = function (toolbarGroup) {\n return ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n };\n var getToolbarbehaviours = function (toolbarSpec, modeName) {\n var onAttached = runOnAttached(function (component) {\n var groups = map(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 var renderMoreToolbarCommon = function (toolbarSpec) {\n var 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 disabled: false,\n tooltip: Optional.some('More...'),\n primary: false,\n borderless: false\n }, Optional.none(), toolbarSpec.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n var overflowXOffset = 4;\n var primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch(__assign(__assign({}, baseSpec), {\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: function () {\n var headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n var headerBounds = absolute$1(headerElem);\n var docElem = documentElement(headerElem);\n var docBounds = absolute$1(docElem);\n var height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds$1(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: __assign(__assign({}, 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 var renderSlidingMoreToolbar = function (toolbarSpec) {\n var primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n var overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch(__assign(__assign({}, 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: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n },\n onClosed: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n }\n }));\n };\n var renderToolbar = function (toolbarSpec) {\n var 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.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n });\n };\n\n var groupToolbarButtonSchema = objOf([\n strictString('type'),\n strictOf('items', oneOf([\n arrOfObj$1([\n strictString('name'),\n strictArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n var createGroupToolbarButton = function (spec) {\n return asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n };\n\n var baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n strictFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n\n var MenuButtonSchema = objOf(__spreadArrays([strictString('type')], baseMenuButtonFields));\n var createMenuButton = function (spec) {\n return asRaw('menubutton', MenuButtonSchema, spec);\n };\n\n var splitButtonSchema = objOf([\n strictString('type'),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n optionFunction('select'),\n strictFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaulted$1('columns', 1),\n strictFunction('onAction'),\n strictFunction('onItemAction')\n ]);\n var createSplitButton = function (spec) {\n return asRaw('SplitButton', splitButtonSchema, spec);\n };\n\n var events$e = function (reflectingConfig, reflectingState) {\n var update = function (component, data) {\n reflectingConfig.updateState.each(function (updateState) {\n var newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(function (renderComponents) {\n var newComponents = renderComponents(data, reflectingState.get());\n var newChildren = map(newComponents, component.getSystem().build);\n replaceChildren(component, newChildren);\n });\n };\n return derive([\n run(receive(), function (component, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n var channel = reflectingConfig.channel;\n if (contains(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached(function (comp, _se) {\n reflectingConfig.initialData.each(function (rawData) {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$e\n });\n\n var getState$2 = function (component, replaceConfig, reflectState) {\n return reflectState;\n };\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState$2\n });\n\n var ReflectingSchema = [\n strict$1('channel'),\n option('renderComponents'),\n option('updateState'),\n option('initialData')\n ];\n\n var init$a = function () {\n var cell = Cell(Optional.none());\n var set = function (optS) {\n return cell.set(optS);\n };\n var clear = function () {\n return cell.set(Optional.none());\n };\n var get = function () {\n return cell.get();\n };\n var readState = function () {\n return cell.get().fold(function () {\n return 'none';\n }, function (x) {\n return x;\n });\n };\n return {\n readState: readState,\n get: get,\n set: set,\n clear: clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n var Reflecting = create$1({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n var schema$q = constant([\n strict$1('toggleClass'),\n strict$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted$1('getHotspot', Optional.some),\n defaulted$1('getAnchorOverrides', constant({})),\n schema$1(),\n onStrictHandler('onItemExecute'),\n option('lazySink'),\n strict$1('dom'),\n onHandler('onOpen'),\n field$1('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted$1('matchWidth', false),\n defaulted$1('useMinWidth', false),\n defaulted$1('eventOrder', {}),\n option('role')\n ].concat(sandboxFields()));\n var arrowPart = required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'arrow',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (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 var buttonPart = required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'button',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (btn) {\n btn.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n var parts$c = constant([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: function (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: [strict$1('text')],\n name: 'aria-descriptor'\n }),\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return {\n onExecute: function (tmenu, item) {\n tmenu.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType()\n ]);\n\n var factory$e = function (detail, components, spec, externals) {\n var _a;\n var switchToMenu = function (sandbox) {\n Composing.getCurrent(sandbox).each(function (current) {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, function (x) {\n return x;\n }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var openMenu = function (comp) {\n action(comp);\n return Optional.some(true);\n };\n var executeOnButton = function (comp) {\n var button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n var buttonEvents = __assign(__assign({}, derive([runOnAttached(function (component, _simulatedEvent) {\n var ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(function (descriptor) {\n var descriptorId = generate$1('aria');\n set$1(descriptor.element, 'id', descriptorId);\n set$1(component.element, 'aria-describedby', descriptorId);\n });\n })])), events$7(Optional.some(action)));\n var apis = {\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n var arrow = getPartOrDie(hotspot, detail, 'arrow');\n var extras = {\n onOpen: function () {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: function () {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox(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 var SplitDropdown = composite$1({\n name: 'SplitDropdown',\n configFields: schema$q(),\n partFields: parts$c(),\n factory: factory$e,\n apis: {\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var getButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getToggleApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getTooltipAttributes = function (tooltip, providersBackstage) {\n return tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n };\n var focusButtonEvent = generate$1('focus-button');\n var rtlIcon$1 = [\n 'checklist',\n 'ordered-list'\n ];\n var rtlTransform$1 = [\n 'indent',\n 'outdent',\n 'table-insert-column-after',\n 'table-insert-column-before',\n 'unordered-list'\n ];\n var renderCommonStructure = function (icon, text, tooltip, receiver, behaviours, providersBackstage) {\n var _d;\n var getIconName = function (iconName) {\n return global$6.isRtl() && contains(rtlIcon$1, iconName) ? iconName + '-rtl' : iconName;\n };\n var needsRtlClass = global$6.isRtl() && icon.exists(function (name) {\n return contains(rtlTransform$1, name);\n });\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []).concat(needsRtlClass ? ['tox-tbtn__icon-rtl'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]),\n eventOrder: (_d = {}, _d[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _d),\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n receivingConfig(),\n config('common-button-display-events', [run(mousedown(), function (button, se) {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })])\n ].concat(receiver.map(function (r) {\n return Reflecting.config({\n channel: r,\n initialData: {\n icon: icon,\n text: text\n },\n renderComponents: function (data, _state) {\n return componentRenderPipeline([\n data.icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n data.text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]);\n }\n });\n }).toArray()).concat(behaviours.getOr([])))\n };\n };\n var renderFloatingToolbarButton = function (spec, backstage, identifyButtons, attributes) {\n var sharedBackstage = backstage.shared;\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(map(identifyButtons(spec.items), renderToolbarGroup));\n });\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: attributes\n }\n }\n }\n });\n };\n var renderCommonToolbarButton = function (spec, specialisation, providersBackstage) {\n var editorOffCell = Cell(noop);\n var 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(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\n receivingConfig()\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n var renderToolbarButton = function (spec, providersBackstage) {\n return renderToolbarButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {\n return renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n };\n var renderToolbarToggleButton = function (spec, providersBackstage) {\n return renderToolbarToggleButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {\n return deepMerge(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 };\n var fetchChoices = function (getApi, spec, providersBackstage) {\n return function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (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(function (comp, _se) {\n detectSize(comp, 4, classForPreset(spec.presets)).each(function (_d) {\n var numRows = _d.numRows, numColumns = _d.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _d;\n var displayChannel = generate$1('channel-update-split-dropdown-display');\n var getApi = function (comp) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(comp);\n },\n setDisabled: function (state) {\n return Disabling.set(comp, state);\n },\n setIconFill: function (id, value) {\n descendant$1(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant$1(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$1(comp.element, 'aria-pressed', state);\n descendant$1(comp.element, 'span').each(function (button) {\n comp.getSystem().getByDom(button).each(function (buttonComp) {\n return Toggling.set(buttonComp, state);\n });\n });\n },\n isActive: function () {\n return descendant$1(comp.element, 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (_a, _b, _c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n config('split-dropdown-events', [\n run(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: (_d = {}, _d[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _d),\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$e('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig()\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n var getFormApi = function (input) {\n return {\n hide: function () {\n return emit(input, sandboxClose());\n },\n getValue: function () {\n return Representing.getValue(input);\n }\n };\n };\n var runOnExecute$1 = function (memInput, original) {\n return run(internalToolbarButtonExecute, function (comp, se) {\n var input = memInput.get(comp);\n var formApi = getFormApi(input);\n original.onAction(formApi, se.event.buttonApi);\n });\n };\n var renderContextButton = function (memInput, button, extras) {\n var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToolbarButton(__assign(__assign({}, rest), {\n type: 'button',\n onAction: noop\n })));\n return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);\n };\n var renderContextToggleButton = function (memInput, button, extras) {\n var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToggleButton(__assign(__assign({}, rest), {\n type: 'togglebutton',\n onAction: noop\n })));\n return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);\n };\n var generateOne$1 = function (memInput, button, providersBackstage) {\n var extras = { backstage: { shared: { providers: providersBackstage } } };\n if (button.type === 'contextformtogglebutton') {\n return renderContextToggleButton(memInput, button, extras);\n } else {\n return renderContextButton(memInput, button, extras);\n }\n };\n var generate$7 = function (memInput, buttons, providersBackstage) {\n var mementos = map(buttons, function (button) {\n return record(generateOne$1(memInput, button, providersBackstage));\n });\n var asSpecs = function () {\n return map(mementos, function (mem) {\n return mem.asSpec();\n });\n };\n var findPrimary = function (compInSystem) {\n return findMap(buttons, function (button, i) {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(function (mem) {\n return mem.getOpt(compInSystem);\n }).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n };\n return {\n asSpecs: asSpecs,\n findPrimary: findPrimary\n };\n };\n\n var buildInitGroups = function (ctx, providers) {\n var inputAttributes = ctx.label.fold(function () {\n return {};\n }, function (label) {\n return { 'aria-label': label };\n });\n var memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes: inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: function (input) {\n return commands.findPrimary(input).map(function (primary) {\n emitExecute(primary);\n return true;\n });\n },\n onLeft: function (comp, se) {\n se.cut();\n return Optional.none();\n },\n onRight: function (comp, se) {\n se.cut();\n return Optional.none();\n }\n })])\n }));\n var commands = generate$7(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 var renderContextForm = function (toolbarType, ctx, providers) {\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: providers\n });\n };\n var ContextForm = {\n renderContextForm: renderContextForm,\n buildInitGroups: buildInitGroups\n };\n\n var getHorizontalBounds = function (contentAreaBox, viewportBounds) {\n var x = Math.max(viewportBounds.x, contentAreaBox.x);\n var contentBoxWidth = contentAreaBox.right - x;\n var maxViewportWidth = viewportBounds.width - (x - viewportBounds.x);\n var width = Math.min(contentBoxWidth, maxViewportWidth);\n return {\n x: x,\n width: width\n };\n };\n var getVerticalBounds = function (editor, contentAreaBox, viewportBounds, isToolbarLocationTop) {\n var container = SugarElement.fromDom(editor.getContainer());\n var header = descendant$1(container, '.tox-editor-header').getOr(container);\n var headerBox = box(header);\n var isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n var isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom, 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, viewportBounds.bottom)\n };\n }\n var containerBounds = box(container);\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y, viewportBounds.y),\n bottom: Math.min(headerBox.y, viewportBounds.bottom)\n };\n };\n var getContextToolbarBounds = function (editor, sharedBackstage) {\n var viewportBounds = getBounds(window);\n var contentAreaBox = box(SugarElement.fromDom(editor.getContentAreaContainer()));\n var toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n var _a = getHorizontalBounds(contentAreaBox, viewportBounds), x = _a.x, width = _a.width;\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds$1(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n var isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n var _b = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop), y = _b.y, bottom = _b.bottom;\n return bounds$1(x, y, width, bottom - y);\n }\n };\n\n var matchTargetWith = function (elem, candidates) {\n var ctxs = filter(candidates, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom);\n });\n var _a = partition(ctxs, function (t) {\n return t.type === 'contexttoolbar';\n }), pass = _a.pass, fail = _a.fail;\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n var filterByPositionForStartNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var doesPositionExist = function (value) {\n return exists(toolbars, function (t) {\n return t.position === value;\n });\n };\n var filterToolbarsByPosition = function (value) {\n return filter(toolbars, function (t) {\n return t.position === value;\n });\n };\n var hasSelectionToolbars = doesPositionExist('selection');\n var hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n var nodeToolbars = filterToolbarsByPosition('node');\n var selectionToolbars = map(filterToolbarsByPosition('selection'), function (t) {\n return __assign(__assign({}, t), { 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 var filterByPositionForAncestorNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var findPosition_1 = function (value) {\n return find(toolbars, function (t) {\n return t.position === value;\n });\n };\n var basePosition = findPosition_1('selection').orThunk(function () {\n return findPosition_1('node');\n }).orThunk(function () {\n return findPosition_1('line');\n }).map(function (t) {\n return t.position;\n });\n return basePosition.fold(function () {\n return [];\n }, function (pos) {\n return filter(toolbars, function (t) {\n return t.position === pos;\n });\n });\n }\n };\n var matchStartNode = function (elem, nodeCandidates, editorCandidates) {\n var nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n var editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n var toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem: elem,\n toolbars: toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n var matchAncestor = function (isRoot, startNode, scopes) {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor(startNode, function (ancestorElem) {\n var _a = matchTargetWith(ancestorElem, scopes.inNodeScope), contextToolbars = _a.contextToolbars, contextForms = _a.contextForms;\n var toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars: toolbars\n }) : Optional.none();\n }, isRoot);\n }\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = SugarElement.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq$1(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains$2(rootElem, startNode);\n };\n var startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(function () {\n return matchAncestor(isRoot, startNode, scopes);\n });\n };\n\n var categorise = function (contextToolbars, navigate) {\n var forms = {};\n var inNodeScope = [];\n var inEditorScope = [];\n var formNavigators = {};\n var lookupTable = {};\n var registerForm = function (key, toolbarSpec) {\n var contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(function (launch) {\n formNavigators['form:' + key + ''] = __assign(__assign({}, toolbarSpec.launch), {\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: function () {\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 var registerToolbar = function (key, toolbarSpec) {\n createContextToolbar(toolbarSpec).each(function (contextToolbar) {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n var keys$1 = keys(contextToolbars);\n each(keys$1, function (key) {\n var 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: forms,\n inNodeScope: inNodeScope,\n inEditorScope: inEditorScope,\n lookupTable: lookupTable,\n formNavigators: formNavigators\n };\n };\n\n var forwardSlideEvent = generate$1('forward-slide');\n var backSlideEvent = generate$1('backward-slide');\n var changeSlideEvent = generate$1('change-slide-event');\n var resizingClass = 'tox-pop--resizing';\n var renderContextToolbar = function (spec) {\n var stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: function (comp) {\n stack.set([]);\n InlineView.getContent(comp).each(function (c) {\n remove$6(c.element, 'visibility');\n });\n remove$4(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), function (comp, _se) {\n remove$4(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n }),\n run(changeSlideEvent, function (comp, se) {\n var elem = comp.element;\n remove$6(elem, 'width');\n var currentWidth = get$8(elem);\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n var newWidth = get$8(elem);\n set$2(elem, 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(function (newContents) {\n se.event.focus.bind(function (f) {\n focus$1(f);\n return search(elem);\n }).orThunk(function () {\n Keying.focusIn(newContents);\n return active(getRootNode(elem));\n });\n });\n global$2.setTimeout(function () {\n set$2(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run(forwardSlideEvent, function (comp, se) {\n InlineView.getContent(comp).each(function (oldContents) {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run(backSlideEvent, function (comp, _se) {\n last(stack.get()).each(function (last) {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade$1(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n return last(stack.get()).fold(function () {\n return spec.onEscape();\n }, function (_) {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n });\n }\n })\n ]),\n lazySink: function () {\n return Result.value(spec.sink);\n }\n });\n };\n\n var generateSelectItems = function (_editor, backstage, spec) {\n var generateItem = function (rawItem, response, disabled, value) {\n var 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 var items = bind(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n disabled: items.length <= 0,\n getSubmenuItems: function () {\n return bind(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n }\n });\n }\n } else {\n return Optional.some(__assign({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n disabled: disabled,\n onAction: spec.onAction(rawItem)\n }, rawItem.getStylePreview().fold(function () {\n return {};\n }, function (preview) {\n return { meta: { style: preview } };\n })));\n }\n };\n var validate = function (item, response, value) {\n var 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 var validateItems = function (preItems) {\n var value = spec.getCurrentValue();\n var response = spec.shouldHide ? 0 : 1;\n return bind(preItems, function (item) {\n return validate(item, response, value);\n });\n };\n var getFetch = function (backstage, getStyleItems) {\n return function (comp, callback) {\n var preItems = getStyleItems();\n var items = validateItems(preItems);\n var menu = build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false);\n callback(menu);\n };\n };\n return {\n validateItems: validateItems,\n getFetch: getFetch\n };\n };\n var createMenuItems = function (editor, backstage, spec) {\n var dataset = spec.dataset;\n var getStyleItems = dataset.type === 'basic' ? function () {\n return map(dataset.data, function (d) {\n return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);\n });\n } : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems: getStyleItems\n };\n };\n var createSelectButton = function (editor, backstage, spec) {\n var _a = createMenuItems(editor, backstage, spec), items = _a.items, getStyleItems = _a.getStyleItems;\n var getApi = function (comp) {\n return {\n getComponent: function () {\n return comp;\n }\n };\n };\n var onSetup = function (api) {\n spec.setInitialValue.each(function (f) {\n return f(api.getComponent());\n });\n return spec.nodeChangeHandler.map(function (f) {\n var handler = f(api.getComponent());\n editor.on('NodeChange', handler);\n return function () {\n editor.off('NodeChange', handler);\n };\n }).getOr(noop);\n };\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Optional.none() : Optional.some(''),\n icon: spec.icon,\n tooltip: Optional.from(spec.tooltip),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup: onSetup,\n getApi: getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: []\n }, 'tox-tbtn', backstage.shared);\n };\n\n var process = function (rawFormats) {\n return map(rawFormats, function (item) {\n var title = item, format = item;\n var values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title: title,\n format: format\n };\n });\n };\n var buildBasicStaticDataset = function (data) {\n return {\n type: 'basic',\n data: data\n };\n };\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n var split = function (rawFormats, delimiter) {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n var buildBasicSettingsDataset = function (editor, settingName, defaults, delimiter) {\n var rawFormats = editor.getParam(settingName, defaults, 'string');\n var data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data: data\n };\n };\n\n var 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 var getSpec = function (editor) {\n var getMatchingValue = function () {\n return find(alignMenuItems, function (item) {\n return editor.formatter.match(item.format);\n });\n };\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (_format) {\n return function () {\n return Optional.none();\n };\n };\n var updateSelectMenuIcon = function (comp) {\n var match = getMatchingValue();\n var alignment = match.fold(function () {\n return 'left';\n }, function (item) {\n return item.title.toLowerCase();\n });\n emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });\n };\n var nodeChangeHandler = Optional.some(function (comp) {\n return function () {\n return updateSelectMenuIcon(comp);\n };\n });\n var setInitialValue = Optional.some(function (comp) {\n return updateSelectMenuIcon(comp);\n });\n var dataset = buildBasicStaticDataset(alignMenuItems);\n var onAction = function (rawItem) {\n return function () {\n return find(alignMenuItems, function (item) {\n return item.format === rawItem.format;\n }).each(function (item) {\n return editor.execCommand(item.command);\n });\n };\n };\n return {\n tooltip: 'Align',\n icon: Optional.some('align-left'),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createAlignSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec(editor));\n };\n var alignSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate('Align'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsFormats = '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 var systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n var splitFonts = function (fontFamily) {\n var fonts = fontFamily.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n return font.replace(/^['\"]+|['\"]+$/g, '');\n });\n };\n var isSystemFontStack = function (fontFamily) {\n var matchesSystemStack = function () {\n var fonts = splitFonts(fontFamily.toLowerCase());\n return forall(systemStackFonts, function (font) {\n return fonts.indexOf(font.toLowerCase()) > -1;\n });\n };\n return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n };\n var getSpec$1 = function (editor) {\n var getMatchingValue = function () {\n var getFirstFont = function (fontFamily) {\n return fontFamily ? splitFonts(fontFamily)[0] : '';\n };\n var fontFamily = editor.queryCommandValue('FontName');\n var items = dataset.data;\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var matchOpt = find(items, function (item) {\n var format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(function () {\n if (isSystemFontStack(font)) {\n return Optional.from({\n title: 'System Font',\n format: font\n });\n } else {\n return Optional.none();\n }\n });\n return {\n matchOpt: matchOpt,\n font: fontFamily\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = function (item) {\n return function () {\n return Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n };\n };\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, font = _a.font;\n var text = matchOpt.fold(function () {\n return font;\n }, function (item) {\n return item.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Optional.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Optional.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: getCurrentValue,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$1(editor));\n };\n var fontSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontformats', {\n text: backstage.shared.providers.translate('Fonts'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n var 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 var round$1 = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$1(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n var toLegacy = function (fontSize) {\n return get$1(legacyFontSizes, fontSize).getOr('');\n };\n var getSpec$2 = function (editor) {\n var getMatchingValue = function () {\n var matchOpt = Optional.none();\n var items = dataset.data;\n var fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n var _loop_1 = function (precision) {\n var pt = toPt(fontSize, precision);\n var legacy = toLegacy(pt);\n matchOpt = find(items, function (item) {\n return item.format === fontSize || item.format === pt || item.format === legacy;\n });\n };\n for (var precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n _loop_1(precision);\n }\n }\n return {\n matchOpt: matchOpt,\n size: fontSize\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = constant(Optional.none);\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, size = _a.size;\n var text = matchOpt.fold(function () {\n return size;\n }, function (match) {\n return match.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Optional.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Optional.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getPreviewFor: getPreviewFor,\n getCurrentValue: getCurrentValue,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontsizeSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$2(editor));\n };\n var fontsizeSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontsizes', {\n text: 'Font sizes',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var findNearest = function (editor, getStyles) {\n var styles = getStyles();\n var formats = map(styles, function (style) {\n return style.format;\n });\n return Optional.from(editor.formatter.closest(formats)).bind(function (fmt) {\n return find(styles, function (data) {\n return data.format === fmt;\n });\n }).orThunk(function () {\n return someIf(editor.formatter.match('p'), {\n title: 'Paragraph',\n format: 'p'\n });\n });\n };\n\n var revocable = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n set: set\n };\n };\n var destroyable = function () {\n return revocable(function (s) {\n return s.destroy();\n });\n };\n var unbindable = function () {\n return revocable(function (s) {\n return s.unbind();\n });\n };\n var value$3 = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var onSetupFormatToggle = function (editor, name) {\n return function (api) {\n var boundCallback = unbindable();\n var init = function () {\n api.setActive(editor.formatter.match(name));\n var binding = editor.formatter.formatChanged(name, api.setActive);\n boundCallback.set(binding);\n };\n editor.initialized ? init() : editor.on('init', init);\n return boundCallback.clear;\n };\n };\n var onActionToggleFormat = function (editor) {\n return function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n };\n };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var getSpec$3 = function (editor) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\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 };\n };\n var updateSelectMenuText = function (comp) {\n var detectedFormat = findNearest(editor, function () {\n return dataset.data;\n });\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Optional.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Optional.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createFormatSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$3(editor));\n };\n var formatSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blockformats', {\n text: 'Blocks',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var getSpec$4 = function (editor, dataset) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var 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 };\n var updateSelectMenuText = function (comp) {\n var getFormatItems = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind(subs, getFormatItems) : [{\n title: fmt.title,\n format: fmt.format\n }];\n };\n var flattenedItems = bind(getStyleFormats(editor), getFormatItems);\n var detectedFormat = findNearest(editor, function () {\n return flattenedItems;\n });\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Optional.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Optional.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n return {\n tooltip: 'Formats',\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n },\n dataset: dataset\n };\n };\n var createStyleSelect = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n return createSelectButton(editor, backstage, getSpec$4(editor, dataset));\n };\n var styleSelectMenu = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n var menuItems = createMenuItems(editor, backstage, getSpec$4(editor, dataset));\n editor.ui.registry.addNestedMenuItem('formats', {\n text: 'Formats',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styleselect']\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 var renderFromBridge = function (bridgeBuilder, render) {\n return function (spec, extras, editor) {\n var internal = bridgeBuilder(spec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return render(internal, extras, editor);\n };\n };\n var types = {\n button: renderFromBridge(createToolbarButton, function (s, extras) {\n return renderToolbarButton(s, extras.backstage.shared.providers);\n }),\n togglebutton: renderFromBridge(createToggleButton, function (s, extras) {\n return renderToolbarToggleButton(s, extras.backstage.shared.providers);\n }),\n menubutton: renderFromBridge(createMenuButton, function (s, extras) {\n return renderMenuButton(s, 'tox-tbtn', extras.backstage, Optional.none());\n }),\n splitbutton: renderFromBridge(createSplitButton, function (s, extras) {\n return renderSplitButton(s, extras.backstage.shared);\n }),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, function (s, extras, editor) {\n var _a;\n var buttons = editor.ui.registry.getAll().buttons;\n var identify = function (toolbar) {\n return identifyButtons(editor, {\n buttons: buttons,\n toolbar: toolbar,\n allowToolbarGroups: false\n }, extras, Optional.none());\n };\n var attributes = (_a = {}, _a[Attribute] = extras.backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a);\n switch (getToolbarMode(editor)) {\n case ToolbarMode.floating:\n return renderFloatingToolbarButton(s, extras.backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n }),\n styleSelectButton: function (editor, extras) {\n return createStyleSelect(editor, extras.backstage);\n },\n fontsizeSelectButton: function (editor, extras) {\n return createFontsizeSelect(editor, extras.backstage);\n },\n fontSelectButton: function (editor, extras) {\n return createFontSelect(editor, extras.backstage);\n },\n formatButton: function (editor, extras) {\n return createFormatSelect(editor, extras.backstage);\n },\n alignMenuButton: function (editor, extras) {\n return createAlignSelect(editor, extras.backstage);\n }\n };\n var extractFrom = function (spec, extras, editor) {\n return get$1(types, spec.type).fold(function () {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, function (render) {\n return Optional.some(render(spec, extras, editor));\n });\n };\n var bespokeButtons = {\n styleselect: types.styleSelectButton,\n fontsizeselect: types.fontsizeSelectButton,\n fontselect: types.fontSelectButton,\n formatselect: types.formatButton,\n align: types.alignMenuButton\n };\n var removeUnusedDefaults = function (buttons) {\n var filteredItemGroups = map(defaultToolbar, function (group) {\n var items = filter(group.items, function (subItem) {\n return has(buttons, subItem) || has(bespokeButtons, subItem);\n });\n return {\n name: group.name,\n items: items\n };\n });\n return filter(filteredItemGroups, function (group) {\n return group.items.length > 0;\n });\n };\n var convertStringToolbar = function (strToolbar) {\n var groupsStrings = strToolbar.split('|');\n return map(groupsStrings, function (g) {\n return { items: g.trim().split(' ') };\n });\n };\n var isToolbarGroupSettingArray = function (toolbar) {\n return isArrayOf(toolbar, function (t) {\n return has(t, 'name') && has(t, 'items');\n });\n };\n var createToolbar = function (toolbarConfig) {\n var toolbar = toolbarConfig.toolbar;\n var 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 var lookupButton = function (editor, buttons, toolbarItem, allowToolbarGroups, extras, prefixes) {\n return get$1(buttons, toolbarItem.toLowerCase()).orThunk(function () {\n return prefixes.bind(function (ps) {\n return findMap(ps, function (prefix) {\n return get$1(buttons, prefix + toolbarItem.toLowerCase());\n });\n });\n }).fold(function () {\n return get$1(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {\n return r(editor, extras);\n }).orThunk(function () {\n return Optional.none();\n });\n }, function (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, extras, editor);\n }\n });\n };\n var identifyButtons = function (editor, toolbarConfig, extras, prefixes) {\n var toolbarGroups = createToolbar(toolbarConfig);\n var groups = map(toolbarGroups, function (group) {\n var items = bind(group.items, function (toolbarItem) {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, extras, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n items: items\n };\n });\n return filter(groups, function (group) {\n return group.items.length > 0;\n });\n };\n\n var bubbleSize = 12;\n var 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 };\n var anchorOverrides = {\n maxHeightFunction: expandable(),\n maxWidthFunction: expandable$1()\n };\n var desktopAnchorSpecLayouts = {\n onLtr: function () {\n return [\n north$1,\n south$1,\n northeast$1,\n southeast$1,\n northwest$1,\n southwest$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n north$1,\n south$1,\n northwest$1,\n southwest$1,\n northeast$1,\n southeast$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var mobileAnchorSpecLayouts = {\n onLtr: function () {\n return [\n south$1,\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n north$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n south$1,\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n north$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var getAnchorLayout = function (position, isTouch) {\n if (position === 'line') {\n return {\n bubble: nu$8(bubbleSize, 0, bubbleAlignments$1),\n layouts: {\n onLtr: function () {\n return [east$1];\n },\n onRtl: function () {\n return [west$1];\n }\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$8(0, bubbleSize, bubbleAlignments$1),\n layouts: isTouch ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts,\n overrides: anchorOverrides\n };\n }\n };\n var register$4 = function (editor, registryContextToolbars, sink, extras) {\n var isTouch = detect$3().deviceType.isTouch;\n var contextbar = build$1(renderContextToolbar({\n sink: sink,\n onEscape: function () {\n editor.focus();\n return Optional.some(true);\n }\n }));\n var getBounds = function () {\n return getContextToolbarBounds(editor, extras.backstage.shared);\n };\n var isRangeOverlapping = function (aTop, aBottom, bTop, bBottom) {\n return Math.max(aTop, bTop) <= Math.min(aBottom, bBottom);\n };\n var getLastElementVerticalBound = function () {\n var nodeBounds = lastElement.get().filter(function (ele) {\n return inBody(SugarElement.fromDom(ele));\n }).map(function (ele) {\n return ele.getBoundingClientRect();\n }).getOrThunk(function () {\n return editor.selection.getRng().getBoundingClientRect();\n });\n var diffTop = editor.inline ? get$9().top : absolute$1(SugarElement.fromDom(editor.getBody())).y;\n return {\n y: nodeBounds.top + diffTop,\n bottom: nodeBounds.bottom + diffTop\n };\n };\n var shouldContextToolbarHide = function () {\n if (isTouch() && extras.backstage.isContextMenuOpen()) {\n return true;\n }\n var lastElementBounds = getLastElementVerticalBound();\n var contextToolbarBounds = getBounds();\n return !isRangeOverlapping(lastElementBounds.y, lastElementBounds.bottom, contextToolbarBounds.y, contextToolbarBounds.bottom);\n };\n var close = function () {\n lastAnchor.set(Optional.none());\n InlineView.hide(contextbar);\n };\n var forceHide = function () {\n InlineView.hide(contextbar);\n };\n var hideOrRepositionIfNecessary = function () {\n lastAnchor.get().each(function (anchor) {\n var contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$2(contextBarEle, 'display', 'none');\n } else {\n Positioning.positionWithinBounds(sink, anchor, contextbar, Optional.some(getBounds()));\n }\n });\n };\n var lastAnchor = Cell(Optional.none());\n var lastElement = Cell(Optional.none());\n var timer = Cell(null);\n var wrapInPopDialog = function (toolbarSpec) {\n return {\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(function (comp) {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', function () {\n return Keying.focusIn(comp);\n });\n }),\n runOnDetached(function (_comp) {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n };\n };\n var getScopes = cached(function () {\n return categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildContextToolbarGroups = function (allButtons, ctx) {\n return identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Optional.some(['form:']));\n };\n var buildContextMenuGroups = function (ctx, providers) {\n return ContextForm.buildInitGroups(ctx, providers);\n };\n var buildToolbar = function (toolbars) {\n var buttons = editor.ui.registry.getAll().buttons;\n var scopes = getScopes();\n var allButtons = __assign(__assign({}, buttons), scopes.formNavigators);\n var toolbarType = getToolbarMode(editor) === ToolbarMode.scrolling ? ToolbarMode.scrolling : ToolbarMode.default;\n var initGroups = flatten(map(toolbars, function (ctx) {\n return ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextMenuGroups(ctx, extras.backstage.shared.providers);\n }));\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: extras.backstage.shared.providers\n });\n };\n editor.on(showContextToolbarEvent, function (e) {\n var scopes = getScopes();\n get$1(scopes.lookupTable, e.toolbarKey).each(function (ctx) {\n launchContext([ctx], e.target === editor ? Optional.none() : Optional.some(e));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n var getAnchor = function (position, element) {\n var anchorage = position === 'node' ? extras.backstage.shared.anchors.node(element) : extras.backstage.shared.anchors.cursor();\n return deepMerge(anchorage, getAnchorLayout(position, isTouch()));\n };\n var launchContext = function (toolbarApi, elem) {\n clearTimer();\n if (isTouch() && extras.backstage.isContextMenuOpen()) {\n return;\n }\n var toolbarSpec = buildToolbar(toolbarApi);\n var sElem = elem.map(SugarElement.fromDom);\n var anchor = getAnchor(toolbarApi[0].position, sElem);\n lastAnchor.set(Optional.some(anchor));\n lastElement.set(elem);\n var contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n InlineView.showWithinBounds(contextbar, anchor, wrapInPopDialog(toolbarSpec), function () {\n return Optional.some(getBounds());\n });\n if (shouldContextToolbarHide()) {\n set$2(contextBarEle, 'display', 'none');\n }\n };\n var launchContextToolbar = function () {\n if (!editor.hasFocus()) {\n return;\n }\n var scopes = getScopes();\n lookup$1(scopes, editor).fold(close, function (info) {\n launchContext(info.toolbars, Optional.some(info.elem.dom));\n });\n };\n var clearTimer = function () {\n var current = timer.get();\n if (current !== null) {\n global$2.clearTimeout(current);\n timer.set(null);\n }\n };\n var asyncOpen = function () {\n clearTimer();\n timer.set(global$2.setEditorTimeout(editor, launchContextToolbar, 0));\n };\n editor.on('init', function () {\n editor.on(hideContextToolbarEvent, forceHide);\n editor.on('ScrollContent ScrollWindow longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent ObjectResized ResizeEditor', function () {\n asyncOpen();\n });\n editor.on('focusout', function (_e) {\n global$2.setEditorTimeout(editor, function () {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', function () {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('AfterProgressState', function (event) {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n asyncOpen();\n }\n });\n editor.on('NodeChange', function (_e) {\n search(contextbar.element).fold(asyncOpen, noop);\n });\n });\n };\n\n var setup$3 = function (editor, mothership, uiMothership) {\n var broadcastEvent = function (name, evt) {\n each([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastEvent(name, evt);\n });\n };\n var broadcastOn = function (channel, message) {\n each([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastOn([channel], message);\n });\n };\n var fireDismissPopups = function (evt) {\n return broadcastOn(dismissPopups(), { target: evt.target });\n };\n var onTouchstart = bind$3(SugarElement.fromDom(document), 'touchstart', fireDismissPopups);\n var onTouchmove = bind$3(SugarElement.fromDom(document), 'touchmove', function (evt) {\n return broadcastEvent(documentTouchmove(), evt);\n });\n var onTouchend = bind$3(SugarElement.fromDom(document), 'touchend', function (evt) {\n return broadcastEvent(documentTouchend(), evt);\n });\n var onMousedown = bind$3(SugarElement.fromDom(document), 'mousedown', fireDismissPopups);\n var onMouseup = bind$3(SugarElement.fromDom(document), 'mouseup', function (evt) {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n var onContentClick = function (raw) {\n return broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n };\n var onContentMouseup = function (raw) {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n var onWindowScroll = function (evt) {\n return broadcastEvent(windowScroll(), fromRawEvent$1(evt));\n };\n var onWindowResize = function (evt) {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent$1(evt));\n };\n var onEditorResize = function () {\n return broadcastOn(repositionPopups(), {});\n };\n var onEditorProgress = function (evt) {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n editor.on('PostRender', function () {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n });\n editor.on('remove', function () {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n });\n editor.on('detach', function () {\n detachSystem(mothership);\n detachSystem(uiMothership);\n mothership.destroy();\n uiMothership.destroy();\n });\n };\n\n var parts$d = AlloyParts;\n var partType$1 = PartType;\n\n var schema$r = constant([\n defaulted$1('shell', false),\n strict$1('makeItem'),\n defaulted$1('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n var customListDetail = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n var parts$e = constant([itemsPart]);\n var name$2 = constant('CustomList');\n\n var factory$f = function (detail, components, _spec, _external) {\n var setItems = function (list, items) {\n getListContainer(list).fold(function () {\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 }, function (container) {\n var itemComps = Replacing.contents(container);\n var numListsRequired = items.length;\n var numListsToAdd = numListsRequired - itemComps.length;\n var itemsToAdd = numListsToAdd > 0 ? range(numListsToAdd, function () {\n return detail.makeItem();\n }) : [];\n var itemsToRemove = itemComps.slice(numListsRequired);\n each(itemsToRemove, function (item) {\n return Replacing.remove(container, item);\n });\n each(itemsToAdd, function (item) {\n return Replacing.append(container, item);\n });\n var builtLists = Replacing.contents(container);\n each(builtLists, function (item, i) {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n var getListContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems: setItems }\n };\n };\n var CustomList = composite$1({\n name: name$2(),\n configFields: schema$r(),\n partFields: parts$e(),\n factory: factory$f,\n apis: {\n setItems: function (apis, list, items) {\n apis.setItems(list, items);\n }\n }\n });\n\n var setup$4 = noop;\n var isDocked = never;\n var getBehaviours$2 = constant([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$4,\n isDocked: isDocked,\n getBehaviours: getBehaviours$2\n });\n\n var getOffsetParent = function (element) {\n var isFixed = getRaw(element, 'position').is('fixed');\n var offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(function () {\n var marker = SugarElement.fromTag('span');\n return parent(element).bind(function (parent) {\n append(parent, marker);\n var offsetParent$1 = offsetParent(marker);\n remove(marker);\n return offsetParent$1;\n });\n });\n };\n var getOrigin = function (element) {\n return getOffsetParent(element).map(absolute).getOrThunk(function () {\n return SugarPosition(0, 0);\n });\n };\n\n var morphAdt = Adt.generate([\n { static: [] },\n { absolute: ['positionCss'] },\n { fixed: ['positionCss'] }\n ]);\n var appear = function (component, contextualInfo) {\n var elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$4(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n var disappear = function (component, contextualInfo) {\n var elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$4(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n var isPartiallyVisible = function (box, viewport) {\n return box.y < viewport.bottom && box.bottom > viewport.y;\n };\n var isTopCompletelyVisible = function (box, viewport) {\n return box.y >= viewport.y;\n };\n var isBottomCompletelyVisible = function (box, viewport) {\n return box.bottom <= viewport.bottom;\n };\n var isVisibleForModes = function (modes, box, viewport) {\n return forall(modes, function (mode) {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport);\n case 'top':\n return isTopCompletelyVisible(box, viewport);\n }\n });\n };\n var getPrior = function (elem, state) {\n return state.getInitialPosition().map(function (pos) {\n return bounds$1(pos.bounds.x, pos.bounds.y, get$8(elem), get$7(elem));\n });\n };\n var storePrior = function (elem, box, state) {\n state.setInitialPosition(Optional.some({\n style: getAllRaw(elem),\n position: get$5(elem, 'position') || 'static',\n bounds: box\n }));\n };\n var revertToOriginal = function (elem, box$1, state) {\n return state.getInitialPosition().bind(function (position) {\n state.setInitialPosition(Optional.none());\n switch (position.position) {\n case 'static':\n return Optional.some(morphAdt.static());\n case 'absolute':\n var offsetBox_1 = getOffsetParent(elem).map(box).getOrThunk(function () {\n return box(body());\n });\n return Optional.some(morphAdt.absolute(NuPositionCss('absolute', get$1(position.style, 'left').map(function (_left) {\n return box$1.x - offsetBox_1.x;\n }), get$1(position.style, 'top').map(function (_top) {\n return box$1.y - offsetBox_1.y;\n }), get$1(position.style, 'right').map(function (_right) {\n return offsetBox_1.right - box$1.right;\n }), get$1(position.style, 'bottom').map(function (_bottom) {\n return offsetBox_1.bottom - box$1.bottom;\n }))));\n default:\n return Optional.none();\n }\n });\n };\n var morphToOriginal = function (elem, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(state.getModes(), box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, viewport, state) {\n var box$1 = box(elem);\n if (!isVisibleForModes(state.getModes(), box$1, viewport)) {\n storePrior(elem, box$1, state);\n var winBox = win();\n var left = box$1.x - winBox.x;\n var top_1 = viewport.y - winBox.y;\n var bottom = winBox.bottom - viewport.bottom;\n var isTop = box$1.y <= viewport.y;\n return Optional.some(morphAdt.fixed(NuPositionCss('fixed', Optional.some(left), isTop ? Optional.some(top_1) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom) : Optional.none())));\n } else {\n return Optional.none();\n }\n };\n var getMorph = function (component, viewport, state) {\n var elem = component.element;\n var isDocked = getRaw(elem, 'position').is('fixed');\n return isDocked ? morphToOriginal(elem, viewport, state) : morphToFixed(elem, viewport, state);\n };\n var getMorphToOriginal = function (component, state) {\n var elem = component.element;\n return getPrior(elem, state).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n\n var morphToStatic = function (component, config) {\n each([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], function (prop) {\n return remove$6(component.element, prop);\n });\n config.onUndocked(component);\n };\n var morphToCoord = function (component, config, position) {\n applyPositionCss(component.element, position);\n var method = position.position === 'fixed' ? config.onDocked : config.onUndocked;\n method(component);\n };\n var updateVisibility = function (component, config, state, viewport, morphToDocked) {\n if (morphToDocked === void 0) {\n morphToDocked = false;\n }\n config.contextual.each(function (contextInfo) {\n contextInfo.lazyContext(component).each(function (box) {\n var isVisible = isPartiallyVisible(box, viewport);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$3(component.element, [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n var method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n var refreshInternal = function (component, config, state) {\n var viewport = config.lazyViewport(component);\n var isDocked = state.isDocked();\n if (isDocked) {\n updateVisibility(component, config, state, viewport);\n }\n getMorph(component, viewport, state).each(function (morph) {\n state.setDocked(!isDocked);\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, function (position) {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, position);\n });\n });\n };\n var resetInternal = function (component, config, state) {\n var elem = component.element;\n state.setDocked(false);\n getMorphToOriginal(component, state).each(function (morph) {\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, noop);\n });\n state.setVisible(true);\n config.contextual.each(function (contextInfo) {\n remove$5(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n var refresh$4 = function (component, config, state) {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n var reset = function (component, config, state) {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n var isDocked$1 = function (component, config, state) {\n return state.isDocked();\n };\n var setModes = function (component, config, state, modes) {\n return state.setModes(modes);\n };\n var getModes = function (component, config, state) {\n return state.getModes();\n };\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 var events$f = function (dockInfo, dockState) {\n return derive([\n runOnSource(transitionend(), function (component, simulatedEvent) {\n dockInfo.contextual.each(function (contextInfo) {\n if (has$2(component.element, contextInfo.transitionClass)) {\n remove$5(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n var notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run(windowScroll(), function (component, _) {\n refresh$4(component, dockInfo, dockState);\n }),\n run(windowResize(), function (component, _) {\n reset(component, dockInfo, dockState);\n })\n ]);\n };\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var DockingSchema = [\n optionObjOf('contextual', [\n strictString('fadeInClass'),\n strictString('fadeOutClass'),\n strictString('transitionClass'),\n strictFunction('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 var init$b = function (spec) {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = Cell(Optional.none());\n var modes = Cell(spec.modes);\n var readState = function () {\n return 'docked: ' + docked.get() + ', visible: ' + visible.get() + ', modes: ' + modes.get().join(',');\n };\n return nu$5({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPosition: initialBounds.get,\n setInitialPosition: initialBounds.set,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState: readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n var Docking = create$1({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n var visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n var editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n var editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n var scrollFromBehindHeader = function (e, containerHeader) {\n var doc = owner(containerHeader);\n var viewHeight = doc.dom.defaultView.innerHeight;\n var scrollPos = get$9(doc);\n var markerElement = SugarElement.fromDom(e.elm);\n var markerPos = absolute$1(markerElement);\n var markerHeight = get$7(markerElement);\n var markerTop = markerPos.y;\n var markerBottom = markerTop + markerHeight;\n var editorHeaderPos = absolute(containerHeader);\n var editorHeaderHeight = get$7(containerHeader);\n var editorHeaderTop = editorHeaderPos.top;\n var editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n var editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n var 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 var y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n var isDockedMode = function (header, mode) {\n return contains(Docking.getModes(header), mode);\n };\n var updateIframeContentFlow = function (header) {\n var getOccupiedHeight = function (elm) {\n return getOuter$1(elm) + (parseInt(get$5(elm, 'margin-top'), 10) || 0) + (parseInt(get$5(elm, 'margin-bottom'), 10) || 0);\n };\n var elm = header.element;\n parent(elm).each(function (parentElem) {\n var padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n var parentWidth = get$8(parentElem);\n set$2(elm, 'width', parentWidth + 'px');\n set$2(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$6(elm, 'width');\n remove$6(parentElem, padding);\n }\n });\n };\n var updateSinkVisibility = function (sinkElem, visible) {\n if (visible) {\n remove$4(sinkElem, visibility.fadeOutClass);\n add$3(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$4(sinkElem, visibility.fadeInClass);\n add$3(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n var updateEditorClasses = function (editor, docked) {\n var editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$4(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$4(editorContainer, editorStickyOnClass);\n }\n };\n var restoreFocus = function (headerElem, focusedElem) {\n var ownerDoc = owner(focusedElem);\n active(ownerDoc).filter(function (activeElm) {\n return !eq$1(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq$1(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains$2(headerElem, activeElm);\n }).each(function () {\n return focus$1(focusedElem);\n });\n };\n var findFocusedElem = function (rootElm, lazySink) {\n return search(rootElm).orThunk(function () {\n return lazySink().toOptional().bind(function (sink) {\n return search(sink.element);\n });\n });\n };\n var setup$5 = function (editor, sharedBackstage, lazyHeader) {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', function () {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', function () {\n lazyHeader().each(function (comp) {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', function (e) {\n lazyHeader().each(function (header) {\n Docking.refresh(header);\n var headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', function () {\n updateEditorClasses(editor, false);\n });\n };\n var isDocked$2 = function (lazyHeader) {\n return lazyHeader().map(Docking.isDocked).getOr(false);\n };\n var getIframeBehaviours = function () {\n var _a;\n return [Receiving.config({ channels: (_a = {}, _a[toolbarHeightChange()] = { onReceive: updateIframeContentFlow }, _a) })];\n };\n var getBehaviours$3 = function (editor, sharedBackstage) {\n var focusedElm = Cell(Optional.none());\n var lazySink = sharedBackstage.getSink;\n var runOnSinkElement = function (f) {\n lazySink().each(function (sink) {\n return f(sink.element);\n });\n };\n var onDockingSwitch = function (comp) {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(function (sink) {\n return sink.getSystem().broadcastOn([repositionPopups()], {});\n });\n };\n var additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return __spreadArrays([\n Focusing.config({}),\n Docking.config({\n contextual: __assign({\n lazyContext: function (comp) {\n var headerHeight = getOuter$1(comp.element);\n var container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n var box$1 = box(SugarElement.fromDom(container));\n var boxHeight = box$1.height - headerHeight;\n var topBound = box$1.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return Optional.some(bounds$1(box$1.x, topBound, box$1.width, boxHeight));\n },\n onShow: function () {\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, true);\n });\n },\n onShown: function (comp) {\n runOnSinkElement(function (elem) {\n return remove$5(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n });\n focusedElm.get().each(function (elem) {\n restoreFocus(comp.element, elem);\n focusedElm.set(Optional.none());\n });\n },\n onHide: function (comp) {\n focusedElm.set(findFocusedElem(comp.element, lazySink));\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, false);\n });\n },\n onHidden: function () {\n runOnSinkElement(function (elem) {\n return remove$5(elem, [visibility.transitionClass]);\n });\n }\n }, visibility),\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$5,\n isDocked: isDocked$2,\n getBehaviours: getBehaviours$3\n });\n\n var renderHeader = function (spec) {\n var editor = spec.editor;\n var getBehaviours = spec.sticky ? getBehaviours$3 : getBehaviours$2;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours(editor, spec.sharedBackstage))\n };\n };\n\n var factory$g = function (detail, spec) {\n var setMenus = function (comp, menus) {\n var newMenus = map(menus, function (m) {\n var buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: function (callback) {\n callback(m.getItems());\n }\n };\n var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n var apis = {\n focus: Keying.focusIn,\n setMenus: 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(function (component) {\n detail.onSetup(component);\n }),\n run(mouseover(), function (comp, se) {\n descendant$1(comp.element, '.' + 'tox-mbtn--active').each(function (activeButton) {\n closest$3(se.event.target, '.' + 'tox-mbtn').each(function (hoveredButton) {\n if (!eq$1(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(function (activeComp) {\n comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run(focusShifted(), function (comp, se) {\n se.event.prevFocus.bind(function (prev) {\n return comp.getSystem().getByDom(prev).toOptional();\n }).each(function (prev) {\n se.event.newFocus.bind(function (nu) {\n return comp.getSystem().getByDom(nu).toOptional();\n }).each(function (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: function (comp) {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis: apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single$2({\n factory: factory$g,\n name: 'silver.Menubar',\n configFields: [\n strict$1('dom'),\n strict$1('uid'),\n strict$1('onEscape'),\n strict$1('backstage'),\n defaulted$1('onSetup', noop)\n ],\n apis: {\n focus: function (apis, comp) {\n apis.focus(comp);\n },\n setMenus: function (apis, comp, menus) {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n var owner$4 = 'container';\n var schema$s = [field$1('slotBehaviours', [])];\n var getPartName$1 = function (name) {\n return '';\n };\n var sketch$2 = function (sSpec) {\n var parts = function () {\n var record = [];\n var slot = function (name, config) {\n record.push(name);\n return generateOne(owner$4, getPartName$1(name), config);\n };\n return {\n slot: slot,\n record: function () {\n return record;\n }\n };\n }();\n var spec = sSpec(parts);\n var partNames = parts.record();\n var fieldParts = map(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName$1(n)\n });\n });\n return composite(owner$4, schema$s, fieldParts, make$7, spec);\n };\n var make$7 = function (detail, components) {\n var getSlotNames = function (_) {\n return getAllPartNames(detail);\n };\n var getSlot = function (container, key) {\n return getPart(container, detail, key);\n };\n var onSlot = function (f, def) {\n return function (container, key) {\n return getPart(container, detail, key).map(function (slot) {\n return f(slot, key);\n }).getOr(def);\n };\n };\n var onSlots = function (f) {\n return function (container, keys) {\n each(keys, function (key) {\n return f(container, key);\n });\n };\n };\n var doShowing = function (comp, _key) {\n return get$3(comp.element, 'aria-hidden') !== 'true';\n };\n var doShow = function (comp, key) {\n if (!doShowing(comp)) {\n var element = comp.element;\n remove$6(element, 'display');\n remove$1(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n var doHide = function (comp, key) {\n if (doShowing(comp)) {\n var element = comp.element;\n set$2(element, 'display', 'none');\n set$1(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n var isShowing = onSlot(doShowing, false);\n var hideSlot = onSlot(doHide);\n var hideSlots = onSlots(hideSlot);\n var hideAllSlots = function (container) {\n return hideSlots(container, getSlotNames());\n };\n var showSlot = onSlot(doShow);\n var apis = {\n getSlotNames: getSlotNames,\n getSlot: getSlot,\n isShowing: isShowing,\n hideSlot: hideSlot,\n hideAllSlots: hideAllSlots,\n showSlot: showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$d(detail.slotBehaviours),\n apis: apis\n };\n };\n var slotApis = map$2({\n getSlotNames: function (apis, c) {\n return apis.getSlotNames(c);\n },\n getSlot: function (apis, c, key) {\n return apis.getSlot(c, key);\n },\n isShowing: function (apis, c, key) {\n return apis.isShowing(c, key);\n },\n hideSlot: function (apis, c, key) {\n return apis.hideSlot(c, key);\n },\n hideAllSlots: function (apis, c) {\n return apis.hideAllSlots(c);\n },\n showSlot: function (apis, c, key) {\n return apis.showSlot(c, key);\n }\n }, function (value) {\n return makeApi(value);\n });\n var SlotContainer = __assign(__assign({}, slotApis), { sketch: sketch$2 });\n\n var sidebarSchema = objOf([\n optionString('icon'),\n optionString('tooltip'),\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ]);\n var createSidebar = function (spec) {\n return asRaw('sidebar', sidebarSchema, spec);\n };\n\n var setup$6 = function (editor) {\n var sidebars = editor.ui.registry.getAll().sidebars;\n each(keys(sidebars), function (name) {\n var spec = sidebars[name];\n var isActive = function () {\n return Optional.from(editor.queryCommandValue('ToggleSidebar')).is(name);\n };\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: function (buttonApi) {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: function (buttonApi) {\n var handleToggle = function () {\n return buttonApi.setActive(isActive());\n };\n editor.on('ToggleSidebar', handleToggle);\n return function () {\n editor.off('ToggleSidebar', handleToggle);\n };\n }\n });\n });\n };\n var getApi = function (comp) {\n return {\n element: function () {\n return comp.element.dom;\n }\n };\n };\n var makePanels = function (parts, panelConfigs) {\n var specs = map(keys(panelConfigs), function (name) {\n var spec = panelConfigs[name];\n var bridged = getOrDie(createSidebar(spec));\n return {\n name: name,\n getApi: getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map(specs, function (spec) {\n var 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(slotVisibility(), function (sidepanel, se) {\n var data = se.event;\n var optSidePanelSpec = find(specs, function (config) {\n return config.name === data.name;\n });\n optSidePanelSpec.each(function (sidePanelSpec) {\n var handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n var makeSidebar = function (panelConfigs) {\n return SlotContainer.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(function (slotContainer) {\n return SlotContainer.hideAllSlots(slotContainer);\n })])\n };\n });\n };\n var setSidebar = function (sidebar, panelConfigs) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n return Replacing.set(slider, [makeSidebar(panelConfigs)]);\n });\n };\n var toggleSidebar = function (sidebar, name) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(function (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 var whichSidebar = function (sidebar) {\n var optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(function (slider) {\n var sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n var optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(function (slotContainer) {\n return find(SlotContainer.getSlotNames(slotContainer), function (name) {\n return SlotContainer.isShowing(slotContainer, name);\n });\n });\n } else {\n return Optional.none();\n }\n });\n };\n var fixSize = generate$1('FixSizeEvent');\n var autoSize = generate$1('AutoSizeEvent');\n var renderSidebar = function (spec) {\n return {\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: function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: function (slider) {\n emit(slider, autoSize);\n },\n onStartGrow: function (slider) {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: function (slider) {\n emitWith(slider, fixSize, { width: get$8(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: function (comp) {\n var 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(fixSize, function (comp, se) {\n set$2(comp.element, 'width', se.event.width);\n }),\n run(autoSize, function (comp, _se) {\n remove$6(comp.element, 'width');\n })\n ])\n ])\n };\n };\n\n var getAttrs = function (elem) {\n var attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, function (b, attr) {\n var _a;\n if (attr.name === 'class') {\n return b;\n } else {\n return __assign(__assign({}, b), (_a = {}, _a[attr.name] = attr.value, _a));\n }\n }, {});\n };\n var getClasses = function (elem) {\n return Array.prototype.slice.call(elem.dom.classList, 0);\n };\n var fromHtml$2 = function (html) {\n var elem = SugarElement.fromHtml(html);\n var children$1 = children(elem);\n var attrs = getAttrs(elem);\n var classes = getClasses(elem);\n var contents = children$1.length === 0 ? {} : { innerHtml: get$2(elem) };\n return __assign({\n tag: name(elem),\n classes: classes,\n attributes: attrs\n }, contents);\n };\n\n var renderSpinner = function (providerBackstage) {\n return {\n dom: {\n tag: 'div',\n attributes: { 'aria-label': providerBackstage.translate('Loading...') },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml$2('
') }],\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Optional.some(true);\n },\n onShiftTab: function () {\n return Optional.some(true);\n }\n }),\n Focusing.config({})\n ])\n };\n };\n var toggleThrobber = function (comp, state, providerBackstage) {\n var element = comp.element;\n if (state === true) {\n Replacing.set(comp, [renderSpinner(providerBackstage)]);\n remove$6(element, 'display');\n remove$1(element, 'aria-hidden');\n } else {\n Replacing.set(comp, []);\n set$2(element, 'display', 'none');\n set$1(element, 'aria-hidden', 'true');\n }\n };\n var renderThrobber = function (spec) {\n return {\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([Replacing.config({})]),\n components: []\n };\n };\n var setup$7 = function (editor, lazyThrobber, sharedBackstage) {\n var throbberState = Cell(false);\n var timer = Cell(Optional.none());\n var toggle = function (state) {\n if (state !== throbberState.get()) {\n toggleThrobber(lazyThrobber(), state, sharedBackstage.providers);\n throbberState.set(state);\n editor.fire('AfterProgressState', { state: state });\n }\n };\n editor.on('ProgressState', function (e) {\n timer.get().each(global$2.clearTimeout);\n if (isNumber(e.time)) {\n var timerId = global$2.setEditorTimeout(editor, function () {\n return toggle(e.state);\n }, e.time);\n timer.set(Optional.some(timerId));\n } else {\n toggle(e.state);\n timer.set(Optional.none());\n }\n });\n };\n\n var factory$h = function (detail, components, _spec) {\n var apis = {\n getSocket: function (comp) {\n return parts$d.getPart(comp, detail, 'socket');\n },\n setSidebar: function (comp, panelConfigs) {\n parts$d.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return setSidebar(sidebar, panelConfigs);\n });\n },\n toggleSidebar: function (comp, name) {\n parts$d.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return toggleSidebar(sidebar, name);\n });\n },\n whichSidebar: function (comp) {\n return parts$d.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: function (comp) {\n return parts$d.getPart(comp, detail, 'header');\n },\n getToolbar: function (comp) {\n return parts$d.getPart(comp, detail, 'toolbar');\n },\n setToolbar: function (comp, groups) {\n parts$d.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n toolbar.getApis().setGroups(toolbar, groups);\n });\n },\n setToolbars: function (comp, toolbars) {\n parts$d.getPart(comp, detail, 'multiple-toolbar').each(function (mToolbar) {\n CustomList.setItems(mToolbar, toolbars);\n });\n },\n refreshToolbar: function (comp) {\n var toolbar = parts$d.getPart(comp, detail, 'toolbar');\n toolbar.each(function (toolbar) {\n return toolbar.getApis().refresh(toolbar);\n });\n },\n toggleToolbarDrawer: function (comp) {\n parts$d.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n mapFrom(toolbar.getApis().toggle, function (toggle) {\n return toggle(toolbar);\n });\n });\n },\n isToolbarDrawerToggled: function (comp) {\n return parts$d.getPart(comp, detail, 'toolbar').bind(function (toolbar) {\n return Optional.from(toolbar.getApis().isOpen).map(function (isOpen) {\n return isOpen(toolbar);\n });\n }).getOr(false);\n },\n getThrobber: function (comp) {\n return parts$d.getPart(comp, detail, 'throbber');\n },\n focusToolbar: function (comp) {\n var optToolbar = parts$d.getPart(comp, detail, 'toolbar').orThunk(function () {\n return parts$d.getPart(comp, detail, 'multiple-toolbar');\n });\n optToolbar.each(function (toolbar) {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: function (comp, menus) {\n parts$d.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: function (comp) {\n parts$d.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.focus(menubar);\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n behaviours: detail.behaviours\n };\n };\n var partMenubar = partType$1.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [strict$1('backstage')]\n });\n var toolbarFactory = function (spec) {\n if (spec.type === ToolbarMode.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n var partMultipleToolbar = partType$1.optional({\n factory: {\n sketch: function (spec) {\n return 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: function () {\n return renderToolbar({\n type: spec.type,\n uid: generate$1('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: function () {\n spec.onEscape();\n return Optional.some(true);\n }\n });\n },\n setupItem: function (_mToolbar, tc, data, _index) {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n });\n }\n },\n name: 'multiple-toolbar',\n schema: [\n strict$1('dom'),\n strict$1('onEscape')\n ]\n });\n var partToolbar = partType$1.optional({\n factory: {\n sketch: function (spec) {\n var renderer = toolbarFactory(spec);\n var toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: function () {\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 strict$1('dom'),\n strict$1('onEscape'),\n strict$1('getSink')\n ]\n });\n var partHeader = partType$1.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [strict$1('dom')]\n });\n var partSocket = partType$1.optional({\n name: 'socket',\n schema: [strict$1('dom')]\n });\n var partSidebar = partType$1.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [strict$1('dom')]\n });\n var partThrobber = partType$1.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [strict$1('dom')]\n });\n var OuterContainer = composite$1({\n name: 'OuterContainer',\n factory: factory$h,\n configFields: [\n strict$1('dom'),\n strict$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partThrobber\n ],\n apis: {\n getSocket: function (apis, comp) {\n return apis.getSocket(comp);\n },\n setSidebar: function (apis, comp, panelConfigs) {\n apis.setSidebar(comp, panelConfigs);\n },\n toggleSidebar: function (apis, comp, name) {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: function (apis, comp) {\n return apis.whichSidebar(comp);\n },\n getHeader: function (apis, comp) {\n return apis.getHeader(comp);\n },\n getToolbar: function (apis, comp) {\n return apis.getToolbar(comp);\n },\n setToolbar: function (apis, comp, grps) {\n var groups = map(grps, function (grp) {\n return renderToolbarGroup(grp);\n });\n apis.setToolbar(comp, groups);\n },\n setToolbars: function (apis, comp, ts) {\n var renderedToolbars = map(ts, function (g) {\n return map(g, renderToolbarGroup);\n });\n apis.setToolbars(comp, renderedToolbars);\n },\n refreshToolbar: function (apis, comp) {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: function (apis, comp) {\n apis.toggleToolbarDrawer(comp);\n },\n isToolbarDrawerToggled: function (apis, comp) {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: function (apis, comp) {\n return apis.getThrobber(comp);\n },\n setMenubar: function (apis, comp, menus) {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: function (apis, comp) {\n apis.focusMenubar(comp);\n },\n focusToolbar: function (apis, comp) {\n apis.focusToolbar(comp);\n }\n }\n });\n\n var defaultMenubar = 'file edit view insert format tools table help';\n var 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 toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align lineheight | forecolor backcolor | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | 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 var make$8 = function (menu, registry, editor) {\n var removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: function () {\n return bind(menu.items, function (i) {\n var itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, function (removedMenuItem) {\n return removedMenuItem === itemName;\n })) {\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 };\n var parseItemsString = function (items) {\n if (typeof items === 'string') {\n return items.split(' ');\n }\n return items;\n };\n var identifyMenus = function (editor, registry) {\n var rawMenuData = __assign(__assign({}, defaultMenus), registry.menus);\n var userDefinedMenus = keys(registry.menus).length > 0;\n var menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n var validMenus = filter(menubar, function (menuName) {\n return userDefinedMenus ? registry.menus.hasOwnProperty(menuName) && registry.menus[menuName].hasOwnProperty('items') || defaultMenus.hasOwnProperty(menuName) : defaultMenus.hasOwnProperty(menuName);\n });\n var menus = map(validMenus, function (menuName) {\n var menuData = rawMenuData[menuName];\n return make$8({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter(menus, function (menu) {\n var isNotSeparator = function (item) {\n return item.type !== 'separator';\n };\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n var fireSkinLoaded$1 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var fireSkinLoadError$1 = function (editor, err) {\n return function () {\n return fireSkinLoadError(editor, { message: err });\n };\n };\n\n var loadStylesheet = function (editor, stylesheetUrl, styleSheetLoader) {\n return new global$4(function (resolve, reject) {\n styleSheetLoader.load(stylesheetUrl, resolve, reject);\n editor.on('remove', function () {\n return styleSheetLoader.unload(stylesheetUrl);\n });\n });\n };\n var loadUiSkins = function (editor, skinUrl) {\n var skinUiCss = skinUrl + '/skin.min.css';\n return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n };\n var loadShadowDomUiSkins = function (editor, skinUrl) {\n var isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (isInShadowRoot$1) {\n var shadowDomSkinCss = skinUrl + '/skin.shadowdom.min.css';\n return loadStylesheet(editor, shadowDomSkinCss, global$5.DOM.styleSheetLoader);\n } else {\n return global$4.resolve();\n }\n };\n var loadSkin = function (isInline, editor) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (isSkinDisabled(editor) === false && isString(skinUrl)) {\n global$4.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then(fireSkinLoaded$1(editor), fireSkinLoadError$1(editor, 'Skin could not be loaded'));\n } else {\n fireSkinLoaded$1(editor)();\n }\n };\n var iframe = curry(loadSkin, false);\n var inline = curry(loadSkin, true);\n\n var setToolbar = function (editor, uiComponents, rawUiConfig, backstage) {\n var comp = uiComponents.outerContainer;\n var toolbarConfig = rawUiConfig.toolbar;\n var toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n var toolbars = toolbarConfig.map(function (t) {\n var config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, { backstage: backstage }, Optional.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Optional.none()));\n }\n };\n\n var detection = detect$3();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents = function (editor, uiComponents) {\n var dom = editor.dom;\n var contentWindow = editor.getWin();\n var initialDocEle = editor.getDoc().documentElement;\n var lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n var lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n var resizeWindow = function () {\n var 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 var resizeDocument = function () {\n var docEle = editor.getDoc().documentElement;\n var 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 var scroll = function (e) {\n return fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture$1(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n var mothership = uiComponents.uiMothership.element;\n editor.on('hide', function () {\n set$2(mothership, 'display', 'none');\n });\n editor.on('show', function () {\n remove$6(mothership, 'display');\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', function () {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n var outerContainer = uiComponents.outerContainer;\n iframe(editor);\n var eTargetNode = SugarElement.fromDom(args.targetNode);\n var uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, uiComponents.mothership);\n attachSystem(uiRoot, uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar);\n setupEvents(editor, uiComponents);\n });\n var socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll$1(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n var limit = first(function () {\n editor.fire('ScrollContent');\n }, 20);\n var unbinder = bind$3(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', function (_ui, value) {\n OuterContainer.toggleSidebar(outerContainer, value);\n editor.fire('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', function () {\n return OuterContainer.whichSidebar(outerContainer);\n });\n var toolbarMode = getToolbarMode(editor);\n var refreshDrawer = function () {\n OuterContainer.refreshToolbar(uiComponents.outerContainer);\n };\n if (toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', function () {\n var width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n var api = {\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n var parseToInt = function (val) {\n var re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n var numToPx = function (val) {\n return isNumber(val) ? val + 'px' : val;\n };\n var calcCappedSize = function (size, minSize, maxSize) {\n var minOverride = minSize.filter(function (min) {\n return size < min;\n });\n var maxOverride = maxSize.filter(function (max) {\n return size > max;\n });\n return minOverride.or(maxOverride).getOr(size);\n };\n\n var getHeight$1 = function (editor) {\n var baseHeight = getHeightSetting(editor);\n var minHeight = getMinHeightSetting(editor);\n var maxHeight = getMaxHeightSetting(editor);\n return parseToInt(baseHeight).map(function (height) {\n return calcCappedSize(height, minHeight, maxHeight);\n });\n };\n var getHeightWithFallback = function (editor) {\n var height = getHeight$1(editor);\n return height.getOr(getHeightSetting(editor));\n };\n var getWidth$1 = function (editor) {\n var baseWidth = getWidthSetting(editor);\n var minWidth = getMinWidthSetting(editor);\n var maxWidth = getMaxWidthSetting(editor);\n return parseToInt(baseWidth).map(function (width) {\n return calcCappedSize(width, minWidth, maxWidth);\n });\n };\n var getWidthWithFallback = function (editor) {\n var width = getWidth$1(editor);\n return width.getOr(getWidthSetting(editor));\n };\n\n var InlineHeader = function (editor, targetElm, uiComponents, backstage, floatContainer) {\n var uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var DOM = global$5.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth$1(editor));\n var headerBackstage = backstage.shared.header;\n var isPositionedAtTop = headerBackstage.isPositionedAtTop;\n var toolbarMode = getToolbarMode(editor);\n var isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n var visible = Cell(false);\n var isVisible = function () {\n return visible.get() && !editor.removed;\n };\n var calcToolbarOffset = function (toolbar) {\n return isSplitToolbar ? toolbar.fold(function () {\n return 0;\n }, function (tbar) {\n return tbar.components().length > 1 ? get$7(tbar.components()[1].element) : 0;\n }) : 0;\n };\n var calcMode = function (container) {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n var toolbar_1 = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar_1);\n var toolbarHeight = get$7(container.element) - offset;\n var targetBounds = box(targetElm);\n var roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n var doc = documentElement(targetElm);\n var docHeight = Math.max(doc.dom.scrollHeight, get$7(doc));\n var roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n var winBounds = win();\n var 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 var setupMode = function (mode) {\n var container = floatContainer.get();\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n var verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$1(container.element, Attribute, verticalDir);\n };\n var updateChromeWidth = function () {\n var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = parseToInt(get$5(body(), 'margin-left')).getOr(0);\n return get$8(body()) - absolute(targetElm).left + bodyMargin;\n });\n set$2(floatContainer.get().element, 'max-width', maxWidth + 'px');\n };\n var updateChromePosition = function () {\n var toolbar = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar);\n var targetBounds = box(targetElm);\n var top = isPositionedAtTop() ? Math.max(targetBounds.y - get$7(floatContainer.get().element) + offset, 0) : targetBounds.bottom;\n setAll$1(outerContainer.element, {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x) + 'px'\n });\n };\n var repositionPopups$1 = function () {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n var updateChromeUi = function (resetDocking) {\n if (resetDocking === void 0) {\n resetDocking = false;\n }\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 var floatContainerComp = floatContainer.get();\n resetDocking ? Docking.reset(floatContainerComp) : Docking.refresh(floatContainerComp);\n }\n repositionPopups$1();\n };\n var updateMode = function (updateUi) {\n if (updateUi === void 0) {\n updateUi = true;\n }\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return;\n }\n var currentMode = headerBackstage.getDockingMode();\n var newMode = calcMode(floatContainer.get());\n if (newMode !== currentMode) {\n setupMode(newMode);\n if (updateUi) {\n updateChromeUi(true);\n }\n }\n };\n var show = function () {\n visible.set(true);\n set$2(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 var hide = function () {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$2(outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$2(uiMothership.element, 'display', 'none');\n };\n return {\n isVisible: isVisible,\n isPositionedAtTop: isPositionedAtTop,\n show: show,\n hide: hide,\n update: updateChromeUi,\n updateMode: updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n var getTargetPosAndBounds = function (targetElm, isToolbarTop) {\n var bounds = box(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds: bounds\n };\n };\n var setupEvents$1 = function (editor, targetElm, ui, toolbarPersist) {\n var prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n var resizeContent = function (e) {\n var _a = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()), pos = _a.pos, bounds = _a.bounds;\n var _b = prevPosAndBounds.get(), prevPos = _b.pos, prevBounds = _b.bounds;\n var hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos: pos,\n bounds: 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', function () {\n return ui.update(true);\n });\n editor.on('NodeChange keydown', function (e) {\n global$2.requestAnimationFrame(function () {\n return resizeContent(e);\n });\n });\n editor.on('ScrollWindow', function () {\n return ui.updateMode();\n });\n var elementLoad = unbindable();\n elementLoad.set(capture$1(SugarElement.fromDom(editor.getBody()), 'load', resizeContent));\n editor.on('remove', function () {\n elementLoad.clear();\n });\n };\n var render$2 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var mothership = uiComponents.mothership, uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var floatContainer = Cell(null);\n var targetElm = SugarElement.fromDom(args.targetNode);\n var ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n var toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n var render = function () {\n if (floatContainer.get()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n var 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$1(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', function () {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n var api = {\n show: function () {\n ui.show();\n },\n hide: function () {\n ui.hide();\n },\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$2\n });\n\n var register$5 = function (editor) {\n var 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 global$c.each(alignToolbarButtons, function (item) {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n onAction: function () {\n return editor.execCommand(item.cmd);\n },\n icon: item.icon,\n onSetup: onSetupFormatToggle(editor, item.name)\n });\n });\n var alignNoneToolbarButton = {\n name: 'alignnone',\n text: 'No alignment',\n cmd: 'JustifyNone',\n icon: 'align-none'\n };\n editor.ui.registry.addButton(alignNoneToolbarButton.name, {\n tooltip: alignNoneToolbarButton.text,\n onAction: function () {\n return editor.execCommand(alignNoneToolbarButton.cmd);\n },\n icon: alignNoneToolbarButton.icon\n });\n };\n\n var register$6 = function (editor, backstage) {\n alignSelectMenu(editor, backstage);\n fontSelectMenu(editor, backstage);\n styleSelectMenu(editor, backstage);\n formatSelectMenu(editor, backstage);\n fontsizeSelectMenu(editor, backstage);\n };\n\n var toggleOutdentState = function (api, editor) {\n api.setDisabled(!editor.queryCommandState('outdent'));\n var onNodeChange = function () {\n api.setDisabled(!editor.queryCommandState('outdent'));\n };\n editor.on('NodeChange', onNodeChange);\n return function () {\n return editor.off('NodeChange', onNodeChange);\n };\n };\n var registerButtons = function (editor) {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: function (api) {\n return toggleOutdentState(api, editor);\n },\n onAction: function () {\n return editor.execCommand('outdent');\n }\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onAction: function () {\n return editor.execCommand('indent');\n }\n });\n };\n var register$7 = function (editor) {\n registerButtons(editor);\n };\n\n var 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 var pattern = function () {\n var decimalDigits = '[0-9]+';\n var signedInteger = '[+-]?' + decimalDigits;\n var exponentPart = '[eE]' + signedInteger;\n var dot = '\\\\.';\n var opt = function (input) {\n return '(?:' + input + ')?';\n };\n var unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n var float = '[+-]?(?:' + unsignedDecimalLiteral + ')';\n return new RegExp('^(' + float + ')(.*)$');\n }();\n var isUnit = function (unit, accepted) {\n return exists(accepted, function (acc) {\n return exists(units[acc], function (check) {\n return unit === check;\n });\n });\n };\n var parse = function (input, accepted) {\n var match = Optional.from(pattern.exec(input));\n return match.bind(function (array) {\n var value = Number(array[1]);\n var unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value: value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n var normalise = function (input, accepted) {\n return parse(input, accepted).map(function (_a) {\n var value = _a.value, unit = _a.unit;\n return value + unit;\n });\n };\n\n var normaliseLineHeight = function (input) {\n return normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input);\n };\n var getLineHeights = function (editor) {\n var options = getLineHeightFormats(editor);\n var apis = new Map();\n var lastApi = destroyable();\n var callback = function () {\n var current = normaliseLineHeight(editor.queryCommandValue('LineHeight'));\n Optional.from(apis.get(current)).fold(function () {\n return lastApi.clear();\n }, function (api) {\n lastApi.set({\n destroy: function () {\n api.setActive(false);\n }\n });\n api.setActive(true);\n });\n };\n editor.on('nodeChange', callback);\n return map(options, function (value, i) {\n return {\n type: 'togglemenuitem',\n text: value,\n onSetup: function (api) {\n apis.set(normaliseLineHeight(value), api);\n if (i + 1 === options.length) {\n callback();\n }\n return function () {\n if (i === 0) {\n editor.off('nodeChange', callback);\n lastApi.clear();\n }\n };\n },\n onAction: function () {\n return editor.execCommand('LineHeight', false, value);\n }\n };\n });\n };\n var registerMenuItems = function (editor) {\n editor.ui.registry.addNestedMenuItem('lineheight', {\n type: 'nestedmenuitem',\n text: 'Line height',\n getSubmenuItems: function () {\n return getLineHeights(editor);\n }\n });\n };\n var registerButtons$1 = function (editor) {\n editor.ui.registry.addMenuButton('lineheight', {\n tooltip: 'Line height',\n icon: 'line-height',\n fetch: function (callback) {\n return callback(getLineHeights(editor));\n }\n });\n };\n var register$8 = function (editor) {\n registerMenuItems(editor);\n registerButtons$1(editor);\n };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var registerFormatButtons = function (editor) {\n global$c.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 ], function (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: toggleFormat(editor, btn.name)\n });\n });\n for (var i = 1; i <= 6; i++) {\n var name_1 = 'h' + i;\n editor.ui.registry.addToggleButton(name_1, {\n text: name_1.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupFormatToggle(editor, name_1),\n onAction: toggleFormat(editor, name_1)\n });\n }\n };\n var registerCommandButtons = function (editor) {\n global$c.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 ], function (btn) {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: function () {\n return editor.execCommand(btn.action);\n }\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$c.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], function (btn) {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: function () {\n return editor.execCommand(btn.action);\n },\n onSetup: onSetupFormatToggle(editor, btn.name)\n });\n });\n };\n var registerButtons$2 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$1 = function (editor) {\n global$c.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 shortcut: ''\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript',\n shortcut: ''\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript',\n shortcut: ''\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting',\n shortcut: ''\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document',\n shortcut: ''\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 ], function (btn) {\n editor.ui.registry.addMenuItem(btn.name, {\n text: btn.text,\n icon: btn.icon,\n shortcut: btn.shortcut,\n onAction: function () {\n return editor.execCommand(btn.action);\n }\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onAction: toggleFormat(editor, 'code')\n });\n };\n var register$9 = function (editor) {\n registerButtons$2(editor);\n registerMenuItems$1(editor);\n };\n\n var toggleUndoRedoState = function (api, editor, type) {\n var checkState = function () {\n return editor.undoManager ? editor.undoManager[type]() : false;\n };\n var onUndoStateChange = function () {\n api.setDisabled(editor.mode.isReadOnly() || !checkState());\n };\n api.setDisabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);\n return function () {\n return editor.off('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.ui.registry.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasUndo');\n },\n onAction: function () {\n return editor.execCommand('undo');\n }\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasRedo');\n },\n onAction: function () {\n return editor.execCommand('redo');\n }\n });\n };\n var registerButtons$3 = function (editor) {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasUndo');\n },\n onAction: function () {\n return editor.execCommand('undo');\n }\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasRedo');\n },\n onAction: function () {\n return editor.execCommand('redo');\n }\n });\n };\n var register$a = function (editor) {\n registerMenuItems$2(editor);\n registerButtons$3(editor);\n };\n\n var toggleVisualAidState = function (api, editor) {\n api.setActive(editor.hasVisual);\n var onVisualAid = function (e) {\n api.setActive(e.hasVisual);\n };\n editor.on('VisualAid', onVisualAid);\n return function () {\n return editor.off('VisualAid', onVisualAid);\n };\n };\n var registerMenuItems$3 = function (editor) {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: function (api) {\n return toggleVisualAidState(api, editor);\n },\n onAction: function () {\n editor.execCommand('mceToggleVisualAid');\n }\n });\n };\n var registerToolbarButton = function (editor) {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: function () {\n return editor.execCommand('mceToggleVisualAid');\n }\n });\n };\n var register$b = function (editor) {\n registerToolbarButton(editor);\n registerMenuItems$3(editor);\n };\n\n var setup$8 = function (editor, backstage) {\n register$5(editor);\n register$9(editor);\n register$6(editor, backstage);\n register$a(editor);\n register$1(editor);\n register$b(editor);\n register$7(editor);\n register$8(editor);\n };\n\n var nu$d = function (x, y) {\n return {\n anchor: 'makeshift',\n x: x,\n y: y\n };\n };\n var transpose$1 = function (pos, dx, dy) {\n return nu$d(pos.x + dx, pos.y + dy);\n };\n var isTouchEvent$1 = function (e) {\n return e.type === 'longpress' || e.type.indexOf('touch') === 0;\n };\n var fromPageXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.pageX, touch.pageY);\n } else {\n return nu$d(e.pageX, e.pageY);\n }\n };\n var fromClientXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.clientX, touch.clientY);\n } else {\n return nu$d(e.clientX, e.clientY);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$5.DOM.getPos(element);\n return transpose$1(pos, containerPos.x, containerPos.y);\n };\n var getPointAnchor = function (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 var getSelectionAnchor = function (editor) {\n return {\n anchor: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n var getNodeAnchor$1 = function (editor) {\n return {\n anchor: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n };\n };\n\n var initAndShow = function (editor, e, buildMenu, backstage, contextmenu, useNodeAnchor) {\n var items = buildMenu();\n var anchorSpec = useNodeAnchor ? getNodeAnchor$1(editor) : getPointAnchor(editor, e);\n build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, anchorSpec, {\n menu: { markers: markers$1('normal') },\n data: menuData\n });\n });\n };\n\n var layouts = {\n onLtr: function () {\n return [\n south$1,\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n north$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n south$1,\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n north$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var bubbleSize$1 = 12;\n var bubbleAlignments$2 = {\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 var isTouchWithinSelection = function (editor, e) {\n var selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n var touch_1 = e.touches[0];\n var rng = selection.getRng();\n var rngRectOpt = getFirstRect$1(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(function (rngRect) {\n return rngRect.left <= touch_1.clientX && rngRect.right >= touch_1.clientX && rngRect.top <= touch_1.clientY && rngRect.bottom >= touch_1.clientY;\n });\n }\n };\n var getPointAnchorSpec = function (editor, e) {\n return __assign({\n bubble: nu$8(0, bubbleSize$1, bubbleAlignments$2),\n layouts: layouts,\n overrides: {\n maxWidthFunction: expandable$1(),\n maxHeightFunction: expandable()\n }\n }, getPointAnchor(editor, e));\n };\n var setupiOSOverrides = function (editor) {\n var originalSelection = editor.selection.getRng();\n var selectionReset = function () {\n global$2.setEditorTimeout(editor, function () {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n var preventMousedown = function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n var clearSelectionReset = function () {\n return unbindEventListeners();\n };\n editor.once('longpresscancel', clearSelectionReset);\n var unbindEventListeners = function () {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n var show = function (editor, e, items, backstage, contextmenu, useNodeAnchor, highlightImmediately) {\n var anchorSpec = useNodeAnchor ? getNodeAnchor$1(editor) : getPointAnchorSpec(editor, e);\n build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, true).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuWithinBounds(contextmenu, anchorSpec, {\n menu: {\n markers: markers$1('normal'),\n highlightImmediately: highlightImmediately\n },\n data: menuData,\n type: 'horizontal'\n }, function () {\n return Optional.some(getContextToolbarBounds(editor, backstage.shared));\n });\n editor.fire(hideContextToolbarEvent);\n });\n };\n var initAndShow$1 = function (editor, e, buildMenu, backstage, contextmenu, useNodeAnchor) {\n var detection = detect$3();\n var isiOS = detection.os.isiOS();\n var isOSX = detection.os.isOSX();\n var isAndroid = detection.os.isAndroid();\n var isTouch = detection.deviceType.isTouch();\n var shouldHighlightImmediately = function () {\n return !(isAndroid || isiOS || isOSX && isTouch);\n };\n var open = function () {\n var items = buildMenu();\n show(editor, e, items, backstage, contextmenu, useNodeAnchor, shouldHighlightImmediately());\n };\n if ((isOSX || isiOS) && !useNodeAnchor) {\n var openiOS_1 = function () {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS_1();\n } else {\n editor.once('selectionchange', openiOS_1);\n editor.once('touchend', function () {\n return editor.off('selectionchange', openiOS_1);\n });\n }\n } else {\n if (isAndroid && !useNodeAnchor) {\n editor.selection.setCursorLocation(e.target, 0);\n }\n open();\n }\n };\n\n var patchPipeConfig = function (config) {\n return typeof config === 'string' ? config.split(/[ ,]/) : config;\n };\n var shouldNeverUseNative = function (editor) {\n return editor.getParam('contextmenu_never_use_native', false, 'boolean');\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return Optional.from(editor.getParam(name)).map(patchPipeConfig).getOrThunk(function () {\n return filter(patchPipeConfig(defaultItems), function (item) {\n return has(contextMenus, item);\n });\n });\n };\n var isContextMenuDisabled = function (editor) {\n return editor.getParam('contextmenu') === false;\n };\n var getContextMenu = function (editor) {\n return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');\n };\n var getAvoidOverlapSelector = function (editor) {\n return editor.getParam('contextmenu_avoid_overlap', '', 'string');\n };\n\n var isSeparator$1 = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator$3 = { type: 'separator' };\n var makeContextItem = function (item) {\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator$3;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n text: item.text,\n icon: item.icon,\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map(items, makeContextItem);\n }\n }\n };\n default:\n return {\n type: 'menuitem',\n text: item.text,\n icon: item.icon,\n onAction: noarg(item.onAction)\n };\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last(xs).filter(function (item) {\n return !isSeparator$1(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator$3];\n });\n return xs.concat(before).concat(groupItems).concat([separator$3]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n if (has(contextMenus, name)) {\n var items = contextMenus[name].update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n } else {\n return acc.concat([name]);\n }\n }, []);\n if (sections.length > 0 && isSeparator$1(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !shouldNeverUseNative(editor);\n };\n var isTriggeredByKeyboard = function (editor, e) {\n return e.type !== 'longpress' && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n };\n var getSelectedElement = function (editor, e) {\n return isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n };\n var shouldUseNodeAnchor = function (editor, e) {\n var selector = getAvoidOverlapSelector(editor);\n if (isTriggeredByKeyboard(editor, e)) {\n return true;\n } else if (selector) {\n var target = getSelectedElement(editor, e);\n return closest$4(SugarElement.fromDom(target), selector);\n } else {\n return false;\n }\n };\n var setup$9 = function (editor, lazySink, backstage) {\n var detection = detect$3();\n var isTouch = detection.deviceType.isTouch;\n var contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink: lazySink,\n onEscape: function () {\n return editor.focus();\n },\n onShow: function () {\n return backstage.setContextMenuState(true);\n },\n onHide: function () {\n return backstage.setContextMenuState(false);\n },\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run(dismissRequested(), function (comp, _se) {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n var hideContextMenu = function (_e) {\n return InlineView.hide(contextmenu);\n };\n var showContextMenu = function (e) {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n var useNodeAnchor = shouldUseNodeAnchor(editor, e);\n var buildMenu = function () {\n var selectedElement = getSelectedElement(editor, e);\n var registry = editor.ui.registry.getAll();\n var menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n var initAndShow$2 = isTouch() ? initAndShow$1 : initAndShow;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, useNodeAnchor);\n };\n editor.on('init', function () {\n var hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n var adt$c = 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 var subtract = function (change) {\n return function (point) {\n return point.translate(-change.left, -change.top);\n };\n };\n var add$4 = function (change) {\n return function (point) {\n return point.translate(change.left, change.top);\n };\n };\n var transform$1 = function (changes) {\n return function (x, y) {\n return foldl(changes, function (rest, f) {\n return f(rest);\n }, SugarPosition(x, y));\n };\n };\n var asFixed = function (coord, scroll, origin) {\n return coord.fold(transform$1([\n add$4(origin),\n subtract(scroll)\n ]), transform$1([subtract(scroll)]), transform$1([]));\n };\n var asAbsolute = function (coord, scroll, origin) {\n return coord.fold(transform$1([add$4(origin)]), transform$1([]), transform$1([add$4(scroll)]));\n };\n var asOffset = function (coord, scroll, origin) {\n return coord.fold(transform$1([]), transform$1([subtract(origin)]), transform$1([\n add$4(scroll),\n subtract(origin)\n ]));\n };\n var withinRange = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n var getDeltas = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n var left = Math.abs(a1.left - a2.left);\n var top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n var toStyles = function (coord, scroll, origin) {\n var stylesOpt = coord.fold(function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n });\n return __assign({\n right: Optional.none(),\n bottom: Optional.none()\n }, stylesOpt);\n };\n var translate$2 = function (coord, deltaX, deltaY) {\n return coord.fold(function (x, y) {\n return offset(x + deltaX, y + deltaY);\n }, function (x, y) {\n return absolute$3(x + deltaX, y + deltaY);\n }, function (x, y) {\n return fixed$1(x + deltaX, y + deltaY);\n });\n };\n var absorb = function (partialCoord, originalCoord, scroll, origin) {\n var absorbOne = function (stencil, nu) {\n return function (optX, optY) {\n var original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left), optY.getOr(original.top));\n };\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute$3), absorbOne(asFixed, fixed$1));\n };\n var offset = adt$c.offset;\n var absolute$3 = adt$c.absolute;\n var fixed$1 = adt$c.fixed;\n\n var parseAttrToInt = function (element, name) {\n var value = get$3(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n var get$f = function (component, snapsInfo) {\n var element = component.element;\n var x = parseAttrToInt(element, snapsInfo.leftAttr);\n var y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n var set$8 = function (component, snapsInfo, pt) {\n var element = component.element;\n set$1(element, snapsInfo.leftAttr, pt.left + 'px');\n set$1(element, snapsInfo.topAttr, pt.top + 'px');\n };\n var clear = function (component, snapsInfo) {\n var element = component.element;\n remove$1(element, snapsInfo.leftAttr);\n remove$1(element, snapsInfo.topAttr);\n };\n\n var getCoords = function (component, snapInfo, coord, delta) {\n return get$f(component, snapInfo).fold(function () {\n return coord;\n }, function (fixed) {\n return fixed$1(fixed.left + delta.left, fixed.top + delta.top);\n });\n };\n var moveOrSnap = function (component, snapInfo, coord, delta, scroll, origin) {\n var newCoord = getCoords(component, snapInfo, coord, delta);\n var snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n var fixedCoord = asFixed(newCoord, scroll, origin);\n set$8(component, snapInfo, fixedCoord);\n return snap.fold(function () {\n return {\n coord: fixed$1(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n };\n }, function (spanned) {\n return {\n coord: spanned.output,\n extra: spanned.extra\n };\n });\n };\n var stopDrag = function (component, snapInfo) {\n clear(component, snapInfo);\n };\n var findMatchingSnap = function (snaps, newCoord, scroll, origin) {\n return findMap(snaps, function (snap) {\n var sensor = snap.sensor;\n var 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 };\n var findClosestSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n var matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(function () {\n var bestSnap = foldl(snaps, function (acc, snap) {\n var sensor = snap.sensor;\n var deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(function () {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n }, function (bestDeltas) {\n var currAvg = (deltas.left + deltas.top) / 2;\n var 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(function (snap) {\n return {\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n };\n });\n });\n };\n var findSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n var snapTo = function (snap, scroll, origin) {\n return {\n coord: absorb(snap.output, snap.output, scroll, origin),\n extra: snap.extra\n };\n };\n\n var snapTo$1 = function (component, dragConfig, _state, snap) {\n var target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n var doc = owner(component.element);\n var scroll_1 = get$9(doc);\n var origin_1 = getOrigin(target);\n var snapPin = snapTo(snap, scroll_1, origin_1);\n var styles = toStyles(snapPin.coord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo$1\n });\n\n var initialAttribute = 'data-initial-z-index';\n var resetZIndex = function (blocker) {\n parent(blocker.element).filter(isElement).each(function (root) {\n getOpt(root, initialAttribute).fold(function () {\n return remove$6(root, 'z-index');\n }, function (zIndex) {\n return set$2(root, 'z-index', zIndex);\n });\n remove$1(root, initialAttribute);\n });\n };\n var changeZIndex = function (blocker) {\n parent(blocker.element).filter(isElement).each(function (root) {\n getRaw(root, 'z-index').each(function (zindex) {\n set$1(root, initialAttribute, zindex);\n });\n set$2(root, 'z-index', get$5(blocker.element, 'z-index'));\n });\n };\n var instigate = function (anyComponent, blocker) {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n var discard = function (blocker) {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n var createComponent = function (component, blockerClass, blockerEvents) {\n return 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\n var SnapSchema = optionObjOf('snaps', [\n strict$1('getSnapPoints'),\n onHandler('onSensor'),\n strict$1('leftAttr'),\n strict$1('topAttr'),\n defaulted$1('lazyViewport', win),\n defaulted$1('mustSnap', false)\n ]);\n\n var schema$t = [\n defaulted$1('useFixed', never),\n strict$1('blockerClass'),\n defaulted$1('getTarget', identity),\n defaulted$1('onDrag', noop),\n defaulted$1('repositionTarget', true),\n defaulted$1('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n var getCurrentCoord = function (target) {\n return lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), function (left, top, position) {\n var nu = position === 'fixed' ? fixed$1 : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(function () {\n var location = absolute(target);\n return absolute$3(location.left, location.top);\n });\n };\n var clampCoords = function (component, coords, scroll, origin, startData) {\n var bounds = startData.bounds;\n var absoluteCoord = asAbsolute(coords, scroll, origin);\n var newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n var newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n var newCoords = absolute$3(newX, newY);\n return coords.fold(function () {\n var offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left, offset$1.top);\n }, function () {\n return newCoords;\n }, function () {\n var fixed = asFixed(newCoords, scroll, origin);\n return fixed$1(fixed.left, fixed.top);\n });\n };\n var calcNewCoord = function (component, optSnaps, currentCoord, scroll, origin, delta, startData) {\n var newCoord = optSnaps.fold(function () {\n var translated = translate$2(currentCoord, delta.left, delta.top);\n var fixedCoord = asFixed(translated, scroll, origin);\n return fixed$1(fixedCoord.left, fixedCoord.top);\n }, function (snapInfo) {\n var snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(function (extra) {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n var dragBy = function (component, dragConfig, startData, delta) {\n var target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n var doc = owner(component.element);\n var scroll_1 = get$9(doc);\n var origin_1 = getOrigin(target);\n var currentCoord = getCurrentCoord(target);\n var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll_1, origin_1, delta, startData);\n var styles = toStyles(newCoord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n var calcStartData = function (dragConfig, comp) {\n return {\n bounds: dragConfig.getBounds(),\n height: getOuter$1(comp.element),\n width: getOuter$2(comp.element)\n };\n };\n var move$1 = function (component, dragConfig, dragState, dragMode, event) {\n var delta = dragState.update(dragMode, event);\n var dragStartData = dragState.getStartData().getOrThunk(function () {\n return calcStartData(dragConfig, component);\n });\n delta.each(function (dlt) {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n var stop = function (component, blocker, dragConfig, dragState) {\n blocker.each(discard);\n dragConfig.snaps.each(function (snapInfo) {\n stopDrag(component, snapInfo);\n });\n var target = dragConfig.getTarget(component.element);\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n var handlers = function (events) {\n return function (dragConfig, dragState) {\n var updateStartState = function (comp) {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive(__spreadArrays([run(windowScroll(), function (comp) {\n dragState.getStartData().each(function () {\n return updateStartState(comp);\n });\n })], events(dragConfig, dragState, updateStartState)));\n };\n };\n\n var init$c = function (dragApi) {\n return derive([\n run(mousedown(), dragApi.forceDrop),\n run(mouseup(), dragApi.drop),\n run(mousemove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n }),\n run(mouseout(), dragApi.delayDrop)\n ]);\n };\n\n var getData$1 = function (event) {\n return Optional.from(SugarPosition(event.x, event.y));\n };\n var getDelta$1 = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n var events$g = function (dragConfig, dragState, updateStartState) {\n return [run(mousedown(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n var stop$1 = function () {\n return stop(component, Optional.some(blocker), dragConfig, dragState);\n };\n var delayDrop = DelayedFunction(stop$1, 200);\n var dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: function (event) {\n delayDrop.cancel();\n move$1(component, dragConfig, dragState, MouseData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$c(dragApi));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n };\n var schema$u = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$g) })]);\n\n var init$d = function (dragApi) {\n return derive([\n run(touchstart(), dragApi.forceDrop),\n run(touchend(), dragApi.drop),\n run(touchcancel(), dragApi.drop),\n run(touchmove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n };\n\n var getDataFrom = function (touches) {\n var touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n var getData$2 = function (event) {\n var raw = event.raw;\n var touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n var getDelta$2 = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$2,\n getDelta: getDelta$2\n });\n\n var events$h = function (dragConfig, dragState, updateStartState) {\n var blockerCell = Cell(Optional.none());\n return [\n run(touchstart(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n var stop$1 = function () {\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Optional.none());\n };\n var dragApi = {\n drop: stop$1,\n delayDrop: noop,\n forceDrop: stop$1,\n move: function (event) {\n move$1(component, dragConfig, dragState, TouchData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$d(dragApi));\n blockerCell.set(Optional.some(blocker));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run(touchmove(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n move$1(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run(touchend(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Optional.none());\n }),\n run(touchcancel(), function (component) {\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Optional.none());\n })\n ];\n };\n var schema$v = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$h) })]);\n\n var events$i = function (dragConfig, dragState, updateStartState) {\n return __spreadArrays(events$g(dragConfig, dragState, updateStartState), events$h(dragConfig, dragState, updateStartState));\n };\n var schema$w = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$i) })]);\n\n var mouse = schema$u;\n var touch = schema$v;\n var mouseOrTouch = schema$w;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n var init$e = function () {\n var previous = Optional.none();\n var startData = Optional.none();\n var reset = function () {\n previous = Optional.none();\n startData = Optional.none();\n };\n var calculateDelta = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.getDelta(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n var update = function (mode, dragEvent) {\n return mode.getData(dragEvent).bind(function (nuData) {\n return calculateDelta(mode, nuData);\n });\n };\n var setStartData = function (data) {\n startData = Optional.some(data);\n };\n var getStartData = function () {\n return startData;\n };\n var readState = constant({});\n return nu$5({\n readState: readState,\n reset: reset,\n update: update,\n getStartData: getStartData,\n setStartData: setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$e\n });\n\n var Dragging = createModes$1({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: function (dragConfig, dragState) {\n var dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: function (sConfig) {\n return {\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n };\n }\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var snapWidth = 40;\n var snapOffset = snapWidth / 2;\n var calcSnap = function (selectorOpt, td, x, y, width, height) {\n return selectorOpt.fold(function () {\n return Dragging.snap({\n sensor: absolute$3(x - snapOffset, y - snapOffset),\n range: SugarPosition(width, height),\n output: absolute$3(Optional.some(x), Optional.some(y)),\n extra: { td: td }\n });\n }, function (selectorHandle) {\n var sensorLeft = x - snapOffset;\n var sensorTop = y - snapOffset;\n var sensorWidth = snapWidth;\n var sensorHeight = snapWidth;\n var rect = selectorHandle.element.dom.getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute$3(sensorLeft, sensorTop),\n range: SugarPosition(sensorWidth, sensorHeight),\n output: absolute$3(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n extra: { td: td }\n });\n });\n };\n var getSnapsConfig = function (getSnapPoints, cell, onChange) {\n var isSameCell = function (cellOpt, td) {\n return cellOpt.exists(function (currentTd) {\n return eq$1(currentTd, td);\n });\n };\n return {\n getSnapPoints: getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: function (component, extra) {\n var td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(Optional.some(td));\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n var createSelector = function (snaps) {\n return 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: 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 };\n var setup$a = function (editor, sink) {\n var tlTds = Cell([]);\n var brTds = Cell([]);\n var isVisible = Cell(false);\n var startCell = Cell(Optional.none());\n var finishCell = Cell(Optional.none());\n var getTopLeftSnap = function (td) {\n var box = absolute$1(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n var getTopLeftSnaps = function () {\n return map(tlTds.get(), function (td) {\n return getTopLeftSnap(td);\n });\n };\n var getBottomRightSnap = function (td) {\n var box = absolute$1(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n var getBottomRightSnaps = function () {\n return map(brTds.get(), function (td) {\n return getBottomRightSnap(td);\n });\n };\n var topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, function (start) {\n finishCell.get().each(function (finish) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, function (finish) {\n startCell.get().each(function (start) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var memTopLeft = createSelector(topLeftSnaps);\n var memBottomRight = createSelector(bottomRightSnaps);\n var topLeft = build$1(memTopLeft.asSpec());\n var bottomRight = build$1(memBottomRight.asSpec());\n var showOrHideHandle = function (selector, cell, isAbove, isBelow) {\n var cellRect = cell.dom.getBoundingClientRect();\n remove$6(selector.element, 'display');\n var viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n var aboveViewport = isAbove(cellRect);\n var belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$2(selector.element, 'display', 'none');\n }\n };\n var snapTo = function (selector, cell, getSnapConfig, pos) {\n var snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n var isAbove = function (rect) {\n return rect[pos] < 0;\n };\n var isBelow = function (rect, viewportHeight) {\n return rect[pos] > viewportHeight;\n };\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n var snapTopLeft = function (cell) {\n return snapTo(topLeft, cell, getTopLeftSnap, 'top');\n };\n var snapLastTopLeft = function () {\n return startCell.get().each(snapTopLeft);\n };\n var snapBottomRight = function (cell) {\n return snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n };\n var snapLastBottomRight = function () {\n return finishCell.get().each(snapBottomRight);\n };\n if (detect$3().deviceType.isTouch()) {\n editor.on('TableSelectionChange', function (e) {\n if (!isVisible.get()) {\n attach$1(sink, topLeft);\n attach$1(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(Optional.some(e.start));\n finishCell.set(Optional.some(e.finish));\n e.otherCells.each(function (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', function () {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', function () {\n if (isVisible.get()) {\n detach(topLeft);\n detach(bottomRight);\n isVisible.set(false);\n }\n startCell.set(Optional.none());\n finishCell.set(Optional.none());\n });\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 var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {\n var dimensions = {};\n dimensions.height = calcCappedSize(originalHeight + deltas.top, getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize$3 = function (editor, deltas, resizeType) {\n var container = SugarElement.fromDom(editor.getContainer());\n var dimensions = getDimensions(editor, deltas, resizeType, get$7(container), get$8(container));\n each$1(dimensions, function (val, dim) {\n return set$2(container, dim, numToPx(val));\n });\n fireResizeEditor(editor);\n };\n\n var isHidden$1 = function (elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n };\n var renderElementPath = function (editor, settings, providersBackstage) {\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n var getDataPath = function (data) {\n var parts = data || [];\n var newPathElements = map(parts, function (part, index) {\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'role': 'button',\n 'data-index': index,\n 'tab-index': -1,\n 'aria-level': index + 1\n },\n innerHtml: part.name\n },\n action: function (_btn) {\n editor.focus();\n editor.selection.select(part.element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n });\n });\n var divider = {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true },\n innerHtml: ' ' + settings.delimiter + ' '\n }\n };\n return foldl(newPathElements.slice(1), function (acc, element) {\n var newAcc = acc;\n newAcc.push(divider);\n newAcc.push(element);\n return newAcc;\n }, [newPathElements[0]]);\n };\n var updatePath = function (parents) {\n var newPath = [];\n var i = parents.length;\n while (i-- > 0) {\n var parent_1 = parents[i];\n if (parent_1.nodeType === 1 && !isHidden$1(parent_1)) {\n var args = editor.fire('ResolveName', {\n name: parent_1.nodeName.toLowerCase(),\n target: parent_1\n });\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent_1\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(function (comp, _e) {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {\n return Keying.focusIn(comp);\n });\n editor.on('NodeChange', function (e) {\n var newPath = updatePath(e.parents);\n if (newPath.length > 0) {\n Replacing.set(comp, getDataPath(newPath));\n } else {\n Replacing.set(comp, []);\n }\n });\n })])\n ]),\n components: []\n };\n };\n\n var renderWordCount = function (editor, providersBackstage) {\n var _a;\n var replaceCountText = function (comp, count, mode) {\n return Replacing.set(comp, [text(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\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(function (comp) {\n var currentVal = Representing.getValue(comp);\n var 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(function (comp) {\n editor.on('wordCountUpdate', function (e) {\n var mode = Representing.getValue(comp).mode;\n Representing.setValue(comp, {\n mode: mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: (_a = {}, _a[execute()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ], _a)\n });\n };\n\n var renderStatusbar = function (editor, providersBackstage) {\n var renderResizeHandlerIcon = function (resizeType) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: {\n 'title': providersBackstage.translate('Resize'),\n 'aria-hidden': 'true'\n },\n innerHtml: get$e('resize-handle', providersBackstage.icons)\n },\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (comp, target, delta) {\n resize$3(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n })])\n };\n };\n var renderBranding = function () {\n var label = global$6.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '' + label + '';\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding'],\n innerHtml: linkHtml\n }\n };\n };\n var getResizeType = function (editor) {\n var fallback = !editor.hasPlugin('autoresize');\n var resize = editor.getParam('resize', fallback);\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 var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (editor.getParam('branding', true, 'boolean')) {\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: components\n }];\n }\n return [];\n };\n var getComponents = function () {\n var components = getTextComponents();\n var resizeType = getResizeType(editor);\n if (resizeType !== ResizeTypes.None) {\n components.push(renderResizeHandlerIcon(resizeType));\n }\n return components;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n var setup$b = function (editor) {\n var _a;\n var isInline = editor.inline;\n var mode = isInline ? Inline : Iframe;\n var header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n var lazyOuterContainer = Optional.none();\n var platform = detect$3();\n var isIE = platform.browser.isIE();\n var platformClasses = isIE ? ['tox-platform-ie'] : [];\n var isTouch = platform.deviceType.isTouch();\n var touchPlatformClass = 'tox-platform-touch';\n var deviceClasses = isTouch ? [touchPlatformClass] : [];\n var isToolbarBottom = isToolbarLocationBottom(editor);\n var uiContainer = getUiContainer(editor);\n var dirAttributes = global$6.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var resizeUiMothership = function () {\n set$2(uiMothership.element, 'width', document.body.clientWidth + 'px');\n };\n var makeSinkDefinition = function () {\n var isGridUiContainer = eq$1(body(), uiContainer) && get$5(uiContainer, 'display') === 'grid';\n var sinkSpec = {\n dom: __assign({\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(platformClasses).concat(deviceClasses)\n }, dirAttributes),\n behaviours: derive$1([Positioning.config({\n useFixed: function () {\n return isHeaderDocked();\n }\n })])\n };\n var reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive([run(windowResize(), resizeUiMothership)])\n };\n return deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {});\n };\n var sink = build$1(makeSinkDefinition());\n var lazySink = function () {\n return Result.value(sink);\n };\n var memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n var lazyAnchorBar = function () {\n return lazyOuterContainer.bind(function (container) {\n return memAnchorBar.getOpt(container);\n }).getOrDie('Could not find a anchor bar element');\n };\n var lazyToolbar = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getToolbar(container);\n }).getOrDie('Could not find more toolbar element');\n };\n var lazyThrobber = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getThrobber(container);\n }).getOrDie('Could not find throbber element');\n };\n var backstage = init$8(sink, editor, lazyAnchorBar);\n var partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstage,\n onEscape: function () {\n editor.focus();\n }\n });\n var toolbarMode = getToolbarMode(editor);\n var partToolbar = OuterContainer.parts.toolbar(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: lazySink,\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar: lazyToolbar,\n lazyHeader: function () {\n return lazyHeader().getOrDie('Could not find header element');\n }\n }, verticalDirAttributes));\n var partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode\n });\n var partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n var partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n var partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstage\n });\n var sb = editor.getParam('statusbar', true, 'boolean');\n var statusbar = sb && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n var socketSidebarContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n var hasMultipleToolbar = isMultipleToolbars(editor);\n var hasToolbar = isToolbarEnabled(editor);\n var hasMenubar = isMenubarEnabled(editor);\n var getPartToolbar = function () {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n var partHeader = OuterContainer.parts.header({\n dom: __assign({\n tag: 'div',\n classes: ['tox-editor-header']\n }, verticalDirAttributes),\n components: flatten([\n hasMenubar ? [partMenubar] : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor: editor,\n sharedBackstage: backstage.shared\n });\n var editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [socketSidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n var editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n var containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n var isHidden = isDistractionFree(editor);\n var attributes = __assign(__assign({ role: 'application' }, global$6.isRtl() ? { dir: 'rtl' } : {}), isHidden ? { 'aria-hidden': 'true' } : {});\n var 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).concat(platformClasses),\n styles: __assign({ visibility: 'hidden' }, isHidden ? {\n opacity: '0',\n border: '0'\n } : {}),\n attributes: 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'\n })\n ])\n }));\n lazyOuterContainer = Optional.some(outerContainer);\n editor.shortcuts.add('alt+F9', 'focus menubar', function () {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.shortcuts.add('alt+F10', 'focus toolbar', function () {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', function () {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', function () {\n return OuterContainer.isToolbarDrawerToggled(outerContainer);\n });\n var mothership = takeover(outerContainer);\n var uiMothership = takeover(sink);\n setup$3(editor, mothership, uiMothership);\n var getUi = function () {\n var channels = {\n broadcastAll: uiMothership.broadcast,\n broadcastOn: uiMothership.broadcastOn,\n register: noop\n };\n return { channels: channels };\n };\n var setEditorSize = function () {\n var parsedHeight = numToPx(getHeightWithFallback(editor));\n var parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$2(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$2(outerContainer.element, 'height', parsedHeight);\n } else {\n set$2(outerContainer.element, 'height', '200px');\n }\n }\n return parsedHeight;\n };\n var renderUI = function () {\n header.setup(editor, backstage.shared, lazyHeader);\n setup$8(editor, backstage);\n setup$9(editor, lazySink, backstage);\n setup$6(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map$2(getToolbarGroups(editor), function (toolbarGroupButtonConfig, name) {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n var _a = editor.ui.registry.getAll(), buttons = _a.buttons, menuItems = _a.menuItems, contextToolbars = _a.contextToolbars, sidebars = _a.sidebars;\n var toolbarOpt = getMultipleToolbarsSetting(editor);\n var rawUiConfig = {\n menuItems: menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(function () {\n return getToolbar(editor);\n }),\n allowToolbarGroups: toolbarMode === ToolbarMode.floating,\n buttons: buttons,\n sidebar: sidebars\n };\n register$4(editor, contextToolbars, sink, { backstage: backstage });\n setup$a(editor, sink);\n var elm = editor.getElement();\n var height = setEditorSize();\n var uiComponents = {\n mothership: mothership,\n uiMothership: uiMothership,\n outerContainer: outerContainer\n };\n var args = {\n targetNode: elm,\n height: height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n return {\n mothership: mothership,\n uiMothership: uiMothership,\n backstage: backstage,\n renderUI: renderUI,\n getUi: getUi\n };\n };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = Optional.from(get$3(describedElement, 'id')).fold(function () {\n var id = generate$1('dialog-describe');\n set$1(describeElement, 'id', id);\n return id;\n }, identity);\n set$1(describedElement, 'aria-describedby', describeId);\n };\n\n var labelledBy = function (labelledElement, labelElement) {\n var labelId = getOpt(labelledElement, 'id').fold(function () {\n var id = generate$1('dialog-label');\n set$1(labelElement, 'id', id);\n return id;\n }, identity);\n set$1(labelledElement, 'aria-labelledby', labelId);\n };\n\n var schema$x = constant([\n strict$1('lazySink'),\n option('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted$1('useTabstopAt', always),\n defaulted$1('eventOrder', {}),\n field$1('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n var basic = { sketch: identity };\n var parts$f = constant([\n optional({\n name: 'draghandle',\n overrides: function (detail, spec) {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: function (handle) {\n return ancestor$2(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: [strict$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'footer'\n }),\n external$1({\n factory: {\n sketch: function (spec, detail) {\n return __assign(__assign({}, spec), {\n dom: detail.dom,\n components: detail.components\n });\n }\n },\n schema: [\n defaulted$1('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$1('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n var block = function (component, config, state, getBusySpec) {\n set$1(component.element, 'aria-busy', true);\n var root = config.getRoot(component).getOr(component);\n var blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Optional.some(true);\n },\n onShiftTab: function () {\n return Optional.some(true);\n }\n }),\n Focusing.config({})\n ]);\n var blockSpec = getBusySpec(root, blockerBehaviours);\n var blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade$1(blocker));\n if (blocker.hasConfigured(Keying)) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(function () {\n return Replacing.remove(root, blocker);\n });\n };\n var unblock = function (component, config, state) {\n remove$1(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 onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n var init$f = function () {\n var blocker = destroyable();\n var blockWith = function (destroy) {\n blocker.set({ destroy: destroy });\n };\n return nu$5({\n readState: blocker.isSet,\n blockWith: blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n var Blocking = create$1({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n var factory$i = function (detail, components, spec, externals) {\n var _a;\n var dialogComp = Cell(Optional.none());\n var showDialog = function (dialog) {\n dialogComp.set(Optional.some(dialog));\n var sink = detail.lazySink(dialog).getOrDie();\n var externalBlocker = externals.blocker();\n var blocker = sink.getSystem().build(__assign(__assign({}, externalBlocker), {\n components: externalBlocker.components.concat([premade$1(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), function () {\n Keying.focusIn(dialog);\n })])\n ])\n }));\n attach$1(sink, blocker);\n Keying.focusIn(dialog);\n };\n var hideDialog = function (dialog) {\n dialogComp.set(Optional.none());\n parent(dialog.element).each(function (blockerDom) {\n dialog.getSystem().getByDom(blockerDom).each(function (blocker) {\n detach(blocker);\n });\n });\n };\n var getDialogBody = function (dialog) {\n return getPartOrDie(dialog, detail, 'body');\n };\n var getDialogFooter = function (dialog) {\n return getPartOrDie(dialog, detail, 'footer');\n };\n var setBusy = function (dialog, getBusySpec) {\n Blocking.block(dialog, getBusySpec);\n };\n var setIdle = function (dialog) {\n Blocking.unblock(dialog);\n };\n var modalEventsId = generate$1('modal-events');\n var eventOrder = __assign(__assign({}, detail.eventOrder), (_a = {}, _a[attachedToDom()] = [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []), _a));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle: setIdle,\n setBusy: setBusy\n },\n eventOrder: 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(function (c) {\n labelledBy(c.element, getPartOrDie(c, detail, 'title').element);\n describedBy(c.element, getPartOrDie(c, detail, 'body').element);\n })])\n ])\n };\n };\n var ModalDialog = composite$1({\n name: 'ModalDialog',\n configFields: schema$x(),\n partFields: parts$f(),\n factory: factory$i,\n apis: {\n show: function (apis, dialog) {\n apis.show(dialog);\n },\n hide: function (apis, dialog) {\n apis.hide(dialog);\n },\n getBody: function (apis, dialog) {\n return apis.getBody(dialog);\n },\n getFooter: function (apis, dialog) {\n return apis.getFooter(dialog);\n },\n setBusy: function (apis, dialog, getBusySpec) {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: function (apis, dialog) {\n apis.setIdle(dialog);\n }\n }\n });\n\n var dialogToggleMenuItemSchema = objOf([\n strictString('type'),\n strictString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var baseFooterButtonFields = [\n field('name', 'name', defaultedThunk(function () {\n return generate$1('button-name');\n }), string),\n optionString('icon'),\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n defaultedBoolean('primary', false),\n defaultedBoolean('disabled', false)\n ];\n var dialogFooterButtonFields = __spreadArrays(baseFooterButtonFields, [strictString('text')]);\n var normalFooterButtonFields = __spreadArrays([strictStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ])], dialogFooterButtonFields);\n var menuFooterButtonFields = __spreadArrays([\n strictStringEnum('type', ['menu']),\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n strictArrayOf('items', dialogToggleMenuItemSchema)\n ], baseFooterButtonFields);\n var dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields\n });\n\n var alertBannerFields = [\n strictString('type'),\n strictString('text'),\n strictStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n strictString('icon'),\n defaulted$1('url', '')\n ];\n var alertBannerSchema = objOf(alertBannerFields);\n\n var createBarFields = function (itemsField) {\n return [\n strictString('type'),\n itemsField\n ];\n };\n\n var buttonFields = [\n strictString('type'),\n strictString('text'),\n defaultedBoolean('disabled', false),\n defaultedBoolean('primary', false),\n field('name', 'name', defaultedThunk(function () {\n return generate$1('button-name');\n }), string),\n optionString('icon'),\n defaultedBoolean('borderless', false)\n ];\n var buttonSchema = objOf(buttonFields);\n\n var checkboxFields = [\n strictString('type'),\n strictString('name'),\n strictString('label'),\n defaultedBoolean('disabled', false)\n ];\n var checkboxSchema = objOf(checkboxFields);\n var checkboxDataProcessor = boolean;\n\n var formComponentFields = [\n strictString('type'),\n strictString('name')\n ];\n var formComponentWithLabelFields = formComponentFields.concat([optionString('label')]);\n\n var collectionFields = formComponentWithLabelFields.concat([defaulted$1('columns', 'auto')]);\n var collectionSchema = objOf(collectionFields);\n var collectionDataProcessor = arrOfObj$1([\n strictString('value'),\n strictString('text'),\n strictString('icon')\n ]);\n\n var colorInputFields = formComponentWithLabelFields;\n var colorInputSchema = objOf(colorInputFields);\n var colorInputDataProcessor = string;\n\n var colorPickerFields = formComponentWithLabelFields;\n var colorPickerSchema = objOf(colorPickerFields);\n var colorPickerDataProcessor = string;\n\n var customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n strictString('scriptId'),\n strictString('scriptUrl'),\n defaultedPostMsg('settings', undefined)\n ]);\n var customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n strictFunction('init')\n ]);\n var customEditorSchema = valueOf(function (v) {\n return asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(function () {\n return asRaw('customeditor.new', objOfOnly(customEditorFields), v);\n });\n });\n var customEditorDataProcessor = string;\n\n var dropZoneFields = formComponentWithLabelFields;\n var dropZoneSchema = objOf(dropZoneFields);\n var dropZoneDataProcessor = arrOfVal();\n\n var createGridFields = function (itemsField) {\n return [\n strictString('type'),\n strictNumber('columns'),\n itemsField\n ];\n };\n\n var htmlPanelFields = [\n strictString('type'),\n strictString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ])\n ];\n var htmlPanelSchema = objOf(htmlPanelFields);\n\n var iframeFields = formComponentWithLabelFields.concat([defaultedBoolean('sandboxed', true)]);\n var iframeSchema = objOf(iframeFields);\n var iframeDataProcessor = string;\n\n var imageToolsFields = formComponentWithLabelFields.concat([strictOf('currentState', objOf([\n strict$1('blob'),\n strictString('url')\n ]))]);\n var imageToolsSchema = objOf(imageToolsFields);\n\n var inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var inputSchema = objOf(inputFields);\n var inputDataProcessor = string;\n\n var createLabelFields = function (itemsField) {\n return [\n strictString('type'),\n strictString('label'),\n itemsField\n ];\n };\n\n var listBoxSingleItemFields = [\n strictString('text'),\n strictString('value')\n ];\n var listBoxNestedItemFields = [\n strictString('text'),\n strictArrayOf('items', thunkOf('items', function () {\n return listBoxItemSchema;\n }))\n ];\n var listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n var listBoxFields = formComponentWithLabelFields.concat([\n strictArrayOf('items', listBoxItemSchema),\n defaultedBoolean('disabled', false)\n ]);\n var listBoxSchema = objOf(listBoxFields);\n var listBoxDataProcessor = string;\n\n var selectBoxFields = formComponentWithLabelFields.concat([\n strictArrayOfObj('items', [\n strictString('text'),\n strictString('value')\n ]),\n defaultedNumber('size', 1),\n defaultedBoolean('disabled', false)\n ]);\n var selectBoxSchema = objOf(selectBoxFields);\n var selectBoxDataProcessor = string;\n\n var sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n defaultedBoolean('disabled', false)\n ]);\n var sizeInputSchema = objOf(sizeInputFields);\n var sizeInputDataProcessor = objOf([\n strictString('width'),\n strictString('height')\n ]);\n\n var tableFields = [\n strictString('type'),\n strictArrayOf('header', string),\n strictArrayOf('cells', arrOf(string))\n ];\n var tableSchema = objOf(tableFields);\n\n var textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var textAreaSchema = objOf(textAreaFields);\n var textAreaDataProcessor = string;\n\n var urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n defaulted$1('disabled', false)\n ]);\n var urlInputSchema = objOf(urlInputFields);\n var urlInputDataProcessor = objOf([\n strictString('value'),\n defaulted$1('meta', {})\n ]);\n\n var createItemsField = function (name) {\n return field('items', 'items', strict(), arrOf(valueOf(function (v) {\n return asRaw('Checking item of ' + name, itemSchema$3, v).fold(function (sErr) {\n return Result.error(formatError(sErr));\n }, function (passValue) {\n return Result.value(passValue);\n });\n })));\n };\n var itemSchema$3 = valueThunkOf(function () {\n return chooseProcessor('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 textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagetools: imageToolsSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n panel: panelSchema\n });\n });\n var panelFields = [\n strictString('type'),\n defaulted$1('classes', []),\n strictArrayOf('items', itemSchema$3)\n ];\n var panelSchema = objOf(panelFields);\n\n var tabFields = [\n field('name', 'name', defaultedThunk(function () {\n return generate$1('tab-name');\n }), string),\n strictString('title'),\n strictArrayOf('items', itemSchema$3)\n ];\n var tabPanelFields = [\n strictString('type'),\n strictArrayOfObj('tabs', tabFields)\n ];\n var tabPanelSchema = objOf(tabPanelFields);\n\n var dialogButtonFields = dialogFooterButtonFields;\n var dialogButtonSchema = dialogFooterButtonSchema;\n var dialogSchema = objOf([\n strictString('title'),\n strictOf('body', chooseProcessor('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n strictArrayOf('buttons', dialogButtonSchema),\n defaulted$1('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaulted$1('onTabChange', noop)\n ]);\n var createDialog = function (spec) {\n return asRaw('dialog', dialogSchema, spec);\n };\n\n var urlDialogButtonSchema = objOf(__spreadArrays([strictStringEnum('type', [\n 'cancel',\n 'custom'\n ])], dialogButtonFields));\n var urlDialogSchema = objOf([\n strictString('title'),\n strictString('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 var createUrlDialog = function (spec) {\n return asRaw('dialog', urlDialogSchema, spec);\n };\n\n var getAllObjects = function (obj) {\n if (isObject(obj)) {\n return [obj].concat(bind(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n var isNamedItem = function (obj) {\n return isString(obj.type) && isString(obj.name);\n };\n var dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n sizeinput: sizeInputDataProcessor,\n selectbox: selectBoxDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n var getDataProcessor = function (item) {\n return Optional.from(dataProcessors[item.type]);\n };\n var getNamedItems = function (structure) {\n return filter(getAllObjects(structure), isNamedItem);\n };\n\n var createDataValidator = function (structure) {\n var namedItems = getNamedItems(structure);\n var fields = bind(namedItems, function (item) {\n return getDataProcessor(item).fold(function () {\n return [];\n }, function (schema) {\n return [strictOf(item.name, schema)];\n });\n });\n return objOf(fields);\n };\n\n var extract$1 = function (structure) {\n var internalDialog = getOrDie(createDialog(structure));\n var dataValidator = createDataValidator(structure);\n var initialData = structure.initialData;\n return {\n internalDialog: internalDialog,\n dataValidator: dataValidator,\n initialData: initialData\n };\n };\n var DialogManager = {\n open: function (factory, structure) {\n var extraction = extract$1(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: function (factory, structure) {\n var internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: function (structure) {\n return extract$1(structure);\n }\n };\n\n var toValidValues = function (values) {\n var errors = [];\n var result = {};\n each$1(values, function (value, name) {\n value.fold(function () {\n errors.push(name);\n }, function (v) {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n var renderBodyPanel = function (spec, backstage) {\n var memForm = record(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map(spec.items, function (item) {\n return interpretInForm(parts, item, backstage);\n })\n };\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: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n console.error(err);\n return {};\n }, function (vals) {\n return vals;\n });\n }\n })\n ])\n };\n };\n\n var factory$j = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$7(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 };\n var TabButton = single$2({\n name: 'TabButton',\n configFields: [\n defaulted$1('uid', undefined),\n strict$1('value'),\n field('dom', 'dom', mergeWithThunk(function () {\n return {\n attributes: {\n 'role': 'tab',\n 'id': generate$1('aria'),\n 'aria-selected': 'false'\n }\n };\n }), anyValue$1()),\n option('action'),\n defaulted$1('domModification', {}),\n field$1('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n strict$1('view')\n ],\n factory: factory$j\n });\n\n var schema$y = constant([\n strict$1('tabs'),\n strict$1('dom'),\n defaulted$1('clickToDismiss', false),\n field$1('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n var tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: function (barDetail) {\n var dismissTab$1 = function (tabbar, button) {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n var changeTab$1 = function (tabbar, button) {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n return {\n action: function (button) {\n var tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n var activeButton = Highlighting.isHighlighted(tabbar, button);\n var response = function () {\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 var parts$g = constant([tabsPart]);\n\n var factory$k = function (detail, components, _spec, _externals) {\n return {\n 'uid': detail.uid,\n 'dom': detail.dom,\n components: 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: function (tabbar, tab) {\n set$1(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: function (tabbar, tab) {\n set$1(tab.element, 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: function (tabbar) {\n return Highlighting.getHighlighted(tabbar).map(function (tab) {\n return tab.element;\n });\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n };\n };\n var Tabbar = composite$1({\n name: 'Tabbar',\n configFields: schema$y(),\n partFields: parts$g(),\n factory: factory$k\n });\n\n var factory$l = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n };\n };\n var Tabview = single$2({\n name: 'Tabview',\n configFields: [field$1('tabviewBehaviours', [Replacing])],\n factory: factory$l\n });\n\n var schema$z = constant([\n defaulted$1('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted$1('tabs', []),\n field$1('tabSectionBehaviours', [])\n ]);\n var barPart = required({\n factory: Tabbar,\n schema: [\n strict$1('dom'),\n strictObjOf('markers', [\n strict$1('tabClass'),\n strict$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: function (detail) {\n return { tabs: detail.tabs };\n }\n });\n var viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n var parts$h = constant([\n barPart,\n viewPart\n ]);\n\n var factory$m = function (detail, components, _spec, _externals) {\n var changeTab$1 = function (button) {\n var tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(function (tabview) {\n var tabWithValue = find(detail.tabs, function (t) {\n return t.value === tabValue;\n });\n tabWithValue.each(function (tabData) {\n var panel = tabData.view();\n getOpt(button.element, 'id').each(function (id) {\n set$1(tabview.element, 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n var changeTabBy = function (section, byPred) {\n getPart(section, detail, 'tabbar').each(function (tabbar) {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$d(detail.tabSectionBehaviours),\n events: derive(flatten([\n detail.selectFirst ? [runOnAttached(function (section, _simulatedEvent) {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run(changeTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run(dismissTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event.button;\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: function (section) {\n return getPart(section, detail, 'tabview').map(function (tabview) {\n return Replacing.contents(tabview);\n }).getOr([]);\n },\n showTab: function (section, tabKey) {\n var getTabIfNotActive = function (tabbar) {\n var candidates = Highlighting.getCandidates(tabbar);\n var optTab = find(candidates, function (c) {\n return Representing.getValue(c) === tabKey;\n });\n return optTab.filter(function (tab) {\n return !Highlighting.isHighlighted(tabbar, tab);\n });\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n var TabSection = composite$1({\n name: 'TabSection',\n configFields: schema$z(),\n partFields: parts$h(),\n factory: factory$m,\n apis: {\n getViewItems: function (apis, component) {\n return apis.getViewItems(component);\n },\n showTab: function (apis, component, tabKey) {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n var measureHeights = function (allTabs, tabview, tabviewComp) {\n return map(allTabs, function (_tab, i) {\n Replacing.set(tabviewComp, allTabs[i].view());\n var rect = tabview.dom.getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n };\n var getMaxHeight = function (heights) {\n return head(sort(heights, function (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 };\n var getMaxTabviewHeight = function (dialog, tabview, tablist) {\n var documentElement$1 = documentElement(dialog).dom;\n var rootElm = ancestor$2(dialog, '.tox-dialog-wrap').getOr(dialog);\n var isFixed = get$5(rootElm, 'position') === 'fixed';\n var 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 var tabviewHeight = get$7(tabview);\n var isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$8(tablist);\n var currentTabHeight = isTabListBeside ? Math.max(get$7(tablist), tabviewHeight) : tabviewHeight;\n var dialogTopMargin = parseInt(get$5(dialog, 'margin-top'), 10) || 0;\n var dialogBottomMargin = parseInt(get$5(dialog, 'margin-bottom'), 10) || 0;\n var dialogHeight = get$7(dialog) + dialogTopMargin + dialogBottomMargin;\n var chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n var showTab = function (allTabs, comp) {\n head(allTabs).each(function (tab) {\n return TabSection.showTab(comp, tab.value);\n });\n };\n var setTabviewHeight = function (tabview, height) {\n set$2(tabview, 'height', height + 'px');\n if (!detect$3().browser.isIE()) {\n set$2(tabview, 'flex-basis', height + 'px');\n } else {\n remove$6(tabview, 'flex-basis');\n }\n };\n var updateTabviewHeight = function (dialogBody, tabview, maxTabHeight) {\n ancestor$2(dialogBody, '[role=\"dialog\"]').each(function (dialog) {\n descendant$1(dialog, '[role=\"tablist\"]').each(function (tablist) {\n maxTabHeight.get().map(function (height) {\n set$2(tabview, 'height', '0');\n set$2(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(function (height) {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n var getTabview = function (dialog) {\n return descendant$1(dialog, '[role=\"tabpanel\"]');\n };\n var setMode = function (allTabs) {\n var smartTabHeight = function () {\n var maxTabHeight = Cell(Optional.none());\n var extraEvents = [\n runOnAttached(function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n set$2(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(function (tabviewComp) {\n var heights = measureHeights(allTabs, tabview, tabviewComp);\n var maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeight.set(maxTabHeightOpt);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$6(tabview, 'visibility');\n showTab(allTabs, comp);\n global$2.requestAnimationFrame(function () {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run(windowResize(), function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run(formResizeEvent, function (comp, _se) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n var oldFocus = active(getRootNode(tabview));\n set$2(tabview, 'visibility', 'hidden');\n var oldHeight = getRaw(tabview, 'height').map(function (h) {\n return parseInt(h, 10);\n });\n remove$6(tabview, 'height');\n remove$6(tabview, 'flex-basis');\n var newHeight = tabview.dom.getBoundingClientRect().height;\n var hasGrown = oldHeight.forall(function (h) {\n return newHeight > h;\n });\n if (hasGrown) {\n maxTabHeight.set(Optional.from(newHeight));\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(function (h) {\n setTabviewHeight(tabview, h);\n });\n }\n remove$6(tabview, 'visibility');\n oldFocus.each(focus$1);\n });\n })\n ];\n var selectFirst = false;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n var naiveTabHeight = function () {\n var extraEvents = [];\n var selectFirst = true;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n return {\n smartTabHeight: smartTabHeight,\n naiveTabHeight: naiveTabHeight\n };\n };\n\n var SendDataToSectionChannel = 'send-data-to-section';\n var SendDataToViewChannel = 'send-data-to-view';\n var renderTabPanel = function (spec, backstage) {\n var storedValue = Cell({});\n var updateDataWithForm = function (form) {\n var formData = Representing.getValue(form);\n var validData = toValidValues(formData).getOr({});\n var currentData = storedValue.get();\n var newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n var setDataOnForm = function (form) {\n var tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n var oldTab = Cell(null);\n var allTabs = map(spec.tabs, function (tab) {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item'],\n innerHtml: backstage.shared.providers.translate(tab.title)\n },\n view: function () {\n return [Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map(tab.items, function (item) {\n return interpretInForm(parts, item, backstage);\n }),\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$1([\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 });\n var tabMode = setMode(allTabs).smartTabHeight;\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: function (section, button, _viewItems) {\n var name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name: 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({\n find: function (comp) {\n return head(TabSection.getViewItems(comp));\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (tsection) {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n },\n setValue: function (tsection, value) {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n }\n }\n })\n ])\n });\n };\n\n var dialogChannel = generate$1('update-dialog');\n var titleChannel = generate$1('update-title');\n var bodyChannel = generate$1('update-body');\n var footerChannel = generate$1('update-footer');\n var bodySendMessageChannel = generate$1('body-send-message');\n\n var renderBody = function (spec, id, backstage, ariaAttrs) {\n var renderComponents = function (incoming) {\n switch (incoming.body.type) {\n case 'tabpanel': {\n return [renderTabPanel(incoming.body, backstage)];\n }\n default: {\n return [renderBodyPanel(incoming.body, backstage)];\n }\n }\n };\n var updateState = function (_comp, incoming) {\n return Optional.some({\n isTabPanel: function () {\n return incoming.body.type === 'tabpanel';\n }\n });\n };\n var ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: __assign(__assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({})), ariaAttrs ? ariaAttributes : {})\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: bodyChannel,\n updateState: updateState,\n renderComponents: renderComponents,\n initialData: spec\n })\n ])\n };\n };\n var renderInlineBody = function (spec, contentId, backstage, ariaAttrs) {\n return renderBody(spec, Optional.some(contentId), backstage, ariaAttrs);\n };\n var renderModalBody = function (spec, backstage) {\n var bodySpec = renderBody(spec, Optional.none(), backstage, false);\n return ModalDialog.parts.body(bodySpec);\n };\n var renderIframeBody = function (spec) {\n var 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 var isTouch = global$8.deviceType.isTouch();\n var hiddenHeader = function (title, close) {\n return {\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n };\n };\n var pClose = function (onClose, providersBackstage) {\n return 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 };\n var pUntitled = function () {\n return ModalDialog.parts.title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n };\n var pBodyMessage = function (message, providersBackstage) {\n return 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$2('

' + providersBackstage.translate(message) + '

') }]\n }]\n });\n };\n var pFooter = function (buttons) {\n return ModalDialog.parts.footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n };\n var pFooterGroup = function (startButtons, endButtons) {\n return [\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 };\n var renderDialog = function (spec) {\n var _a;\n var dialogClass = 'tox-dialog';\n var blockerClass = dialogClass + '-wrap';\n var blockerBackdropClass = blockerClass + '__backdrop';\n var scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: function (comp) {\n spec.onEscape(comp);\n return Optional.some(true);\n },\n useTabstopAt: function (elem) {\n return !isPseudoStop(elem);\n },\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: __assign({ position: 'relative' }, spec.extraStyles)\n },\n components: __spreadArrays([\n spec.header,\n spec.body\n ], spec.footer.toArray()),\n parts: {\n blocker: {\n dom: fromHtml$2('
'),\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(__spreadArrays([\n Focusing.config({}),\n config('dialog-events', spec.dialogEvents.concat([runOnSource(focusin(), function (comp, _se) {\n Keying.focusIn(comp);\n })])),\n config('scroll-lock', [\n runOnAttached(function () {\n add$2(body(), scrollLockClass);\n }),\n runOnDetached(function () {\n remove$4(body(), scrollLockClass);\n })\n ])\n ], spec.extraBehaviours)),\n eventOrder: __assign((_a = {}, _a[execute()] = ['dialog-events'], _a[attachedToDom()] = [\n 'scroll-lock',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'scroll-lock'\n ], _a), spec.eventOrder)\n });\n };\n\n var renderClose = function (providersBackstage) {\n return 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: [{\n dom: {\n tag: 'div',\n classes: ['tox-icon'],\n innerHtml: get$e('close', providersBackstage.icons)\n }\n }],\n action: function (comp) {\n emit(comp, formCancelEvent);\n }\n });\n };\n var renderTitle = function (spec, id, providersBackstage) {\n var renderComponents = function (data) {\n return [text(providersBackstage.translate(data.title))];\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n attributes: __assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({}))\n },\n components: renderComponents(spec),\n behaviours: derive$1([Reflecting.config({\n channel: titleChannel,\n renderComponents: renderComponents\n })])\n };\n };\n var renderDragHandle = function () {\n return { dom: fromHtml$2('
') };\n };\n var renderInlineHeader = function (spec, titleId, providersBackstage) {\n return Container.sketch({\n dom: fromHtml$2('
'),\n components: [\n renderTitle(spec, Optional.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: function (handle) {\n return closest$3(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: function () {\n return [];\n },\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n };\n var renderModalHeader = function (spec, providersBackstage) {\n var pTitle = ModalDialog.parts.title(renderTitle(spec, Optional.none(), providersBackstage));\n var pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n var pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n var components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml$2('
'),\n components: components\n });\n };\n\n var getHeader = function (title, backstage) {\n return renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, backstage.shared.providers);\n };\n var getBusySpec = function (message, bs, providers) {\n return {\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$2('
') }]\n };\n };\n var getEventExtras = function (lazyDialog, providers, extra) {\n return {\n onClose: function () {\n return extra.closeWindow();\n },\n onBlock: function (blockEvent) {\n ModalDialog.setBusy(lazyDialog(), function (_comp, bs) {\n return getBusySpec(blockEvent.message, bs, providers);\n });\n },\n onUnblock: function () {\n ModalDialog.setIdle(lazyDialog());\n }\n };\n };\n var renderModalDialog = function (spec, initialData, dialogEvents, backstage) {\n var _a;\n var updateState = function (_comp, incoming) {\n return Optional.some(incoming);\n };\n return build$1(renderDialog(__assign(__assign({}, spec), {\n lazySink: backstage.shared.getSink,\n extraBehaviours: __spreadArrays([\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: initialData\n }),\n RepresentingConfigs.memory({})\n ], spec.extraBehaviours),\n onEscape: function (comp) {\n emit(comp, formCancelEvent);\n },\n dialogEvents: dialogEvents,\n eventOrder: (_a = {}, _a[receive()] = [\n Reflecting.name(),\n Receiving.name()\n ], _a[attachedToDom()] = [\n 'scroll-lock',\n Reflecting.name(),\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n Reflecting.name(),\n 'scroll-lock'\n ], _a)\n })));\n };\n var mapMenuButtons = function (buttons) {\n var mapItems = function (button) {\n var items = map(button.items, function (item) {\n var cell = Cell(false);\n return __assign(__assign({}, item), { storage: cell });\n });\n return __assign(__assign({}, button), { items: items });\n };\n return map(buttons, function (button) {\n if (button.type === 'menu') {\n return mapItems(button);\n }\n return button;\n });\n };\n var extractCellsToObject = function (buttons) {\n return foldl(buttons, function (acc, button) {\n if (button.type === 'menu') {\n var menuButton = button;\n return foldl(menuButton.items, function (innerAcc, item) {\n innerAcc[item.name] = item.storage;\n return innerAcc;\n }, acc);\n }\n return acc;\n }, {});\n };\n\n var initCommonEvents = function (fireApiEvent, extras) {\n return [\n runWithTarget(focusin(), onFocus$1),\n fireApiEvent(formCloseEvent, function (_api, spec) {\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, function (api, spec, _event, self) {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run(formUnblockEvent, function (_c, _se) {\n return extras.onUnblock();\n }),\n run(formBlockEvent, function (_c, se) {\n return extras.onBlock(se.event);\n })\n ];\n };\n var initUrlDialog = function (getInstanceApi, extras) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialog) {\n f(currentDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [fireApiEvent(formActionEvent, function (api, spec, event) {\n spec.onAction(api, { name: event.name });\n })]);\n };\n var initDialog = function (getInstanceApi, extras, getSink) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialogInit) {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [\n fireApiEvent(formSubmitEvent, function (api, spec) {\n return spec.onSubmit(api);\n }),\n fireApiEvent(formChangeEvent, function (api, spec, event) {\n spec.onChange(api, { name: event.name });\n }),\n fireApiEvent(formActionEvent, function (api, spec, event, component) {\n var focusIn = function () {\n return Keying.focusIn(component);\n };\n var isDisabled = function (focused) {\n return has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(function (val) {\n return val === 'true';\n });\n };\n var rootNode = getRootNode(component.element);\n var current = active(rootNode);\n spec.onAction(api, {\n name: event.name,\n value: event.value\n });\n active(rootNode).fold(focusIn, function (focused) {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(function (cur) {\n return contains$2(focused, cur) && isDisabled(cur);\n })) {\n focusIn();\n } else {\n getSink().toOptional().filter(function (sink) {\n return !contains$2(sink.element, focused);\n }).each(focusIn);\n }\n });\n }),\n fireApiEvent(formTabChangeEvent, function (api, spec, event) {\n spec.onTabChange(api, {\n newTabName: event.name,\n oldTabName: event.oldName\n });\n }),\n runOnDetached(function (component) {\n var api = getInstanceApi();\n Representing.setValue(component, api.getData());\n })\n ]);\n };\n var SilverDialogEvents = {\n initUrlDialog: initUrlDialog,\n initDialog: initDialog\n };\n\n var makeButton = function (button, backstage) {\n return renderFooterButton(button, button.type, backstage);\n };\n var lookup$2 = function (compInSystem, footerButtons, buttonName) {\n return find(footerButtons, function (button) {\n return button.name === buttonName;\n }).bind(function (memButton) {\n return memButton.memento.getOpt(compInSystem);\n });\n };\n var renderComponents = function (_data, state) {\n var footerButtons = state.map(function (s) {\n return s.footerButtons;\n }).getOr([]);\n var buttonGroups = partition(footerButtons, function (button) {\n return button.align === 'start';\n });\n var makeGroup = function (edge, buttons) {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-' + edge]\n },\n components: map(buttons, function (button) {\n return button.memento.asSpec();\n })\n });\n };\n var startButtons = makeGroup('start', buttonGroups.pass);\n var endButtons = makeGroup('end', buttonGroups.fail);\n return [\n startButtons,\n endButtons\n ];\n };\n var renderFooter = function (initSpec, backstage) {\n var updateState = function (_comp, data) {\n var footerButtons = map(data.buttons, function (button) {\n var memButton = record(makeButton(button, backstage));\n return {\n name: button.name,\n align: button.align,\n memento: memButton\n };\n });\n var lookupByName = function (compInSystem, buttonName) {\n return lookup$2(compInSystem, footerButtons, buttonName);\n };\n return Optional.some({\n lookupByName: lookupByName,\n footerButtons: footerButtons\n });\n };\n return {\n dom: fromHtml$2('
'),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: footerChannel,\n initialData: initSpec,\n updateState: updateState,\n renderComponents: renderComponents\n })])\n };\n };\n var renderInlineFooter = function (initSpec, backstage) {\n return renderFooter(initSpec, backstage);\n };\n var renderModalFooter = function (initSpec, backstage) {\n return ModalDialog.parts.footer(renderFooter(initSpec, backstage));\n };\n\n var getCompByName = function (access, name) {\n var root = access.getRoot();\n if (root.getSystem().isConnected()) {\n var form_1 = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form_1, name).fold(function () {\n var footer = access.getFooter();\n var footerState = Reflecting.getState(footer);\n return footerState.get().bind(function (f) {\n return f.lookupByName(form_1, name);\n });\n }, function (comp) {\n return Optional.some(comp);\n });\n } else {\n return Optional.none();\n }\n };\n var validateData = function (access, data) {\n var root = access.getRoot();\n return Reflecting.getState(root).get().map(function (dialogState) {\n return getOrDie(asRaw('data', dialogState.dataValidator, data));\n }).getOr(data);\n };\n var getDialogApi = function (access, doRedial, menuItemStates) {\n var withRoot = function (f) {\n var root = access.getRoot();\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n var getData = function () {\n var root = access.getRoot();\n var valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n var representedValues = Representing.getValue(valueComp);\n var menuItemCurrentState = map$2(menuItemStates, function (cell) {\n return cell.get();\n });\n return __assign(__assign({}, representedValues), menuItemCurrentState);\n };\n var setData = function (newData) {\n withRoot(function (_) {\n var prevData = instanceApi.getData();\n var mergedData = __assign(__assign({}, prevData), newData);\n var newInternalData = validateData(access, mergedData);\n var form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each$1(menuItemStates, function (v, k) {\n if (has(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n var disable = function (name) {\n getCompByName(access, name).each(Disabling.disable);\n };\n var enable = function (name) {\n getCompByName(access, name).each(Disabling.enable);\n };\n var focus = function (name) {\n getCompByName(access, name).each(Focusing.focus);\n };\n var block = function (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(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var showTab = function (name) {\n withRoot(function (_) {\n var body = access.getBody();\n var bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(function (b) {\n return b.isTabPanel();\n })) {\n Composing.getCurrent(body).each(function (tabSection) {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n var redial = function (d) {\n withRoot(function (root) {\n var dialogInit = doRedial(d);\n root.getSystem().broadcastOn([dialogChannel], dialogInit);\n root.getSystem().broadcastOn([titleChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([bodyChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([footerChannel], dialogInit.internalDialog);\n instanceApi.setData(dialogInit.initialData);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var instanceApi = {\n getData: getData,\n setData: setData,\n disable: disable,\n enable: enable,\n focus: focus,\n block: block,\n unblock: unblock,\n showTab: showTab,\n redial: redial,\n close: close\n };\n return instanceApi;\n };\n\n var getDialogSizeClasses = function (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 var renderDialog$1 = function (dialogInit, extra, backstage) {\n var header = getHeader(dialogInit.internalDialog.title, backstage);\n var body = renderModalBody({ body: dialogInit.internalDialog.body }, backstage);\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var footer = renderModalFooter({ buttons: storagedMenuButtons }, backstage);\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, backstage.shared.providers, extra), backstage.shared.getSink);\n var dialogSize = getDialogSizeClasses(dialogInit.internalDialog.size);\n var spec = {\n header: header,\n body: body,\n footer: Optional.some(footer),\n extraClasses: dialogSize,\n extraBehaviours: [],\n extraStyles: {}\n };\n var dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n var modalAccess = function () {\n var getForm = function () {\n var outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n return {\n getRoot: function () {\n return dialog;\n },\n getBody: function () {\n return ModalDialog.getBody(dialog);\n },\n getFooter: function () {\n return ModalDialog.getFooter(dialog);\n },\n getFormWrapper: getForm\n };\n }();\n var instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var renderInlineDialog = function (dialogInit, extra, backstage, ariaAttrs) {\n var _a, _b;\n var dialogLabelId = generate$1('dialog-label');\n var dialogContentId = generate$1('dialog-content');\n var updateState = function (_comp, incoming) {\n return Optional.some(incoming);\n };\n var memHeader = record(renderInlineHeader({\n title: dialogInit.internalDialog.title,\n draggable: true\n }, dialogLabelId, backstage.shared.providers));\n var memBody = record(renderInlineBody({ body: dialogInit.internalDialog.body }, dialogContentId, backstage, ariaAttrs));\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, backstage));\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, {\n onBlock: function (event) {\n Blocking.block(dialog, function (_comp, bs) {\n return getBusySpec(event.message, bs, backstage.shared.providers);\n });\n },\n onUnblock: function () {\n Blocking.unblock(dialog);\n },\n onClose: function () {\n return extra.closeWindow();\n }\n }, backstage.shared.getSink);\n var dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n 'tox-dialog-inline'\n ],\n attributes: (_a = { role: 'dialog' }, _a['aria-labelledby'] = dialogLabelId, _a['aria-describedby'] = '' + dialogContentId, _a)\n },\n eventOrder: (_b = {}, _b[receive()] = [\n Reflecting.name(),\n Receiving.name()\n ], _b[execute()] = ['execute-on-form'], _b[attachedToDom()] = [\n 'reflecting',\n 'execute-on-form'\n ], _b),\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: function (c) {\n emit(c, formCloseEvent);\n return Optional.some(true);\n },\n useTabstopAt: function (elem) {\n return !isPseudoStop(elem) && (name(elem) !== 'button' || get$3(elem, 'disabled') !== 'disabled');\n }\n }),\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), function (comp, _se) {\n Keying.focusIn(comp);\n })])),\n Blocking.config({\n getRoot: function () {\n return Optional.some(dialog);\n }\n }),\n Replacing.config({}),\n RepresentingConfigs.memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n memFooter.asSpec()\n ]\n });\n var instanceApi = getDialogApi({\n getRoot: function () {\n return dialog;\n },\n getFooter: function () {\n return memFooter.get(dialog);\n },\n getBody: function () {\n return memBody.get(dialog);\n },\n getFormWrapper: function () {\n var body = memBody.get(dialog);\n return Composing.getCurrent(body).getOr(body);\n }\n }, extra.redial, objOfCells);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var global$h = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var getUrlDialogApi = function (root) {\n var withRoot = function (f) {\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n var block = function (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(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var sendMessage = function (data) {\n withRoot(function (root) {\n root.getSystem().broadcastOn([bodySendMessageChannel], data);\n });\n };\n return {\n block: block,\n unblock: unblock,\n close: close,\n sendMessage: sendMessage\n };\n };\n\n var SUPPORTED_MESSAGE_ACTIONS = [\n 'insertContent',\n 'setContent',\n 'execCommand',\n 'close',\n 'block',\n 'unblock'\n ];\n var isSupportedMessage = function (data) {\n return isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n };\n var isCustomMessage = function (data) {\n return !isSupportedMessage(data) && isObject(data) && has(data, 'mceAction');\n };\n var handleMessage = function (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 var 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 var renderUrlDialog = function (internalDialog, extra, editor, backstage) {\n var _a;\n var header = getHeader(internalDialog.title, backstage);\n var body = renderIframeBody(internalDialog);\n var footer = internalDialog.buttons.bind(function (buttons) {\n if (buttons.length === 0) {\n return Optional.none();\n } else {\n return Optional.some(renderModalFooter({ buttons: buttons }, backstage));\n }\n });\n var dialogEvents = SilverDialogEvents.initUrlDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, backstage.shared.providers, extra));\n var styles = __assign(__assign({}, internalDialog.height.fold(function () {\n return {};\n }, function (height) {\n return {\n 'height': height + 'px',\n 'max-height': height + 'px'\n };\n })), internalDialog.width.fold(function () {\n return {};\n }, function (width) {\n return {\n 'width': width + 'px',\n 'max-width': width + 'px'\n };\n }));\n var classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n var iframeUri = new global$h(internalDialog.url, { base_uri: new global$h(window.location.href) });\n var iframeDomain = iframeUri.protocol + '://' + iframeUri.host + (iframeUri.port ? ':' + iframeUri.port : '');\n var messageHandlerUnbinder = Cell(Optional.none());\n var extraBehaviours = [\n config('messages', [\n runOnAttached(function () {\n var unbind = bind$3(SugarElement.fromDom(window), 'message', function (e) {\n if (iframeUri.isSameOrigin(new global$h(e.raw.origin))) {\n var 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(Optional.some(unbind));\n }),\n runOnDetached(function () {\n messageHandlerUnbinder.get().each(function (unbinder) {\n return unbinder.unbind();\n });\n })\n ]),\n Receiving.config({\n channels: (_a = {}, _a[bodySendMessageChannel] = {\n onReceive: function (comp, data) {\n descendant$1(comp.element, 'iframe').each(function (iframeEle) {\n var iframeWin = iframeEle.dom.contentWindow;\n iframeWin.postMessage(data, iframeDomain);\n });\n }\n }, _a)\n })\n ];\n var spec = {\n header: header,\n body: body,\n footer: footer,\n extraClasses: classes,\n extraBehaviours: extraBehaviours,\n extraStyles: styles\n };\n var dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);\n var instanceApi = getUrlDialogApi(dialog);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var setup$c = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function () {\n ModalDialog.hide(alertDialog);\n callback();\n };\n var memFooterClose = record(renderFooterButton({\n name: 'close-alert',\n text: 'OK',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'cancel', extras.backstage));\n var titleSpec = pUntitled();\n var closeSpec = pClose(closeDialog, sharedBackstage.providers);\n var alertDialog = build$1(renderDialog({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\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(formCancelEvent, closeDialog)],\n eventOrder: {}\n }));\n ModalDialog.show(alertDialog);\n var footerCloseButton = memFooterClose.get(alertDialog);\n Focusing.focus(footerCloseButton);\n };\n return { open: open };\n };\n\n var setup$d = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function (state) {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n var memFooterYes = record(renderFooterButton({\n name: 'yes',\n text: 'Yes',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'submit', extras.backstage));\n var footerNo = renderFooterButton({\n name: 'no',\n text: 'No',\n primary: false,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'cancel', extras.backstage);\n var titleSpec = pUntitled();\n var closeSpec = pClose(function () {\n return closeDialog(false);\n }, sharedBackstage.providers);\n var confirmDialog = build$1(renderDialog({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\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: function () {\n return closeDialog(false);\n },\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run(formCancelEvent, function () {\n return closeDialog(false);\n }),\n run(formSubmitEvent, function () {\n return closeDialog(true);\n })\n ],\n eventOrder: {}\n }));\n ModalDialog.show(confirmDialog);\n var footerYesButton = memFooterYes.get(confirmDialog);\n Focusing.focus(footerYesButton);\n };\n return { open: open };\n };\n\n var validateData$1 = function (data, validator) {\n return getOrDie(asRaw('data', validator, data));\n };\n var isAlertOrConfirmDialog = function (target) {\n return closest$4(target, '.tox-alert-dialog') || closest$4(target, '.tox-confirm-dialog');\n };\n var inlineAdditionalBehaviours = function (editor, isStickyToolbar, isToolbarLocationTop) {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: function () {\n return Optional.some(box(SugarElement.fromDom(editor.getContentAreaContainer())));\n },\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 var setup$e = function (extras) {\n var backstage = extras.backstage;\n var editor = extras.editor;\n var isStickyToolbar$1 = isStickyToolbar(editor);\n var alertDialog = setup$c(extras);\n var confirmDialog = setup$d(extras);\n var open = function (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 var openUrl = function (config, closeWindow) {\n return openModalUrlDialog(config, closeWindow);\n };\n var openModalUrlDialog = function (config, closeWindow) {\n var factory = function (contents) {\n var dialog = renderUrlDialog(contents, {\n closeWindow: function () {\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 var openModalDialog = function (config, closeWindow) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = internalInitialData;\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var dialog = renderDialog$1(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\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 var openInlineDialog = function (config$1, anchor, closeWindow, ariaAttrs) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = validateData$1(internalInitialData, dataValidator);\n var inlineDialog = value$3();\n var isToolbarLocationTop = backstage.shared.header.isPositionedAtTop();\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var refreshDocking = function () {\n return inlineDialog.on(function (dialog) {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n };\n var dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, backstage, ariaAttrs);\n var inlineDialogComp = build$1(InlineView.sketch(__assign(__assign({\n lazySink: backstage.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: {}\n }, isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} }), {\n inlineBehaviours: derive$1(__spreadArrays([config('window-manager-inline-events', [run(dismissRequested(), function (_comp, _se) {\n emit(dialogUi.dialog, formCancelEvent);\n })])], inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop))),\n isExtraPart: function (_comp, target) {\n return isAlertOrConfirmDialog(target);\n }\n })));\n inlineDialog.set(inlineDialogComp);\n InlineView.showWithin(inlineDialogComp, anchor, premade$1(dialogUi.dialog), 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 var confirm = function (message, callback) {\n confirmDialog.open(message, function (state) {\n callback(state);\n });\n };\n var alert = function (message, callback) {\n alertDialog.open(message, function () {\n callback();\n });\n };\n var close = function (instanceApi) {\n instanceApi.close();\n };\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n close: close,\n confirm: confirm\n };\n };\n\n function Theme () {\n global$1.add('silver', function (editor) {\n var _a = setup$b(editor), uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;\n Autocompleter.register(editor, backstage.shared);\n var windowMgr = setup$e({\n editor: editor,\n backstage: backstage\n });\n return {\n renderUI: renderUI,\n getWindowManagerImpl: constant(windowMgr),\n getNotificationManagerImpl: function () {\n return NotificationManagerImpl(editor, { backstage: backstage }, uiMothership);\n },\n ui: getUi()\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 \"floatingtoolbar\" plugin for usage with module loaders\r\n// Usage:\r\n// CommonJS:\r\n// require('tinymce/plugins/floatingtoolbar')\r\n// ES2015:\r\n// import 'tinymce/plugins/floatingtoolbar'\r\nrequire('./plugin.js');\r\n","// 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');","// 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 \"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 * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var never = constant(false);\n var always = constant(true);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var getCreationDateClasses = function (editor) {\n return editor.getParam('template_cdate_classes', 'cdate');\n };\n var getModificationDateClasses = function (editor) {\n return editor.getParam('template_mdate_classes', 'mdate');\n };\n var getSelectedContentClasses = function (editor) {\n return editor.getParam('template_selected_content_classes', 'selcontent');\n };\n var getPreviewReplaceValues = function (editor) {\n return editor.getParam('template_preview_replace_values');\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '', 'string');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getTemplateReplaceValues = function (editor) {\n return editor.getParam('template_replace_values');\n };\n var getTemplates = function (editor) {\n return editor.getParam('templates');\n };\n var getCdateFormat = function (editor) {\n return editor.getParam('template_cdate_format', editor.translate('%Y-%m-%d'));\n };\n var getMdateFormat = function (editor) {\n return editor.getParam('template_mdate_format', editor.translate('%Y-%m-%d'));\n };\n var getBodyClassFromHash = function (editor) {\n var bodyClass = editor.getParam('body_class', '', 'hash');\n return bodyClass[editor.id] || '';\n };\n var getBodyClass = function (editor) {\n var bodyClass = editor.getParam('body_class', '', 'string');\n if (bodyClass.indexOf('=') === -1) {\n return bodyClass;\n } else {\n return getBodyClassFromHash(editor);\n }\n };\n\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n date = 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\n var createTemplateList = function (editor, callback) {\n return function () {\n var templateList = getTemplates(editor);\n if (typeof templateList === 'function') {\n templateList(callback);\n return;\n }\n if (typeof templateList === 'string') {\n global$2.send({\n url: templateList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else {\n callback(templateList);\n }\n };\n };\n var replaceTemplateValues = function (html, templateValues) {\n global$1.each(templateValues, function (v, k) {\n if (typeof v === 'function') {\n v = v(k);\n }\n html = html.replace(new RegExp('\\\\{\\\\$' + k + '\\\\}', 'g'), v);\n });\n return html;\n };\n var replaceVals = function (editor, e) {\n var dom = editor.dom, vl = getTemplateReplaceValues(editor);\n global$1.each(dom.select('*', e), function (e) {\n global$1.each(vl, function (v, k) {\n if (dom.hasClass(e, k)) {\n if (typeof vl[k] === 'function') {\n vl[k](e);\n }\n }\n });\n });\n };\n var hasClass = function (n, c) {\n return new RegExp('\\\\b' + c + '\\\\b', 'g').test(n.className);\n };\n var insertTemplate = function (editor, _ui, html) {\n var el;\n var dom = editor.dom;\n var sel = editor.selection.getContent();\n html = replaceTemplateValues(html, getTemplateReplaceValues(editor));\n el = dom.create('div', null, html);\n var n = dom.select('.mceTmpl', el);\n if (n && n.length > 0) {\n el = dom.create('div', null);\n el.appendChild(n[0].cloneNode(true));\n }\n global$1.each(dom.select('*', el), function (n) {\n if (hasClass(n, getCreationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = getDateTime(editor, getCdateFormat(editor));\n }\n if (hasClass(n, getModificationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = getDateTime(editor, getMdateFormat(editor));\n }\n if (hasClass(n, getSelectedContentClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = sel;\n }\n });\n replaceVals(editor, el);\n editor.execCommand('mceInsertContent', false, el.innerHTML);\n editor.addVisual();\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertTemplate', curry(insertTemplate, editor));\n };\n\n var setup = function (editor) {\n editor.on('PreProcess', function (o) {\n var dom = editor.dom, dateFormat = getMdateFormat(editor);\n global$1.each(dom.select('div', o.node), function (e) {\n if (dom.hasClass(e, 'mceTmpl')) {\n global$1.each(dom.select('*', e), function (e) {\n if (dom.hasClass(e, getModificationDateClasses(editor).replace(/\\s+/g, '|'))) {\n e.innerHTML = getDateTime(editor, dateFormat);\n }\n });\n replaceVals(editor, e);\n }\n });\n });\n };\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var entitiesAttr = {\n '\"': '"',\n '<': '<',\n '>': '>',\n '&': '&',\n '\\'': '''\n };\n var htmlEscape = function (html) {\n return html.replace(/[\"'<>&]/g, function (match) {\n return get(entitiesAttr, match).getOr(match);\n });\n };\n\n var getPreviewContent = function (editor, html) {\n if (html.indexOf('') === -1) {\n var contentCssEntries_1 = '';\n var contentStyle = getContentStyle(editor);\n var cors_1 = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global$1.each(editor.contentCSS, function (url) {\n contentCssEntries_1 += '';\n });\n if (contentStyle) {\n contentCssEntries_1 += '';\n }\n var bodyClass = getBodyClass(editor);\n var encode = editor.dom.encode;\n var isMetaKeyPressed = global$3.mac ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n var preventClicksOnLinksScript = ' ';\n var directionality = editor.getBody().dir;\n var dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n html = '' + '' + '' + '' + contentCssEntries_1 + preventClicksOnLinksScript + '' + '' + html + '' + '';\n }\n return replaceTemplateValues(html, getPreviewReplaceValues(editor));\n };\n var open = function (editor, templateList) {\n var createTemplates = function () {\n if (!templateList || templateList.length === 0) {\n var 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, function (template, index) {\n var isUrlTemplate = function (t) {\n return t.url !== undefined;\n };\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 var createSelectBoxItems = function (templates) {\n return map(templates, function (t) {\n return {\n text: t.text,\n value: t.text\n };\n });\n };\n var findTemplate = function (templates, templateTitle) {\n return find(templates, function (t) {\n return t.text === templateTitle;\n });\n };\n var loadFailedAlert = function (api) {\n editor.windowManager.alert('Could not load the specified template.', function () {\n return api.focus('template');\n });\n };\n var getTemplateContent = function (t) {\n return new global$4(function (resolve, reject) {\n t.value.url.fold(function () {\n return resolve(t.value.content.getOr(''));\n }, function (url) {\n return global$2.send({\n url: url,\n success: function (html) {\n resolve(html);\n },\n error: function (e) {\n reject(e);\n }\n });\n });\n });\n };\n var onChange = function (templates, updateDialog) {\n return function (api, change) {\n if (change.name === 'template') {\n var newTemplateTitle = api.getData().template;\n findTemplate(templates, newTemplateTitle).each(function (t) {\n api.block('Loading...');\n getTemplateContent(t).then(function (previewHtml) {\n updateDialog(api, t, previewHtml);\n }).catch(function () {\n updateDialog(api, t, '');\n api.disable('save');\n loadFailedAlert(api);\n });\n });\n }\n };\n };\n var onSubmit = function (templates) {\n return function (api) {\n var data = api.getData();\n findTemplate(templates, data.template).each(function (t) {\n getTemplateContent(t).then(function (previewHtml) {\n insertTemplate(editor, false, previewHtml);\n api.close();\n }).catch(function () {\n api.disable('save');\n loadFailedAlert(api);\n });\n });\n };\n };\n var openDialog = function (templates) {\n var selectBoxItems = createSelectBoxItems(templates);\n var buildDialogSpec = function (bodyItems, initialData) {\n return {\n title: 'Insert Template',\n size: 'large',\n body: {\n type: 'panel',\n items: bodyItems\n },\n initialData: 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 };\n var updateDialog = function (dialogApi, template, previewHtml) {\n var content = getPreviewContent(editor, previewHtml);\n var 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 }\n ];\n var initialData = {\n template: template.text,\n preview: content\n };\n dialogApi.unblock();\n dialogApi.redial(buildDialogSpec(bodyItems, initialData));\n dialogApi.focus('template');\n };\n var dialogApi = editor.windowManager.open(buildDialogSpec([], {\n template: '',\n preview: ''\n }));\n dialogApi.block('Loading...');\n getTemplateContent(templates[0]).then(function (previewHtml) {\n updateDialog(dialogApi, templates[0], previewHtml);\n }).catch(function () {\n updateDialog(dialogApi, templates[0], '');\n dialogApi.disable('save');\n loadFailedAlert(dialogApi);\n });\n };\n var optTemplates = createTemplates();\n optTemplates.each(openDialog);\n };\n\n var showDialog = function (editor) {\n return function (templates) {\n open(editor, templates);\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addButton('template', {\n icon: 'template',\n tooltip: 'Insert template',\n onAction: createTemplateList(editor, showDialog(editor))\n });\n editor.ui.registry.addMenuItem('template', {\n icon: 'template',\n text: 'Insert template...',\n onAction: createTemplateList(editor, showDialog(editor))\n });\n };\n\n function Plugin () {\n global.add('template', function (editor) {\n register$1(editor);\n register(editor);\n setup(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var allowHtmlInNamedAnchor = function (editor) {\n return editor.getParam('allow_html_in_named_anchor', false, 'boolean');\n };\n\n var namedAnchorSelector = 'a:not([href])';\n var isEmptyString = function (str) {\n return !str;\n };\n var getIdFromAnchor = function (elm) {\n var id = elm.getAttribute('id') || elm.getAttribute('name');\n return id || '';\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName.toLowerCase() === 'a';\n };\n var isNamedAnchor = function (elm) {\n return isAnchor(elm) && !elm.getAttribute('href') && getIdFromAnchor(elm) !== '';\n };\n var isEmptyNamedAnchor = function (elm) {\n return isNamedAnchor(elm) && !elm.firstChild;\n };\n\n var removeEmptyNamedAnchorsInSelection = function (editor) {\n var dom = editor.dom;\n global$1(dom).walk(editor.selection.getRng(), function (nodes) {\n global$2.each(nodes, function (node) {\n if (isEmptyNamedAnchor(node)) {\n dom.remove(node, false);\n }\n });\n });\n };\n var isValidId = function (id) {\n return /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n };\n var getNamedAnchor = function (editor) {\n return editor.dom.getParent(editor.selection.getStart(), namedAnchorSelector);\n };\n var getId = function (editor) {\n var anchor = getNamedAnchor(editor);\n if (anchor) {\n return getIdFromAnchor(anchor);\n } else {\n return '';\n }\n };\n var createAnchor = function (editor, id) {\n editor.undoManager.transact(function () {\n if (!allowHtmlInNamedAnchor(editor)) {\n editor.selection.collapse(true);\n }\n if (editor.selection.isCollapsed()) {\n editor.insertContent(editor.dom.createHTML('a', { id: id }));\n } else {\n removeEmptyNamedAnchorsInSelection(editor);\n editor.formatter.remove('namedAnchor', null, null, true);\n editor.formatter.apply('namedAnchor', { value: id });\n editor.addVisual();\n }\n });\n };\n var updateAnchor = function (editor, id, anchorElement) {\n anchorElement.removeAttribute('name');\n anchorElement.id = id;\n editor.addVisual();\n editor.undoManager.add();\n };\n var insert = function (editor, id) {\n var anchor = getNamedAnchor(editor);\n if (anchor) {\n updateAnchor(editor, id, anchor);\n } else {\n createAnchor(editor, id);\n }\n editor.focus();\n };\n\n var insertAnchor = function (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 var open = function (editor) {\n var 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: function (api) {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n\n var register = function (editor) {\n editor.addCommand('mceAnchor', function () {\n open(editor);\n });\n };\n\n var isNamedAnchorNode = function (node) {\n return node && isEmptyString(node.attr('href')) && !isEmptyString(node.attr('id') || node.attr('name'));\n };\n var isEmptyNamedAnchorNode = function (node) {\n return isNamedAnchorNode(node) && !node.firstChild;\n };\n var setContentEditable = function (state) {\n return function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (isEmptyNamedAnchorNode(node)) {\n node.attr('contenteditable', state);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n\n var registerFormats = function (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: function (node, _fmt, _itemName) {\n return isNamedAnchor(node);\n }\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n },\n onSetup: function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n }\n });\n };\n\n function Plugin () {\n global.add('anchor', function (editor) {\n setup(editor);\n register(editor);\n register$1(editor);\n editor.on('PreInit', function () {\n registerFormats(editor);\n });\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireInsertCustomChar = function (editor, chr) {\n return editor.fire('insertCustomChar', { chr: chr });\n };\n\n var insertChar = function (editor, chr) {\n var evtChr = fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isArray = isType('array');\n\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getCharMap = function (editor) {\n return editor.getParam('charmap');\n };\n var getCharMapAppend = function (editor) {\n return editor.getParam('charmap_append');\n };\n\n var isArray$1 = global$1.isArray;\n var UserDefined = 'User Defined';\n var getDefaultCharMap = function () {\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 var charmapFilter = function (charmap) {\n return global$1.grep(charmap, function (item) {\n return isArray$1(item) && item.length === 2;\n });\n };\n var getCharsFromSetting = function (settingValue) {\n if (isArray$1(settingValue)) {\n return [].concat(charmapFilter(settingValue));\n }\n if (typeof settingValue === 'function') {\n return settingValue();\n }\n return [];\n };\n var extendCharMap = function (editor, charmap) {\n var userCharMap = getCharMap(editor);\n if (userCharMap) {\n charmap = [{\n name: UserDefined,\n characters: getCharsFromSetting(userCharMap)\n }];\n }\n var userCharMapAppend = getCharMapAppend(editor);\n if (userCharMapAppend) {\n var userDefinedGroup = global$1.grep(charmap, function (cg) {\n return cg.name === UserDefined;\n });\n if (userDefinedGroup.length) {\n userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend));\n return charmap;\n }\n return [].concat(charmap).concat({\n name: UserDefined,\n characters: getCharsFromSetting(userCharMapAppend)\n });\n }\n return charmap;\n };\n var getCharMap$1 = function (editor) {\n var groups = extendCharMap(editor, getDefaultCharMap());\n return groups.length > 1 ? [{\n name: 'All',\n characters: bind(groups, function (g) {\n return g.characters;\n })\n }].concat(groups) : groups;\n };\n\n var get = function (editor) {\n var getCharMap = function () {\n return getCharMap$1(editor);\n };\n var insertChar$1 = function (chr) {\n insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap,\n insertChar: insertChar$1\n };\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var nativeFromCodePoint = String.fromCodePoint;\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var fromCodePoint = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (nativeFromCodePoint) {\n return nativeFromCodePoint.apply(void 0, codePoints);\n } else {\n var codeUnits = [];\n var codeLen = 0;\n var result = '';\n for (var index = 0, len = codePoints.length; index !== len; ++index) {\n var codePoint = +codePoints[index];\n if (!(codePoint < 1114111 && codePoint >>> 0 === codePoint)) {\n throw RangeError('Invalid code point: ' + codePoint);\n }\n if (codePoint <= 65535) {\n codeLen = codeUnits.push(codePoint);\n } else {\n codePoint -= 65536;\n codeLen = codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320);\n }\n if (codeLen >= 16383) {\n result += String.fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result + String.fromCharCode.apply(null, codeUnits);\n }\n };\n\n var charMatches = function (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 var scan = function (group, pattern) {\n var matches = [];\n var lowerCasePattern = pattern.toLowerCase();\n each(group.characters, function (g) {\n if (charMatches(g[0], g[1], lowerCasePattern)) {\n matches.push(g);\n }\n });\n return map(matches, function (m) {\n return {\n text: m[1],\n value: fromCodePoint(m[0]),\n icon: fromCodePoint(m[0])\n };\n });\n };\n\n var patternName = 'pattern';\n var open = function (editor, charMap) {\n var makeGroupItems = function () {\n return [\n {\n label: 'Search',\n type: 'input',\n name: patternName\n },\n {\n type: 'collection',\n name: 'results'\n }\n ];\n };\n var makeTabs = function () {\n return map(charMap, function (charGroup) {\n return {\n title: charGroup.name,\n name: charGroup.name,\n items: makeGroupItems()\n };\n });\n };\n var makePanel = function () {\n return {\n type: 'panel',\n items: makeGroupItems()\n };\n };\n var makeTabPanel = function () {\n return {\n type: 'tabpanel',\n tabs: makeTabs()\n };\n };\n var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n var scanAndSet = function (dialogApi, pattern) {\n find(charMap, function (group) {\n return group.name === currentTab.get();\n }).each(function (f) {\n var items = scan(f, pattern);\n dialogApi.setData({ results: items });\n });\n };\n var SEARCH_DELAY = 40;\n var updateFilter = last(function (dialogApi) {\n var pattern = dialogApi.getData().pattern;\n scanAndSet(dialogApi, pattern);\n }, SEARCH_DELAY);\n var body = charMap.length === 1 ? makePanel() : makeTabPanel();\n var initialData = {\n pattern: '',\n results: scan(charMap[0], '')\n };\n var bridgeSpec = {\n title: 'Special Character',\n size: 'normal',\n body: body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: initialData,\n onAction: function (api, details) {\n if (details.name === 'results') {\n insertChar(editor, details.value);\n api.close();\n }\n },\n onTabChange: function (dialogApi, details) {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: function (dialogApi, changeData) {\n if (changeData.name === patternName) {\n updateFilter.throttle(dialogApi);\n }\n }\n };\n var dialogApi = editor.windowManager.open(bridgeSpec);\n dialogApi.focus(patternName);\n };\n\n var register = function (editor, charMap) {\n editor.addCommand('mceShowCharmap', function () {\n open(editor, charMap);\n });\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var init = function (editor, all) {\n editor.ui.registry.addAutocompleter('charmap', {\n ch: ':',\n columns: 'auto',\n minChars: 2,\n fetch: function (pattern, _maxResults) {\n return new global$2(function (resolve, _reject) {\n resolve(scan(all, pattern));\n });\n },\n onAction: function (autocompleteApi, rng, value) {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('charmap', {\n icon: 'insert-character',\n tooltip: 'Special character',\n onAction: function () {\n return editor.execCommand('mceShowCharmap');\n }\n });\n editor.ui.registry.addMenuItem('charmap', {\n icon: 'insert-character',\n text: 'Special character...',\n onAction: function () {\n return editor.execCommand('mceShowCharmap');\n }\n });\n };\n\n function Plugin () {\n global.add('charmap', function (editor) {\n var charMap = getCharMap$1(editor);\n register(editor, charMap);\n register$1(editor);\n init(editor, charMap[0]);\n return get(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * cssfilter\n *\n * @author 老雷\n */\n\nvar DEFAULT = require('./default');\nvar FilterCSS = require('./css');\n\n\n/**\n * XSS过滤\n *\n * @param {String} css 要过滤的CSS代码\n * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr\n * @return {String}\n */\nfunction filterCSS (html, options) {\n var xss = new FilterCSS(options);\n return xss.process(html);\n}\n\n\n// 输出\nexports = module.exports = filterCSS;\nexports.FilterCSS = FilterCSS;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n// 在浏览器端使用\nif (typeof window !== 'undefined') {\n window.filterCSS = module.exports;\n}\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var 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 var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n var last = function (xs) {\n return get(xs, xs.length - 1);\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (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: function (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: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (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: 'OSX',\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 var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var ELEMENT = 1;\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var is = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var eq = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains$1 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n\n var rawSet = function (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 var setAll = function (element, attrs) {\n var dom = element.dom;\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var clone = function (element) {\n return foldl(element.dom.attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom.childNodes.length - 1);\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var append = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var remove = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = SugarElement.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var mutate = function (original, tag) {\n var nu = shallowAs(original, tag);\n before(original, nu);\n var children$1 = children(original);\n append$1(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var matchNodeName = function (name) {\n return function (node) {\n return node && node.nodeName.toLowerCase() === name;\n };\n };\n var matchNodeNames = function (regex) {\n return function (node) {\n return node && regex.test(node.nodeName);\n };\n };\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n var isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n var isOlNode = matchNodeName('ol');\n var isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n var isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n var isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n var isBr = matchNodeName('br');\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var 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 var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var getForcedRootBlock = function (editor) {\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var blockName = getForcedRootBlock(editor);\n var node, textBlock, hasContentNode;\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === blockName.toUpperCase()) {\n dom.setAttribs(textBlock, getForcedRootBlockAttrs(editor));\n }\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var 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 (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!blockName) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var DOM = global$4.DOM;\n var splitList = function (editor, ul, li) {\n var removeAndKeepBookmarks = function (targetNode) {\n global$5.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM.remove(targetNode);\n };\n var bookmarks = DOM.select('span[data-mce-type=\"bookmark\"]', ul);\n var newBlock = createTextBlock(editor, li);\n var tmpRng = DOM.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n var fragment = tmpRng.extractContents();\n for (var node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM.insertAfter(fragment, ul);\n }\n DOM.insertAfter(newBlock, ul);\n if (isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM.remove(li);\n if (isEmpty(editor.dom, ul)) {\n DOM.remove(ul);\n }\n };\n\n var outdentDlItem = function (editor, item) {\n if (is$1(item, 'dd')) {\n mutate(item, 'dt');\n } else if (is$1(item, 'dt')) {\n parent(item).each(function (dl) {\n return splitList(editor, dl.dom, item.dom);\n });\n }\n };\n var indentDlItem = function (item) {\n if (is$1(item, 'dt')) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each(dlItems, indentDlItem);\n } else {\n each(dlItems, function (item) {\n return outdentDlItem(editor, item);\n });\n }\n };\n\n var getNormalizedPoint = function (container, offset) {\n if (isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.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: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var getParentList = function (editor, node) {\n var selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n return isListNode(elm);\n });\n };\n var getSelectedSubLists = function (editor) {\n var parentList = getParentList(editor);\n var selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return global$5.grep(selectedBlocks, function (elm) {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$5.map(elms, function (elm) {\n var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return global$6.unique(listItemsElms);\n };\n var getSelectedListItems = function (editor) {\n var selectedBlocks = editor.selection.getSelectedBlocks();\n return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {\n return isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n return root;\n };\n var findLastParentListNode = function (editor, elm) {\n var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n return last(parentLists);\n };\n var getSelectedLists = function (editor) {\n var firstList = findLastParentListNode(editor, editor.selection.getStart());\n var subsequentLists = filter(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n var getSelectedListRoots = function (editor) {\n var selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n var getUniqueListRoots = function (editor, lists) {\n var listRoots = map(lists, function (list) {\n return findLastParentListNode(editor, list).getOr(list);\n });\n return global$6.unique(listRoots);\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n var fireListEvent = function (editor, action, element) {\n return editor.fire('ListMutation', {\n action: action,\n element: element\n });\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (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 var set = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n\n var joinSegment = function (parent, child) {\n append(parent.item, child.list);\n };\n var joinSegments = function (segments) {\n for (var i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n var appendSegments = function (head$1, tail) {\n lift2(last(head$1), head(tail), joinSegment);\n };\n var createSegment = function (scope, listType) {\n var segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append(segment.list, segment.item);\n return segment;\n };\n var createSegments = function (scope, entry, size) {\n var segments = [];\n for (var i = 0; i < size; i++) {\n segments.push(createSegment(scope, entry.listType));\n }\n return segments;\n };\n var populateSegments = function (segments, entry) {\n for (var i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(function (segment) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n append$1(segment.item, entry.content);\n });\n };\n var normalizeSegment = function (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 var createItem = function (scope, attr, content) {\n var item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append$1(item, content);\n return item;\n };\n var appendItem = function (segment, item) {\n append(segment.list, item);\n segment.item = item;\n };\n var writeShallow = function (scope, cast, entry) {\n var newCast = cast.slice(0, entry.depth);\n last(newCast).each(function (segment) {\n var item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n });\n return newCast;\n };\n var writeDeep = function (scope, cast, entry) {\n var 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 var composeList = function (scope, entries) {\n var cast = foldl(entries, function (cast, entry) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n }, []);\n return head(cast).map(function (segment) {\n return segment.list;\n });\n };\n\n var isList = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList).getOr(false);\n };\n\n var isIndented = function (entry) {\n return entry.depth > 0;\n };\n var isSelected = function (entry) {\n return entry.isSelected;\n };\n var cloneItemContent = function (li) {\n var children$1 = children(li);\n var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n var createEntry = function (li, depth, isSelected) {\n return parent(li).filter(isElement).map(function (list) {\n return {\n depth: depth,\n dirty: false,\n isSelected: isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone(li),\n listAttributes: clone(list),\n listType: name(list)\n };\n });\n };\n\n var indentEntry = function (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 var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = __assign({}, source.listAttributes);\n };\n var cleanListProperties = function (entry) {\n entry.listAttributes = filter$1(entry.listAttributes, function (_value, key) {\n return key !== 'start';\n });\n };\n var closestSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n var matches = function (entry) {\n return entry.depth === depth && !entry.dirty;\n };\n var until = function (entry) {\n return entry.depth < depth;\n };\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(function () {\n return findUntil(entries.slice(start + 1), matches, until);\n });\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n closestSiblingEntry(entries, i).fold(function () {\n if (entry.dirty) {\n cleanListProperties(entry);\n }\n }, function (matchingEntry) {\n return cloneListProperties(entry, matchingEntry);\n });\n });\n return entries;\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var outdentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, function (entry) {\n var content = fromElements(entry.content);\n return SugarElement.fromDom(createTextBlock(editor, content.dom));\n });\n };\n var indentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).map(isIndented).getOr(false);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each(filter(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {\n return {\n start: start,\n end: end\n };\n });\n };\n var listIndentation = function (editor, lists, indentation) {\n var entrySets = parseLists(lists, getItemSelection(editor));\n each(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n var composedLists = composeEntries(editor, entrySet.entries);\n each(composedLists, function (composedList) {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before$1(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(getSelectedListRoots(editor), SugarElement.fromDom);\n var dlItems = map(getSelectedDlItems(editor), SugarElement.fromDom);\n var isHandled = false;\n if (lists.length || dlItems.length) {\n var 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 var indentListSelection = function (editor) {\n return selectionIndentation(editor, 'Indent');\n };\n var outdentListSelection = function (editor) {\n return selectionIndentation(editor, 'Outdent');\n };\n var flattenListSelection = function (editor) {\n return selectionIndentation(editor, 'Flatten');\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var DOM$1 = global$4.DOM;\n var createBookmark = function (rng) {\n var bookmark = {};\n var setupEndPoint = function (start) {\n var offsetNode, container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n 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 var resolveBookmark = function (bookmark) {\n var restoreEndPoint = function (start) {\n var container, offset, node;\n var nodeIndex = function (container) {\n var node = container.parentNode.firstChild, idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (container.nodeType === 1) {\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 var 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 var listToggleActionFromListName = function (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 var isCustomList = function (list) {\n return /\\btox\\-/.test(list.className);\n };\n var listState = function (editor, listName, activate) {\n var nodeChangeHandler = function (e) {\n var inList = findUntil(e.parents, isListNode, isTableCellNode).filter(function (list) {\n return list.nodeName === listName && !isCustomList(list);\n }).isSome();\n activate(inList);\n };\n var parents = editor.dom.getParents(editor.selection.getNode());\n nodeChangeHandler({ parents: parents });\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n\n var updateListStyle = function (dom, el, detail) {\n var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n var setAttribs = function (elm, attrs) {\n global$5.each(attrs, function (value, key) {\n elm.setAttribute(key, value);\n });\n };\n var updateListAttrs = function (dom, el, detail) {\n setAttribs(el, detail['list-attributes']);\n global$5.each(dom.select('li', el), function (li) {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n var updateListWithDetails = function (dom, el, detail) {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n var removeStyles = function (dom, element, styles) {\n global$5.each(styles, function (style) {\n var _a;\n return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n });\n };\n var getEndPointNode = function (editor, rng, start, root) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\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 if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n return container;\n }\n container = container.parentNode;\n }\n return container;\n };\n var getSelectedTextBlocks = function (editor, rng, root) {\n var textBlocks = [], dom = editor.dom;\n var startNode = getEndPointNode(editor, rng, true, root);\n var endNode = getEndPointNode(editor, rng, false, root);\n var block;\n var siblings = [];\n for (var node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$5.each(siblings, function (node) {\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 var nextSibling = node.nextSibling;\n if (global$7.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 node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng();\n var listItemName = 'LI';\n var root = getClosestListRootElm(editor, editor.selection.getStart(true));\n var 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 var bookmark = createBookmark(rng);\n var selectedTextBlocks = getSelectedTextBlocks(editor, rng, root);\n global$5.each(selectedTextBlocks, function (block) {\n var listBlock;\n var sibling = block.previousSibling;\n var 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 block.parentNode.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 var isValidLists = function (list1, list2) {\n return list1 && list2 && isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList = function (editor, list, listName, detail) {\n if (list.nodeName !== listName) {\n var 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 var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n var parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n var bookmark = createBookmark(editor.selection.getRng(true));\n var allLists = parentIsList ? __spreadArrays([parentList], lists) : lists;\n global$5.each(allLists, function (elm) {\n updateList(editor, elm, listName, detail);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n var hasListStyleDetail = function (detail) {\n return 'list-style-type' in detail;\n };\n var toggleSingleList = function (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 var bookmark = createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n var 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 var toggleList = function (editor, listName, detail) {\n var parentList = getParentList(editor);\n var selectedSubLists = getSelectedSubLists(editor);\n detail = 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 var DOM$2 = global$4.DOM;\n var normalizeList = function (dom, ul) {\n var sibling;\n var parentNode = ul.parentNode;\n if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n if (isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n normalizeList(dom, ul);\n });\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n if (isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n var nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n var walker = new global$2(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n while (node = walker[isForward ? 'next' : 'prev2']()) {\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 };\n var hasOnlyOneBlockChild = function (dom, elm) {\n var childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n var unwrapSingleBlockChild = function (dom, elm) {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n var moveChildren = function (dom, fromElm, toElm) {\n var node;\n var targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var listNode;\n var 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 var node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n var ul = li.parentNode;\n if (ul === editor.getBody() && isEmpty(dom, ul)) {\n return true;\n }\n var rng_1 = normalizeRange(selection.getRng());\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng_1, isForward, root), 'LI', root);\n if (otherLi_1 && otherLi_1 !== li) {\n editor.undoManager.transact(function () {\n if (isForward) {\n mergeForward(editor, rng_1, otherLi_1, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng_1, li, otherLi_1);\n }\n }\n });\n return true;\n } else if (!otherLi_1) {\n if (!isForward && rng_1.startOffset === 0 && rng_1.endOffset === 0) {\n editor.undoManager.transact(function () {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var 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 var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = normalizeRange(editor.selection.getRng());\n var otherLi_2 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_2) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, otherLi_2.parentNode);\n editor.selection.select(otherLi_2, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup = function (editor) {\n editor.on('keydown', function (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 var get$1 = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n backspaceDelete(editor, isForward);\n }\n };\n };\n\n var open = function (editor) {\n var dom = editor.dom;\n var currentList = getParentList(editor);\n if (!isOlNode(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: { start: dom.getAttrib(currentList, 'start') || '1' },\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: function (api) {\n var data = api.getData();\n editor.undoManager.transact(function () {\n dom.setAttrib(getParentList(editor), 'start', data.start === '1' ? '' : data.start);\n });\n api.close();\n }\n });\n };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var 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', function (ui, detail) {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addCommand('mceListProps', function () {\n open(editor);\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 var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(function () {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n var setup$1 = function (editor) {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup(editor);\n };\n\n var register$1 = function (editor) {\n var exec = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\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: function (api) {\n return listState(editor, 'OL', api.setActive);\n }\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: function (api) {\n return listState(editor, 'UL', api.setActive);\n }\n });\n }\n };\n\n var register$2 = function (editor) {\n var listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: function () {\n return open(editor);\n },\n onSetup: function (api) {\n return listState(editor, 'OL', function (active) {\n return api.setDisabled(!active);\n });\n }\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: function (node) {\n var parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n function Plugin () {\n global.add('lists', function (editor) {\n if (editor.hasPlugin('rtc', true) === false) {\n setup$1(editor);\n register(editor);\n }\n register$1(editor);\n register$2(editor);\n return get$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getAutoLinkPattern = function (editor) {\n return editor.getParam('autolink_pattern', /^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@(?!.*@))(.+)$/i);\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target', false);\n };\n var getDefaultLinkProtocol = function (editor) {\n return editor.getParam('link_default_protocol', 'http', 'string');\n };\n\n var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) {\n return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160;\n };\n var handleEclipse = function (editor) {\n parseCurrentLine(editor, -1, '(');\n };\n var handleSpacebar = function (editor) {\n parseCurrentLine(editor, 0, '');\n };\n var handleEnter = function (editor) {\n parseCurrentLine(editor, -1, '');\n };\n var scopeIndex = function (container, index) {\n if (index < 0) {\n index = 0;\n }\n if (container.nodeType === 3) {\n var len = container.data.length;\n if (index > len) {\n index = len;\n }\n }\n return index;\n };\n var setStart = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setStart(container, scopeIndex(container, offset));\n } else {\n rng.setStartBefore(container);\n }\n };\n var setEnd = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setEnd(container, scopeIndex(container, offset));\n } else {\n rng.setEndAfter(container);\n }\n };\n var parseCurrentLine = function (editor, endOffset, delimiter) {\n var end, endContainer, bookmark, text, prev, len, rngText;\n var autoLinkPattern = getAutoLinkPattern(editor);\n var defaultLinkTarget = getDefaultLinkTarget(editor);\n if (editor.selection.getNode().tagName === 'A') {\n return;\n }\n var rng = editor.selection.getRng().cloneRange();\n if (rng.startOffset < 5) {\n prev = rng.endContainer.previousSibling;\n if (!prev) {\n if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) {\n return;\n }\n prev = rng.endContainer.firstChild.nextSibling;\n }\n len = prev.length;\n setStart(rng, prev, len);\n setEnd(rng, prev, len);\n if (rng.endOffset < 5) {\n return;\n }\n end = rng.endOffset;\n endContainer = prev;\n } else {\n endContainer = rng.endContainer;\n if (endContainer.nodeType !== 3 && endContainer.firstChild) {\n while (endContainer.nodeType !== 3 && endContainer.firstChild) {\n endContainer = endContainer.firstChild;\n }\n if (endContainer.nodeType === 3) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, endContainer.nodeValue.length);\n }\n }\n if (rng.endOffset === 1) {\n end = 2;\n } else {\n end = rng.endOffset - 1 - endOffset;\n }\n }\n var start = end;\n do {\n setStart(rng, endContainer, end >= 2 ? end - 2 : 0);\n setEnd(rng, endContainer, end >= 1 ? end - 1 : 0);\n end -= 1;\n rngText = rng.toString();\n } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter);\n if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n end += 1;\n } else if (rng.startOffset === 0) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, start);\n } else {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n }\n text = rng.toString();\n if (text.charAt(text.length - 1) === '.') {\n setEnd(rng, endContainer, start - 1);\n }\n text = rng.toString().trim();\n var matches = text.match(autoLinkPattern);\n var protocol = getDefaultLinkProtocol(editor);\n if (matches) {\n if (matches[1] === 'www.') {\n matches[1] = protocol + '://www.';\n } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {\n matches[1] = 'mailto:' + matches[1];\n }\n bookmark = editor.selection.getBookmark();\n editor.selection.setRng(rng);\n editor.execCommand('createlink', false, matches[1] + matches[2]);\n if (defaultLinkTarget !== false) {\n editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget);\n }\n editor.selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n }\n };\n var setup = function (editor) {\n var autoUrlDetectState;\n editor.on('keydown', function (e) {\n if (e.keyCode === 13) {\n return handleEnter(editor);\n }\n });\n if (global$1.browser.isIE()) {\n editor.on('focus', function () {\n if (!autoUrlDetectState) {\n autoUrlDetectState = true;\n try {\n editor.execCommand('AutoUrlDetect', false, true);\n } catch (ex) {\n }\n }\n });\n return;\n }\n editor.on('keypress', function (e) {\n if (e.keyCode === 41) {\n return handleEclipse(editor);\n }\n });\n editor.on('keyup', function (e) {\n if (e.keyCode === 32) {\n return handleSpacebar(editor);\n }\n });\n };\n\n function Plugin () {\n global.add('autolink', function (editor) {\n setup(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var 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 var punctuation = constant(punctuationStr);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var punctuation$1 = punctuation;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var 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 var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n\n var hasOwnProperty = Object.hasOwnProperty;\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isText = isType$1(TEXT);\n\n var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var spot = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var leaf = function (element, offset) {\n var cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var append = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api = NodeValue(isText, 'text');\n var get = function (element) {\n return api.get(element);\n };\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var isSimpleBoundary = function (dom, node) {\n return dom.isBlock(node) || has(dom.schema.getShortEndedElements(), node.nodeName);\n };\n var isContentEditableFalse = function (dom, node) {\n return dom.getContentEditable(node) === 'false';\n };\n var isContentEditableTrueInCef = function (dom, node) {\n return dom.getContentEditable(node) === 'true' && dom.getContentEditableParent(node.parentNode) === 'false';\n };\n var isHidden = function (dom, node) {\n return !dom.isBlock(node) && has(dom.schema.getWhiteSpaceElements(), node.nodeName);\n };\n var isBoundary = function (dom, node) {\n return isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);\n };\n var isText$1 = function (node) {\n return node.nodeType === 3;\n };\n var nuSection = function () {\n return {\n sOffset: 0,\n fOffset: 0,\n elements: []\n };\n };\n var toLeaf = function (node, offset) {\n return leaf(SugarElement.fromDom(node), offset);\n };\n var walk = function (dom, walkerFn, startNode, callbacks, endNode, skipStart) {\n if (skipStart === void 0) {\n skipStart = true;\n }\n var next = skipStart ? walkerFn(false) : startNode;\n while (next) {\n var isCefNode = isContentEditableFalse(dom, next);\n if (isCefNode || isHidden(dom, next)) {\n var 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$1(next)) {\n callbacks.text(next);\n }\n if (next === endNode) {\n break;\n } else {\n next = walkerFn(false);\n }\n }\n };\n var collectTextToBoundary = function (dom, section, node, rootNode, forwards) {\n if (isBoundary(dom, node)) {\n return;\n }\n var rootBlock = dom.getParent(rootNode, dom.isBlock);\n var walker = new global$2(node, rootBlock);\n var walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);\n walk(dom, walkerFn, node, {\n boundary: always,\n cef: always,\n text: function (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 var collect = function (dom, rootNode, startNode, endNode, callbacks, skipStart) {\n if (skipStart === void 0) {\n skipStart = true;\n }\n var walker = new global$2(startNode, rootNode);\n var sections = [];\n var current = nuSection();\n collectTextToBoundary(dom, current, startNode, rootNode, false);\n var finishSection = function () {\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: function (node) {\n finishSection();\n if (callbacks) {\n sections.push.apply(sections, callbacks.cef(node));\n }\n return false;\n },\n text: function (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 var collectRangeSections = function (dom, rng) {\n var start = toLeaf(rng.startContainer, rng.startOffset);\n var startNode = start.element.dom;\n var end = toLeaf(rng.endContainer, rng.endOffset);\n var endNode = end.element.dom;\n return collect(dom, rng.commonAncestorContainer, startNode, endNode, {\n text: function (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: function (node) {\n var sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), function (e) {\n var ceTrueNode = e.dom;\n return collect(dom, ceTrueNode, ceTrueNode);\n });\n return sort(sections, function (a, b) {\n return documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1;\n });\n }\n }, false);\n };\n var fromRng = function (dom, rng) {\n return rng.collapsed ? [] : collectRangeSections(dom, rng);\n };\n var fromNode = function (dom, node) {\n var rng = dom.createRng();\n rng.selectNode(node);\n return fromRng(dom, rng);\n };\n var fromNodes = function (dom, nodes) {\n return bind(nodes, function (node) {\n return fromNode(dom, node);\n });\n };\n\n var find = function (text, pattern, start, finish) {\n if (start === void 0) {\n start = 0;\n }\n if (finish === void 0) {\n finish = text.length;\n }\n var regex = pattern.regex;\n regex.lastIndex = start;\n var results = [];\n var match;\n while (match = regex.exec(text)) {\n var matchedText = match[pattern.matchIndex];\n var matchStart = match.index + match[0].indexOf(matchedText);\n var 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 var extract = function (elements, matches) {\n var nodePositions = foldl(elements, function (acc, element) {\n var content = get(element);\n var start = acc.last;\n var finish = start + content.length;\n var positions = bind(matches, function (match, matchIdx) {\n if (match.start < finish && match.finish > start) {\n return [{\n element: 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, function (position) {\n return position.matchId;\n });\n };\n\n var find$1 = function (pattern, sections) {\n return bind(sections, function (section) {\n var elements = section.elements;\n var content = map(elements, get).join('');\n var positions = find(content, pattern, section.sOffset, content.length - section.fOffset);\n return extract(elements, positions);\n });\n };\n var mark = function (matches, replacementNode) {\n eachr(matches, function (match, idx) {\n eachr(match, function (pos) {\n var wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));\n set(wrapper, 'data-mce-index', idx);\n var 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 var matchNode = textNode.splitText(pos.start);\n wrap(SugarElement.fromDom(matchNode), wrapper);\n }\n });\n });\n };\n var findAndMark = function (dom, pattern, node, replacementNode) {\n var textSections = fromNode(dom, node);\n var matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n return matches.length;\n };\n var findAndMarkInSelection = function (dom, pattern, selection, replacementNode) {\n var bookmark = selection.getBookmark();\n var nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n var textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());\n var matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n selection.moveToBookmark(bookmark);\n return matches.length;\n };\n\n var getElmIndex = function (elm) {\n var value = elm.getAttribute('data-mce-index');\n if (typeof value === 'number') {\n return '' + value;\n }\n return value;\n };\n var markAllMatches = function (editor, currentSearchState, pattern, inSelection) {\n var marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n var 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 var unwrap = function (node) {\n var parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n node.parentNode.removeChild(node);\n };\n var findSpansByIndex = function (editor, index) {\n var spans = [];\n var nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (var i = 0; i < nodes.length; i++) {\n var 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 var moveSelection = function (editor, currentSearchState, forward) {\n var searchState = currentSearchState.get();\n var testIndex = searchState.index;\n var dom = editor.dom;\n forward = forward !== false;\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 var 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 var removeNode = function (dom, node) {\n var parent = node.parentNode;\n dom.remove(node);\n if (dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n var escapeSearchText = function (text, wholeWord) {\n var escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n\\\\uFEFF]');\n var wordRegex = '(' + escapedText + ')';\n return wholeWord ? '(?:^|\\\\s|' + punctuation$1() + ')' + wordRegex + ('(?=$|\\\\s|' + punctuation$1() + ')') : wordRegex;\n };\n var find$2 = function (editor, currentSearchState, text, matchCase, wholeWord, inSelection) {\n var escapedText = escapeSearchText(text, wholeWord);\n var pattern = {\n regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),\n matchIndex: 1\n };\n var count = markAllMatches(editor, currentSearchState, pattern, inSelection);\n if (count) {\n var newIndex = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n index: newIndex,\n count: count,\n text: text,\n matchCase: matchCase,\n wholeWord: wholeWord,\n inSelection: inSelection\n });\n }\n return count;\n };\n var next = function (editor, currentSearchState) {\n var index = moveSelection(editor, currentSearchState, true);\n currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));\n };\n var prev = function (editor, currentSearchState) {\n var index = moveSelection(editor, currentSearchState, false);\n currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));\n };\n var isMatchSpan = function (node) {\n var matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n var replace = function (editor, currentSearchState, text, forward, all) {\n var searchState = currentSearchState.get();\n var currentIndex = searchState.index;\n var currentMatchIndex, nextIndex = currentIndex;\n forward = forward !== false;\n var node = editor.getBody();\n var nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (var i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n var matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === searchState.index) {\n if (text.length) {\n nodes[i].firstChild.nodeValue = 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(__assign(__assign({}, 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 var done = function (editor, currentSearchState, keepEditorSelection) {\n var i, startContainer, endContainer;\n var searchState = currentSearchState.get();\n var nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (i = 0; i < nodes.length; i++) {\n var 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(__assign(__assign({}, searchState), {\n index: -1,\n count: 0,\n text: ''\n }));\n if (startContainer && endContainer) {\n var 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 }\n };\n var hasNext = function (editor, currentSearchState) {\n return currentSearchState.get().count > 1;\n };\n var hasPrev = function (editor, currentSearchState) {\n return currentSearchState.get().count > 1;\n };\n\n var get$1 = function (editor, currentState) {\n var done$1 = function (keepEditorSelection) {\n return done(editor, currentState, keepEditorSelection);\n };\n var find = function (text, matchCase, wholeWord, inSelection) {\n if (inSelection === void 0) {\n inSelection = false;\n }\n return find$2(editor, currentState, text, matchCase, wholeWord, inSelection);\n };\n var next$1 = function () {\n return next(editor, currentState);\n };\n var prev$1 = function () {\n return prev(editor, currentState);\n };\n var replace$1 = function (text, forward, all) {\n return replace(editor, currentState, text, forward, all);\n };\n return {\n done: done$1,\n find: find,\n next: next$1,\n prev: prev$1,\n replace: replace$1\n };\n };\n\n var value = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var open = function (editor, currentSearchState) {\n var dialogApi = value();\n editor.undoManager.add();\n var selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n var updateButtonStates = function (api) {\n var updateNext = hasNext(editor, currentSearchState) ? api.enable : api.disable;\n updateNext('next');\n var updatePrev = hasPrev(editor, currentSearchState) ? api.enable : api.disable;\n updatePrev('prev');\n };\n var updateSearchState = function (api) {\n var data = api.getData();\n var current = currentSearchState.get();\n currentSearchState.set(__assign(__assign({}, current), {\n matchCase: data.matchcase,\n wholeWord: data.wholewords,\n inSelection: data.inselection\n }));\n };\n var disableAll = function (api, disable) {\n var buttons = [\n 'replace',\n 'replaceall',\n 'prev',\n 'next'\n ];\n var toggle = disable ? api.disable : api.enable;\n each(buttons, toggle);\n };\n var notFoundAlert = function (api) {\n editor.windowManager.alert('Could not find the specified string.', function () {\n api.focus('findtext');\n });\n };\n var focusButtonIfRequired = function (api, name) {\n if (global$3.browser.isSafari() && global$3.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n api.focus(name);\n }\n };\n var reset = function (api) {\n done(editor, currentSearchState, false);\n disableAll(api, true);\n updateButtonStates(api);\n };\n var doFind = function (api) {\n var data = api.getData();\n var 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 var count = find$2(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 var initialState = currentSearchState.get();\n var initialData = {\n findtext: selectedText,\n replacetext: '',\n wholewords: initialState.wholeWord,\n matchcase: initialState.matchCase,\n inselection: initialState.inSelection\n };\n var 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 disabled: true,\n borderless: true\n },\n {\n type: 'button',\n name: 'next',\n text: 'Next',\n icon: 'action-next',\n disabled: true,\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 disabled: true\n },\n {\n type: 'custom',\n name: 'replaceall',\n text: 'Replace All',\n disabled: true\n }\n ],\n initialData: initialData,\n onChange: function (api, details) {\n if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n reset(api);\n }\n },\n onAction: function (api, details) {\n var 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: function (api) {\n doFind(api);\n focusButtonIfRequired(api, 'find');\n },\n onClose: function () {\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 var register = function (editor, currentSearchState) {\n editor.addCommand('SearchReplace', function () {\n open(editor, currentSearchState);\n });\n };\n\n var showDialog = function (editor, currentSearchState) {\n return function () {\n open(editor, currentSearchState);\n };\n };\n var register$1 = function (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 function Plugin () {\n global.add('searchreplace', function (editor) {\n var currentSearchState = Cell({\n index: -1,\n count: 0,\n text: '',\n matchCase: false,\n wholeWord: false,\n inSelection: false\n });\n register(editor, currentSearchState);\n register$1(editor, currentSearchState);\n return get$1(editor, currentSearchState);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","// 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');","// Exports the \"visualchars\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualchars')\n// ES2015:\n// import 'tinymce/plugins/visualchars'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n\n var nativePush = Array.prototype.push;\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var get = function (obj, key) {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var getScripts = function (editor) {\n return editor.getParam('media_scripts');\n };\n var getAudioTemplateCallback = function (editor) {\n return editor.getParam('audio_template_callback');\n };\n var getVideoTemplateCallback = function (editor) {\n return editor.getParam('video_template_callback');\n };\n var hasLiveEmbeds = function (editor) {\n return editor.getParam('media_live_embeds', true);\n };\n var shouldFilterHtml = function (editor) {\n return editor.getParam('media_filter_html', true);\n };\n var getUrlResolver = function (editor) {\n return editor.getParam('media_url_resolver');\n };\n var hasAltSource = function (editor) {\n return editor.getParam('media_alt_source', true);\n };\n var hasPoster = function (editor) {\n return editor.getParam('media_poster', true);\n };\n var hasDimensions = function (editor) {\n return editor.getParam('media_dimensions', true);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n\n var DOM = global$2.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: attrs.map['data-ephox-embed-iri'],\n altsource: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$3({\n validate: false,\n allow_conditional_comments: true,\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source && name === 'param') {\n data.source = attrs.map.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$1.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source: attrs.map.src,\n width: String(videoScript.width),\n height: String(videoScript.height)\n };\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = attrs.map.src;\n } else if (!data.altsource) {\n data.altsource = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source = data.source || data.src || data.data;\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n var guess = function (url) {\n var 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 var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$2.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n each$1(updatedAttrs, function (val, name) {\n var value = '' + val;\n if (attrs.map[name]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name) {\n if (value) {\n attrs.map[name] = value;\n attr.value = value;\n } else {\n delete attrs.map[name];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name,\n value: value\n });\n attrs.map[name] = value;\n }\n });\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var sources = [\n 'source',\n 'altsource'\n ];\n var updateHtml = function (html, data, updateAll) {\n var writer = global$5();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$3({\n validate: false,\n allow_conditional_comments: true,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\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 setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.altsource) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source });\n break;\n case 'source':\n if (sourceCount < 2) {\n setAttributes(attrs, {\n src: data[sources[sourceCount]],\n type: data[sources[sourceCount] + 'mime']\n });\n if (!data[sources[sourceCount]]) {\n return;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 0; index < 2; index++) {\n if (data[sources[index]]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount <= index) {\n setAttributes(attrs, {\n src: data[sources[index]],\n type: data[sources[index] + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n\n var 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 var getProtocol = function (url) {\n var 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 var getUrl = function (pattern, url) {\n var protocol = getProtocol(url);\n var match = pattern.regex.exec(url);\n var newUrl = protocol + pattern.url;\n var _loop_1 = function (i) {\n newUrl = newUrl.replace('$' + i, function () {\n return match[i] ? match[i] : '';\n });\n };\n for (var i = 0; i < match.length; i++) {\n _loop_1(i);\n }\n return newUrl.replace(/\\?$/, '');\n };\n var matchPattern = function (url) {\n var patterns = urlPatterns.filter(function (pattern) {\n return pattern.regex.test(url);\n });\n if (patterns.length > 0) {\n return global$1.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n var getIframeHtml = function (data) {\n var allowFullscreen = data.allowfullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n };\n var getFlashHtml = function (data) {\n var html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getScriptHtml = function (data) {\n return '';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$1.extend({}, dataIn);\n if (!data.source) {\n global$1.extend(data, htmlToData(getScripts(editor), data.embed));\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 var 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);\n } else {\n var videoScript = getVideoScriptMatch(getScripts(editor), data.source);\n if (videoScript) {\n data.type = 'script';\n data.width = String(videoScript.width);\n data.height = String(videoScript.height);\n }\n var audioTemplateCallback = getAudioTemplateCallback(editor);\n var videoTemplateCallback = getVideoTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$1.each(data, function (value, key) {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\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 var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$6(function (res, rej) {\n var wrappedResolve = function (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 var defaultPromise = function (data, dataToHtml) {\n return new global$6(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n\n var extractMeta = function (sourceInput, data) {\n return get(data, sourceInput).bind(function (mainData) {\n return get(mainData, 'meta');\n });\n };\n var getValue = function (data, metaData, sourceInput) {\n return function (prop) {\n var _a;\n var getFromData = function () {\n return get(data, prop);\n };\n var getFromMetaData = function () {\n return get(metaData, prop);\n };\n var getNonEmptyValue = function (c) {\n return get(c, 'value').bind(function (v) {\n return v.length > 0 ? Optional.some(v) : Optional.none();\n });\n };\n var getFromValueFirst = function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(function () {\n return Optional.from(child);\n });\n });\n };\n var getFromMetaFirst = function () {\n return getFromMetaData().orThunk(function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child) : Optional.from(child);\n });\n });\n };\n return _a = {}, _a[prop] = (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr(''), _a;\n };\n };\n var getDimensions = function (data, metaData) {\n var dimensions = {};\n get(data, 'dimensions').each(function (dims) {\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(metaData, prop).orThunk(function () {\n return get(dims, prop);\n }).each(function (value) {\n return dimensions[prop] = value;\n });\n });\n });\n return dimensions;\n };\n var unwrap = function (data, sourceInput) {\n var metaData = sourceInput ? extractMeta(sourceInput, data).getOr({}) : {};\n var get = getValue(data, metaData, sourceInput);\n return __assign(__assign(__assign(__assign(__assign({}, get('source')), get('altsource')), get('poster')), get('embed')), getDimensions(data, metaData));\n };\n var wrap = function (data) {\n var wrapped = __assign(__assign({}, data), {\n source: { value: get(data, 'source').getOr('') },\n altsource: { value: get(data, 'altsource').getOr('') },\n poster: { value: get(data, 'poster').getOr('') }\n });\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(data, prop).each(function (value) {\n var dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n var handleError = function (editor) {\n return function (error) {\n var 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 };\n var snippetToData = function (editor, embedSnippet) {\n return htmlToData(getScripts(editor), embedSnippet);\n };\n var isMediaElement = function (element) {\n return element.getAttribute('data-mce-object') || element.getAttribute('data-ephox-embed-iri');\n };\n var getEditorData = function (editor) {\n var element = editor.selection.getNode();\n var snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n return __assign({ embed: snippet }, htmlToData(getScripts(editor), snippet));\n };\n var addEmbedHtml = function (api, editor) {\n return function (response) {\n if (isString(response.url) && response.url.trim().length > 0) {\n var html = response.html;\n var snippetData = snippetToData(editor, html);\n var nuData = __assign(__assign({}, snippetData), {\n source: response.url,\n embed: html\n });\n api.setData(wrap(nuData));\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var afterObjects = editor.dom.select('*[data-mce-object]');\n for (var i = 0; i < beforeObjects.length; i++) {\n for (var 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 var handleInsert = function (editor, html) {\n var beforeObjects = editor.dom.select('*[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n var submitForm = function (prevData, newData, editor) {\n newData.embed = updateHtml(newData.embed, newData);\n if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n getEmbedHtml(editor, newData).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var showDialog = function (editor) {\n var editorData = getEditorData(editor);\n var currentData = Cell(editorData);\n var initialData = wrap(editorData);\n var handleSource = function (prevData, api) {\n var 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 var handleEmbed = function (api) {\n var data = unwrap(api.getData());\n var dataFromEmbed = snippetToData(editor, data.embed);\n api.setData(wrap(dataFromEmbed));\n };\n var handleUpdate = function (api, sourceInput) {\n var data = unwrap(api.getData(), sourceInput);\n var embed = dataToHtml(editor, data);\n api.setData(wrap(__assign(__assign({}, data), { embed: embed })));\n };\n var mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source'\n }];\n var sizeInput = !hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n var generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n var embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n var embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n var 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 var advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n var tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n var body = {\n type: 'tabpanel',\n tabs: tabs\n };\n var win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body: 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: function (api) {\n var serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: function (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: initialData\n });\n };\n\n var get$1 = function (editor) {\n var showDialog$1 = function () {\n showDialog(editor);\n };\n return { showDialog: showDialog$1 };\n };\n\n var register = function (editor) {\n var showDialog$1 = function () {\n showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog$1);\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var sanitize = function (editor, html) {\n if (shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$5();\n var blocked;\n global$3({\n validate: false,\n allow_conditional_comments: false,\n comment: function (text) {\n if (!blocked) {\n writer.comment(text);\n }\n },\n cdata: function (text) {\n if (!blocked) {\n writer.cdata(text);\n }\n },\n text: function (text, raw) {\n if (!blocked) {\n writer.text(text, raw);\n }\n },\n start: function (name, attrs, empty) {\n blocked = true;\n if (name === 'script' || name === 'noscript' || name === 'svg') {\n return;\n }\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n if (attrName.indexOf('on') === 0) {\n delete attrs.map[attrName];\n attrs.splice(i, 1);\n }\n if (attrName === 'style') {\n attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);\n }\n }\n writer.start(name, attrs, empty);\n blocked = false;\n },\n end: function (name) {\n if (blocked) {\n return;\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n\n var isLiveEmbedNode = function (node) {\n var name = node.name;\n return name === 'iframe' || name === 'video' || name === 'audio';\n };\n var getDimension = function (node, styles, dimension, defaultValue) {\n if (defaultValue === void 0) {\n defaultValue = null;\n }\n var 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 var setDimensions = function (node, previewNode, styles) {\n var useDefaults = previewNode.name === 'img' || node.name === 'video';\n var defaultWidth = useDefaults ? '300' : null;\n var fallbackHeight = node.name === 'audio' ? '30' : '150';\n var defaultHeight = useDefaults ? fallbackHeight : null;\n previewNode.attr({\n width: getDimension(node, styles, 'width', defaultWidth),\n height: getDimension(node, styles, 'height', defaultHeight)\n });\n };\n var appendNodeContent = function (editor, nodeName, previewNode, html) {\n var newNode = global$9({\n forced_root_block: false,\n validate: false\n }, editor.schema).parse(html, { context: nodeName });\n while (newNode.firstChild) {\n previewNode.append(newNode.firstChild);\n }\n };\n var createPlaceholderNode = function (editor, node) {\n var name = node.name;\n var placeHolder = new global$7('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n setDimensions(node, placeHolder, {});\n placeHolder.attr({\n 'style': node.attr('style'),\n 'src': global$8.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n var createPreviewNode = function (editor, node) {\n var name = node.name;\n var styles = editor.dom.parseStyle(node.attr('style'));\n var filteredStyles = filter(styles, function (value, key) {\n return key !== 'width' && key !== 'height';\n });\n var previewWrapper = new global$7('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': editor.dom.serializeStyle(filteredStyles),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n var previewNode = new global$7(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 var attrs = [\n 'controls',\n 'crossorigin',\n 'currentTime',\n 'loop',\n 'muted',\n 'poster',\n 'preload'\n ];\n each(attrs, function (attrName) {\n previewNode.attr(attrName, node.attr(attrName));\n });\n var sanitizedHtml = previewWrapper.attr('data-mce-html');\n if (isNonNullable(sanitizedHtml)) {\n appendNodeContent(editor, name, previewNode, sanitizedHtml);\n }\n }\n var shimNode = new global$7('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attribs = sourceNode.attributes;\n var ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n var attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n var innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isPageEmbedWrapper = function (node) {\n var nodeClass = node.attr('class');\n return nodeClass && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n var isWithinEmbedWrapper = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri') || isPageEmbedWrapper(node)) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\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 (node.name === 'script') {\n videoScript = getVideoScriptMatch(getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (isLiveEmbedNode(node) && hasLiveEmbeds(editor) && global$8.ceFalse) {\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\n var setup = function (editor) {\n editor.on('preInit', function () {\n var specialElements = editor.schema.getSpecialElements();\n global$1.each('video audio iframe object'.split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$1.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$7(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\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 attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var 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 innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$7('#text', 3);\n innerNode.raw = true;\n innerNode.value = sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim').length === 0) {\n $elm.append('');\n }\n });\n });\n };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n\n var setup$2 = function (editor) {\n editor.on('click keyup touchend', function () {\n var 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', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('ObjectResized', function (e) {\n var target = e.target;\n var html;\n if (target.getAttribute('data-mce-object')) {\n 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 })));\n }\n }\n });\n };\n\n var stateSelectorAdapter = function (editor, selector) {\n return function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind;\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction: function () {\n editor.execCommand('mceMedia');\n },\n onSetup: stateSelectorAdapter(editor, [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ])\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction: function () {\n editor.execCommand('mceMedia');\n }\n });\n };\n\n function Plugin () {\n global.add('media', function (editor) {\n register(editor);\n register$1(editor);\n setup$1(editor);\n setup(editor);\n setup$2(editor);\n return get$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var generate = function (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 var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate };\n\n var comparison = 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 var partition = function (results) {\n var errors = [];\n var values = [];\n each(results, function (result) {\n result.fold(function (err) {\n errors.push(err);\n }, function (value) {\n values.push(value);\n });\n });\n return {\n errors: errors,\n values: values\n };\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (_opt) {\n return value(o);\n };\n var orThunk = function (_f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (_f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (_f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var isInlinePattern = function (pattern) {\n return pattern.type === 'inline-command' || pattern.type === 'inline-format';\n };\n var isBlockPattern = function (pattern) {\n return pattern.type === 'block-command' || pattern.type === 'block-format';\n };\n var sortPatterns = function (patterns) {\n return sort(patterns, function (a, b) {\n if (a.start.length === b.start.length) {\n return 0;\n }\n return a.start.length > b.start.length ? -1 : 1;\n });\n };\n var normalizePattern = function (pattern) {\n var err = function (message) {\n return Result.error({\n message: message,\n pattern: pattern\n });\n };\n var formatOrCmd = function (name, onFormat, onCommand) {\n if (pattern.format !== undefined) {\n var formats = void 0;\n if (isArray(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 var start_1 = pattern.start;\n var end_1 = pattern.end;\n if (end_1.length === 0) {\n end_1 = start_1;\n start_1 = '';\n }\n return formatOrCmd('Inline', function (format) {\n return {\n type: 'inline-format',\n start: start_1,\n end: end_1,\n format: format\n };\n }, function (cmd, value) {\n return {\n type: 'inline-command',\n start: start_1,\n end: end_1,\n cmd: cmd,\n value: value\n };\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', function (formats) {\n return {\n type: 'block-format',\n start: pattern.start,\n format: formats[0]\n };\n }, function (command, commandValue) {\n return {\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue\n };\n });\n }\n };\n var denormalizePattern = function (pattern) {\n if (pattern.type === 'block-command') {\n return {\n start: pattern.start,\n cmd: pattern.cmd,\n value: pattern.value\n };\n } else if (pattern.type === 'block-format') {\n return {\n start: pattern.start,\n format: pattern.format\n };\n } else if (pattern.type === 'inline-command') {\n if (pattern.cmd === 'mceInsertContent' && pattern.start === '') {\n return {\n start: pattern.end,\n replacement: pattern.value\n };\n } else {\n return {\n start: pattern.start,\n end: pattern.end,\n cmd: pattern.cmd,\n value: pattern.value\n };\n }\n } else if (pattern.type === 'inline-format') {\n return {\n start: pattern.start,\n end: pattern.end,\n format: pattern.format.length === 1 ? pattern.format[0] : pattern.format\n };\n }\n };\n var createPatternSet = function (patterns) {\n return {\n inlinePatterns: filter(patterns, isInlinePattern),\n blockPatterns: sortPatterns(filter(patterns, isBlockPattern))\n };\n };\n\n var get$1 = function (patternsState) {\n var setPatterns = function (newPatterns) {\n var normalized = partition(map(newPatterns, normalizePattern));\n if (normalized.errors.length > 0) {\n var firstError = normalized.errors[0];\n throw new Error(firstError.message + ':\\n' + JSON.stringify(firstError.pattern, null, 2));\n }\n patternsState.set(createPatternSet(normalized.values));\n };\n var getPatterns = function () {\n return __spreadArrays(map(patternsState.get().inlinePatterns, denormalizePattern), map(patternsState.get().blockPatterns, denormalizePattern));\n };\n return {\n setPatterns: setPatterns,\n getPatterns: getPatterns\n };\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var error$1 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var console = Global.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, args);\n } else {\n console.log.apply(console, args);\n }\n }\n };\n var defaultPatterns = [\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 var getPatternSet = function (editor) {\n var patterns = editor.getParam('textpattern_patterns', defaultPatterns, 'array');\n if (!isArray(patterns)) {\n error$1('The setting textpattern_patterns should be an array');\n return {\n inlinePatterns: [],\n blockPatterns: []\n };\n }\n var normalized = partition(map(patterns, normalizePattern));\n each(normalized.errors, function (err) {\n return error$1(err.message, err.pattern);\n });\n return createPatternSet(normalized.values);\n };\n var getForcedRootBlock = function (editor) {\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var point = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText = function (node) {\n return node.nodeType === Node.TEXT_NODE;\n };\n var cleanEmptyNodes = function (dom, node, isRoot) {\n if (node && dom.isEmpty(node) && !isRoot(node)) {\n var parent_1 = node.parentNode;\n dom.remove(node);\n cleanEmptyNodes(dom, parent_1, isRoot);\n }\n };\n var deleteRng = function (dom, rng, isRoot, clean) {\n if (clean === void 0) {\n clean = true;\n }\n var startParent = rng.startContainer.parentNode;\n var endParent = rng.endContainer.parentNode;\n rng.deleteContents();\n if (clean && !isRoot(rng.startContainer)) {\n if (isText(rng.startContainer) && rng.startContainer.data.length === 0) {\n dom.remove(rng.startContainer);\n }\n if (isText(rng.endContainer) && rng.endContainer.data.length === 0) {\n dom.remove(rng.endContainer);\n }\n cleanEmptyNodes(dom, startParent, isRoot);\n if (startParent !== endParent) {\n cleanEmptyNodes(dom, endParent, isRoot);\n }\n }\n };\n var isBlockFormatName = function (name, formatter) {\n var formatSet = formatter.get(name);\n return isArray(formatSet) && head(formatSet).exists(function (format) {\n return has(format, 'block');\n });\n };\n var isReplacementPattern = function (pattern) {\n return pattern.start.length === 0;\n };\n var getParentBlock = function (editor, rng) {\n var parentBlockOpt = Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n if (getForcedRootBlock(editor) === '') {\n return parentBlockOpt.orThunk(function () {\n return Optional.some(editor.getBody());\n });\n } else {\n return parentBlockOpt;\n }\n };\n\n var DOM = global$4.DOM;\n var alwaysNext = function (startNode) {\n return function (node) {\n return startNode === node ? -1 : 0;\n };\n };\n var isBoundary = function (dom) {\n return function (node) {\n return dom.isBlock(node) || contains([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n };\n };\n var textBefore = function (node, offset, rootNode) {\n if (isText(node) && offset >= 0) {\n return Optional.some(point(node, offset));\n } else {\n var textSeeker = global$5(DOM);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(function (prev) {\n return point(prev.container, prev.container.data.length);\n });\n }\n };\n var textAfter = function (node, offset, rootNode) {\n if (isText(node) && offset >= node.length) {\n return Optional.some(point(node, offset));\n } else {\n var textSeeker = global$5(DOM);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(function (prev) {\n return point(prev.container, 0);\n });\n }\n };\n var scanLeft = function (node, offset, rootNode) {\n if (!isText(node)) {\n return Optional.none();\n }\n var text = node.textContent;\n if (offset >= 0 && offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n var textSeeker = global$5(DOM);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(function (prev) {\n var prevText = prev.container.data;\n return scanLeft(prev.container, offset + prevText.length, rootNode);\n });\n }\n };\n var scanRight = function (node, offset, rootNode) {\n if (!isText(node)) {\n return Optional.none();\n }\n var text = node.textContent;\n if (offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n var textSeeker = global$5(DOM);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(function (next) {\n return scanRight(next.container, offset - text.length, rootNode);\n });\n }\n };\n var repeatLeft = function (dom, node, offset, process, rootNode) {\n var search = global$5(dom, isBoundary(dom));\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n var generatePath = function (root, node, offset) {\n if (isText(node) && (offset < 0 || offset > node.data.length)) {\n return [];\n }\n var p = [offset];\n var current = node;\n while (current !== root && current.parentNode) {\n var parent_1 = current.parentNode;\n for (var i = 0; i < parent_1.childNodes.length; i++) {\n if (parent_1.childNodes[i] === current) {\n p.push(i);\n break;\n }\n }\n current = parent_1;\n }\n return current === root ? p.reverse() : [];\n };\n var generatePathRange = function (root, startNode, startOffset, endNode, endOffset) {\n var start = generatePath(root, startNode, startOffset);\n var end = generatePath(root, endNode, endOffset);\n return {\n start: start,\n end: end\n };\n };\n var resolvePath = function (root, path) {\n var nodePath = path.slice();\n var offset = nodePath.pop();\n var resolvedNode = foldl(nodePath, function (optNode, index) {\n return optNode.bind(function (node) {\n return Optional.from(node.childNodes[index]);\n });\n }, Optional.some(root));\n return resolvedNode.bind(function (node) {\n if (isText(node) && (offset < 0 || offset > node.data.length)) {\n return Optional.none();\n } else {\n return Optional.some({\n node: node,\n offset: offset\n });\n }\n });\n };\n var resolvePathRange = function (root, range) {\n return resolvePath(root, range.start).bind(function (_a) {\n var startNode = _a.node, startOffset = _a.offset;\n return resolvePath(root, range.end).map(function (_a) {\n var endNode = _a.node, endOffset = _a.offset;\n var rng = document.createRange();\n rng.setStart(startNode, startOffset);\n rng.setEnd(endNode, endOffset);\n return rng;\n });\n });\n };\n var generatePathRangeFromRange = function (root, range) {\n return generatePathRange(root, range.startContainer, range.startOffset, range.endContainer, range.endOffset);\n };\n\n var stripPattern = function (dom, block, pattern) {\n var firstTextNode = textAfter(block, 0, block);\n firstTextNode.each(function (spot) {\n var node = spot.container;\n scanRight(node, pattern.start.length, block).each(function (end) {\n var rng = dom.createRng();\n rng.setStart(node, 0);\n rng.setEnd(end.container, end.offset);\n deleteRng(dom, rng, function (e) {\n return e === block;\n });\n });\n });\n };\n var applyPattern = function (editor, match) {\n var dom = editor.dom;\n var pattern = match.pattern;\n var rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n getParentBlock(editor, rng).each(function (block) {\n if (pattern.type === 'block-format') {\n if (isBlockFormatName(pattern.format, editor.formatter)) {\n editor.undoManager.transact(function () {\n stripPattern(editor.dom, block, pattern);\n editor.formatter.apply(pattern.format);\n });\n }\n } else if (pattern.type === 'block-command') {\n editor.undoManager.transact(function () {\n stripPattern(editor.dom, block, pattern);\n editor.execCommand(pattern.cmd, false, pattern.value);\n });\n }\n });\n return true;\n };\n var findPattern = function (patterns, text) {\n var nuText = text.replace(nbsp, ' ');\n return find(patterns, function (pattern) {\n return text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0;\n });\n };\n var findPatterns = function (editor, patterns) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n return getParentBlock(editor, rng).filter(function (block) {\n var forcedRootBlock = getForcedRootBlock(editor);\n var matchesForcedRootBlock = forcedRootBlock === '' && dom.is(block, 'body') || dom.is(block, forcedRootBlock);\n return block !== null && matchesForcedRootBlock;\n }).bind(function (block) {\n var blockText = block.textContent;\n var matchedPattern = findPattern(patterns, blockText);\n return matchedPattern.map(function (pattern) {\n if (global$3.trim(blockText).length === pattern.start.length) {\n return [];\n }\n return [{\n pattern: pattern,\n range: generatePathRange(dom.getRoot(), block, 0, block, 0)\n }];\n });\n }).getOr([]);\n };\n var applyMatches = function (editor, matches) {\n if (matches.length === 0) {\n return;\n }\n var bookmark = editor.selection.getBookmark();\n each(matches, function (match) {\n return applyPattern(editor, match);\n });\n editor.selection.moveToBookmark(bookmark);\n };\n\n var unique = 0;\n var generate$1 = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n\n var newMarker = function (dom, id) {\n return dom.create('span', {\n 'data-mce-type': 'bookmark',\n id: id\n });\n };\n var rangeFromMarker = function (dom, marker) {\n var rng = dom.createRng();\n rng.setStartAfter(marker.start);\n rng.setEndBefore(marker.end);\n return rng;\n };\n var createMarker = function (dom, markerPrefix, pathRange) {\n var rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n var startNode = rng.startContainer;\n var endNode = rng.endContainer;\n var textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n var textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n return {\n prefix: markerPrefix,\n end: textEnd.parentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n start: textStart.parentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n };\n };\n var removeMarker = function (dom, marker, isRoot) {\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n };\n\n var matchesPattern = function (dom, block, patternContent) {\n return function (element, offset) {\n var text = element.data;\n var searchText = text.substring(0, offset);\n var startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n var startIndex = searchText.lastIndexOf(patternContent);\n if (startIndex !== -1) {\n return startIndex + patternContent.length;\n } else if (startEndIndex !== -1) {\n return startEndIndex + 1;\n } else {\n return -1;\n }\n };\n };\n var findPatternStartFromSpot = function (dom, pattern, block, spot) {\n var startPattern = pattern.start;\n var startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(dom, block, startPattern), block);\n return startSpot.bind(function (spot) {\n if (spot.offset >= startPattern.length) {\n var rng = dom.createRng();\n rng.setStart(spot.container, spot.offset - startPattern.length);\n rng.setEnd(spot.container, spot.offset);\n return Optional.some(rng);\n } else {\n var offset = spot.offset - startPattern.length;\n return scanLeft(spot.container, offset, block).map(function (nextSpot) {\n var rng = dom.createRng();\n rng.setStart(nextSpot.container, nextSpot.offset);\n rng.setEnd(spot.container, spot.offset);\n return rng;\n }).filter(function (rng) {\n return rng.toString() === startPattern;\n }).orThunk(function () {\n return findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0));\n });\n }\n });\n };\n var findPatternStart = function (dom, pattern, node, offset, block, requireGap) {\n if (requireGap === void 0) {\n requireGap = false;\n }\n if (pattern.start.length === 0 && !requireGap) {\n var rng = dom.createRng();\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n return Optional.some(rng);\n }\n return textBefore(node, offset, block).bind(function (spot) {\n var start = findPatternStartFromSpot(dom, pattern, block, spot);\n return start.bind(function (startRange) {\n if (requireGap) {\n if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n return Optional.none();\n } else if (spot.offset === 0 && startRange.endContainer.textContent.length === startRange.endOffset) {\n return Optional.none();\n }\n }\n return Optional.some(startRange);\n });\n });\n };\n var findPattern$1 = function (editor, block, details) {\n var dom = editor.dom;\n var root = dom.getRoot();\n var pattern = details.pattern;\n var endNode = details.position.container;\n var endOffset = details.position.offset;\n return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(function (spot) {\n var endPathRng = generatePathRange(root, spot.container, spot.offset, endNode, endOffset);\n if (isReplacementPattern(pattern)) {\n return Optional.some({\n matches: [{\n pattern: pattern,\n startRng: endPathRng,\n endRng: endPathRng\n }],\n position: spot\n });\n } else {\n var resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block);\n var results_1 = resultsOpt.getOr({\n matches: [],\n position: spot\n });\n var pos = results_1.position;\n var start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n return start.map(function (startRng) {\n var startPathRng = generatePathRangeFromRange(root, startRng);\n return {\n matches: results_1.matches.concat([{\n pattern: pattern,\n startRng: startPathRng,\n endRng: endPathRng\n }]),\n position: point(startRng.startContainer, startRng.startOffset)\n };\n });\n }\n });\n };\n var findPatternsRec = function (editor, patterns, node, offset, block) {\n var dom = editor.dom;\n return textBefore(node, offset, dom.getRoot()).bind(function (endSpot) {\n var rng = dom.createRng();\n rng.setStart(block, 0);\n rng.setEnd(node, offset);\n var text = rng.toString();\n for (var i = 0; i < patterns.length; i++) {\n var pattern = patterns[i];\n if (!endsWith(text, pattern.end)) {\n continue;\n }\n var patternsWithoutCurrent = patterns.slice();\n patternsWithoutCurrent.splice(i, 1);\n var result = findPattern$1(editor, block, {\n pattern: pattern,\n remainingPatterns: patternsWithoutCurrent,\n position: endSpot\n });\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n });\n };\n var applyPattern$1 = function (editor, pattern, patternRange) {\n editor.selection.setRng(patternRange);\n if (pattern.type === 'inline-format') {\n each(pattern.format, function (format) {\n editor.formatter.apply(format);\n });\n } else {\n editor.execCommand(pattern.cmd, false, pattern.value);\n }\n };\n var applyReplacementPattern = function (editor, pattern, marker, isRoot) {\n var markerRange = rangeFromMarker(editor.dom, marker);\n deleteRng(editor.dom, markerRange, isRoot);\n applyPattern$1(editor, pattern, markerRange);\n };\n var applyPatternWithContent = function (editor, pattern, startMarker, endMarker, isRoot) {\n var dom = editor.dom;\n var markerEndRange = rangeFromMarker(dom, endMarker);\n var markerStartRange = rangeFromMarker(dom, startMarker);\n deleteRng(dom, markerStartRange, isRoot);\n deleteRng(dom, markerEndRange, isRoot);\n var patternMarker = {\n prefix: startMarker.prefix,\n start: startMarker.end,\n end: endMarker.start\n };\n var patternRange = rangeFromMarker(dom, patternMarker);\n applyPattern$1(editor, pattern, patternRange);\n };\n var addMarkers = function (dom, matches) {\n var markerPrefix = generate$1('mce_textpattern');\n var matchesWithEnds = foldr(matches, function (acc, match) {\n var endMarker = createMarker(dom, markerPrefix + ('_end' + acc.length), match.endRng);\n return acc.concat([__assign(__assign({}, match), { endMarker: endMarker })]);\n }, []);\n return foldr(matchesWithEnds, function (acc, match) {\n var idx = matchesWithEnds.length - acc.length - 1;\n var startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + ('_start' + idx), match.startRng);\n return acc.concat([__assign(__assign({}, match), { startMarker: startMarker })]);\n }, []);\n };\n var findPatterns$1 = function (editor, patterns, space) {\n var rng = editor.selection.getRng();\n if (rng.collapsed === false) {\n return [];\n }\n return getParentBlock(editor, rng).bind(function (block) {\n var offset = rng.startOffset - (space ? 1 : 0);\n return findPatternsRec(editor, patterns, rng.startContainer, offset, block);\n }).fold(function () {\n return [];\n }, function (result) {\n return result.matches;\n });\n };\n var applyMatches$1 = function (editor, matches) {\n if (matches.length === 0) {\n return;\n }\n var dom = editor.dom;\n var bookmark = editor.selection.getBookmark();\n var matchesWithMarkers = addMarkers(dom, matches);\n each(matchesWithMarkers, function (match) {\n var block = dom.getParent(match.startMarker.start, dom.isBlock);\n var isRoot = function (node) {\n return node === block;\n };\n if (isReplacementPattern(match.pattern)) {\n applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n } else {\n applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n }\n removeMarker(dom, match.endMarker, isRoot);\n removeMarker(dom, match.startMarker, isRoot);\n });\n editor.selection.moveToBookmark(bookmark);\n };\n\n var handleEnter = function (editor, patternSet) {\n if (!editor.selection.isCollapsed()) {\n return false;\n }\n var inlineMatches = findPatterns$1(editor, patternSet.inlinePatterns, false);\n var blockMatches = findPatterns(editor, patternSet.blockPatterns);\n if (blockMatches.length > 0 || inlineMatches.length > 0) {\n editor.undoManager.add();\n editor.undoManager.extra(function () {\n editor.execCommand('mceInsertNewLine');\n }, function () {\n editor.insertContent(zeroWidth);\n applyMatches$1(editor, inlineMatches);\n applyMatches(editor, blockMatches);\n var range = editor.selection.getRng();\n var spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n editor.execCommand('mceInsertNewLine');\n spot.each(function (s) {\n var node = s.container;\n if (node.data.charAt(s.offset - 1) === zeroWidth) {\n node.deleteData(s.offset - 1, 1);\n cleanEmptyNodes(editor.dom, node.parentNode, function (e) {\n return e === editor.dom.getRoot();\n });\n }\n });\n });\n return true;\n }\n return false;\n };\n var handleInlineKey = function (editor, patternSet) {\n var inlineMatches = findPatterns$1(editor, patternSet.inlinePatterns, true);\n if (inlineMatches.length > 0) {\n editor.undoManager.transact(function () {\n applyMatches$1(editor, inlineMatches);\n });\n }\n };\n var checkKeyEvent = function (codes, event, predicate) {\n for (var i = 0; i < codes.length; i++) {\n if (predicate(codes[i], event)) {\n return true;\n }\n }\n };\n var checkKeyCode = function (codes, event) {\n return checkKeyEvent(codes, event, function (code, event) {\n return code === event.keyCode && global$2.modifierPressed(event) === false;\n });\n };\n var checkCharCode = function (chars, event) {\n return checkKeyEvent(chars, event, function (chr, event) {\n return chr.charCodeAt(0) === event.charCode;\n });\n };\n\n var setup = function (editor, patternsState) {\n var charCodes = [\n ',',\n '.',\n ';',\n ':',\n '!',\n '?'\n ];\n var keyCodes = [32];\n editor.on('keydown', function (e) {\n if (e.keyCode === 13 && !global$2.modifierPressed(e)) {\n if (handleEnter(editor, patternsState.get())) {\n e.preventDefault();\n }\n }\n }, true);\n editor.on('keyup', function (e) {\n if (checkKeyCode(keyCodes, e)) {\n handleInlineKey(editor, patternsState.get());\n }\n });\n editor.on('keypress', function (e) {\n if (checkCharCode(charCodes, e)) {\n global$1.setEditorTimeout(editor, function () {\n handleInlineKey(editor, patternsState.get());\n });\n }\n });\n };\n\n function Plugin () {\n global.add('textpattern', function (editor) {\n var patternsState = Cell(getPatternSet(editor));\n setup(editor, patternsState);\n return get$1(patternsState);\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 * filter xss\n *\n * @author Zongmin Lei\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = require(\"./util\");\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n * - {String} html\n * - {Boolean} closing\n */\nfunction getAttrs(html) {\n var i = _.spaceIndex(html);\n if (i === -1) {\n return {\n html: \"\",\n closing: html[html.length - 2] === \"/\"\n };\n }\n html = _.trim(html.slice(i + 1, -1));\n var isClosing = html[html.length - 1] === \"/\";\n if (isClosing) html = _.trim(html.slice(0, -1));\n return {\n html: html,\n closing: isClosing\n };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n var ret = {};\n for (var i in obj) {\n ret[i] = obj[i];\n }\n return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n * whiteList, onTag, onTagAttr, onIgnoreTag,\n * onIgnoreTagAttr, safeAttrValue, escapeHtml\n * stripIgnoreTagBody, allowCommentTag, stripBlankChar\n * css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n options = shallowCopyObject(options || {});\n\n if (options.stripIgnoreTag) {\n if (options.onIgnoreTag) {\n console.error(\n 'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n );\n }\n options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n }\n\n options.whiteList = options.whiteList || DEFAULT.whiteList;\n options.onTag = options.onTag || DEFAULT.onTag;\n options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n this.options = options;\n\n if (options.css === false) {\n this.cssFilter = false;\n } else {\n options.css = options.css || {};\n this.cssFilter = new FilterCSS(options.css);\n }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function(html) {\n // compatible with the input\n html = html || \"\";\n html = html.toString();\n if (!html) return \"\";\n\n var me = this;\n var options = me.options;\n var whiteList = options.whiteList;\n var onTag = options.onTag;\n var onIgnoreTag = options.onIgnoreTag;\n var onTagAttr = options.onTagAttr;\n var onIgnoreTagAttr = options.onIgnoreTagAttr;\n var safeAttrValue = options.safeAttrValue;\n var escapeHtml = options.escapeHtml;\n var cssFilter = me.cssFilter;\n\n // remove invisible characters\n if (options.stripBlankChar) {\n html = DEFAULT.stripBlankChar(html);\n }\n\n // remove html comments\n if (!options.allowCommentTag) {\n html = DEFAULT.stripCommentTag(html);\n }\n\n // if enable stripIgnoreTagBody\n var stripIgnoreTagBody = false;\n if (options.stripIgnoreTagBody) {\n var stripIgnoreTagBody = DEFAULT.StripTagBody(\n options.stripIgnoreTagBody,\n onIgnoreTag\n );\n onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n }\n\n var retHtml = parseTag(\n html,\n function(sourcePosition, position, tag, html, isClosing) {\n var info = {\n sourcePosition: sourcePosition,\n position: position,\n isClosing: isClosing,\n isWhite: whiteList.hasOwnProperty(tag)\n };\n\n // call `onTag()`\n var ret = onTag(tag, html, info);\n if (!isNull(ret)) return ret;\n\n if (info.isWhite) {\n if (info.isClosing) {\n return \"\";\n }\n\n var attrs = getAttrs(html);\n var whiteAttrList = whiteList[tag];\n var attrsHtml = parseAttr(attrs.html, function(name, value) {\n // call `onTagAttr()`\n var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n var ret = onTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n\n if (isWhiteAttr) {\n // call `safeAttrValue()`\n value = safeAttrValue(tag, name, value, cssFilter);\n if (value) {\n return name + '=\"' + value + '\"';\n } else {\n return name;\n }\n } else {\n // call `onIgnoreTagAttr()`\n var ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n return;\n }\n });\n\n // build new tag html\n var html = \"<\" + tag;\n if (attrsHtml) html += \" \" + attrsHtml;\n if (attrs.closing) html += \" /\";\n html += \">\";\n return html;\n } else {\n // call `onIgnoreTag()`\n var ret = onIgnoreTag(tag, html, info);\n if (!isNull(ret)) return ret;\n return escapeHtml(html);\n }\n },\n escapeHtml\n );\n\n // if enable stripIgnoreTagBody\n if (stripIgnoreTagBody) {\n retHtml = stripIgnoreTagBody.remove(retHtml);\n }\n\n return retHtml;\n};\n\nmodule.exports = FilterXSS;\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 * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireVisualBlocks = function (editor, state) {\n editor.fire('VisualBlocks', { state: state });\n };\n\n var toggleVisualBlocks = function (editor, pluginUrl, enabledState) {\n var dom = editor.dom;\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n fireVisualBlocks(editor, enabledState.get());\n };\n\n var register = function (editor, pluginUrl, enabledState) {\n editor.addCommand('mceVisualBlocks', function () {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualblocks_default_state', false, 'boolean');\n };\n\n var setup = function (editor, pluginUrl, enabledState) {\n editor.on('PreviewFormats AfterPreviewFormats', function (e) {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', function () {\n if (isEnabledByDefault(editor)) {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n };\n\n var toggleActiveState = function (editor, enabledState) {\n return function (api) {\n api.setActive(enabledState.get());\n var editorEventCallback = function (e) {\n return api.setActive(e.state);\n };\n editor.on('VisualBlocks', editorEventCallback);\n return function () {\n return editor.off('VisualBlocks', editorEventCallback);\n };\n };\n };\n var register$1 = function (editor, enabledState) {\n editor.ui.registry.addToggleButton('visualblocks', {\n icon: 'visualblocks',\n tooltip: 'Show blocks',\n onAction: function () {\n return editor.execCommand('mceVisualBlocks');\n },\n onSetup: toggleActiveState(editor, enabledState)\n });\n editor.ui.registry.addToggleMenuItem('visualblocks', {\n text: 'Show blocks',\n icon: 'visualblocks',\n onAction: function () {\n return editor.execCommand('mceVisualBlocks');\n },\n onSetup: toggleActiveState(editor, enabledState)\n });\n };\n\n function Plugin () {\n global.add('visualblocks', function (editor, pluginUrl) {\n var enabledState = Cell(false);\n register(editor, pluginUrl, enabledState);\n register$1(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');","/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. ''\n * @return {String}\n */\nfunction getTagName(html) {\n var i = _.spaceIndex(html);\n if (i === -1) {\n var tagName = html.slice(1, -1);\n } else {\n var tagName = html.slice(1, i + 1);\n }\n tagName = _.trim(tagName).toLowerCase();\n if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如:''\n * @return {Boolean}\n */\nfunction isClosing(html) {\n return html.slice(0, 2) === \"\") {\n rethtml += escapeHtml(html.slice(lastPos, tagStart));\n currentHtml = html.slice(tagStart, currentPos + 1);\n currentTagName = getTagName(currentHtml);\n rethtml += onTag(\n tagStart,\n rethtml.length,\n currentTagName,\n currentHtml,\n isClosing(currentHtml)\n );\n lastPos = currentPos + 1;\n tagStart = false;\n continue;\n }\n if ((c === '\"' || c === \"'\")) {\n var i = 1;\n var ic = html.charAt(currentPos - i);\n\n while ((ic === \" \") || (ic === \"=\")) {\n if (ic === \"=\") {\n quoteStart = c;\n continue chariterator;\n }\n ic = html.charAt(currentPos - ++i);\n }\n }\n } else {\n if (c === quoteStart) {\n quoteStart = false;\n continue;\n }\n }\n }\n }\n if (lastPos < html.length) {\n rethtml += escapeHtml(html.substr(lastPos));\n }\n\n return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9_:\\.\\-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr(html, onAttr) {\n \"use strict\";\n\n var lastPos = 0;\n var retAttrs = [];\n var tmpName = false;\n var len = html.length;\n\n function addAttr(name, value) {\n name = _.trim(name);\n name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n if (name.length < 1) return;\n var ret = onAttr(name, value || \"\");\n if (ret) retAttrs.push(ret);\n }\n\n // 逐个分析字符\n for (var i = 0; i < len; i++) {\n var c = html.charAt(i);\n var v, j;\n if (tmpName === false && c === \"=\") {\n tmpName = html.slice(lastPos, i);\n lastPos = i + 1;\n continue;\n }\n if (tmpName !== false) {\n if (\n i === lastPos &&\n (c === '\"' || c === \"'\") &&\n html.charAt(i - 1) === \"=\"\n ) {\n j = html.indexOf(c, i + 1);\n if (j === -1) {\n break;\n } else {\n v = _.trim(html.slice(lastPos + 1, j));\n addAttr(tmpName, v);\n tmpName = false;\n i = j;\n lastPos = i + 1;\n continue;\n }\n }\n }\n if (/\\s|\\n|\\t/.test(c)) {\n html = html.replace(/\\s|\\n|\\t/g, \" \");\n if (tmpName === false) {\n j = findNextEqual(html, i);\n if (j === -1) {\n v = _.trim(html.slice(lastPos, i));\n addAttr(v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n i = j - 1;\n continue;\n }\n } else {\n j = findBeforeEqual(html, i - 1);\n if (j === -1) {\n v = _.trim(html.slice(lastPos, i));\n v = stripQuoteWrap(v);\n addAttr(tmpName, v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n continue;\n }\n }\n }\n }\n\n if (lastPos < html.length) {\n if (tmpName === false) {\n addAttr(html.slice(lastPos));\n } else {\n addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n }\n }\n\n return _.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n for (; i < str.length; i++) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction findBeforeEqual(str, i) {\n for (; i > 0; i--) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction isQuoteWrapString(text) {\n if (\n (text[0] === '\"' && text[text.length - 1] === '\"') ||\n (text[0] === \"'\" && text[text.length - 1] === \"'\")\n ) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction stripQuoteWrap(text) {\n if (isQuoteWrapString(text)) {\n return text.substr(1, text.length - 2);\n } else {\n return text;\n }\n}\n\nexports.parseTag = parseTag;\nexports.parseAttr = parseAttr;\n","/**\n * xss\n *\n * @author Zongmin Lei\n */\n\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar FilterXSS = require(\"./xss\");\n\n/**\n * filter xss function\n *\n * @param {String} html\n * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n * @return {String}\n */\nfunction filterXSS(html, options) {\n var xss = new FilterXSS(options);\n return xss.process(html);\n}\n\nexports = module.exports = filterXSS;\nexports.filterXSS = filterXSS;\nexports.FilterXSS = FilterXSS;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\nfor (var i in parser) exports[i] = parser[i];\n\n// using `xss` on the browser, output `filterXSS` to the globals\nif (typeof window !== \"undefined\") {\n window.filterXSS = module.exports;\n}\n\n// using `xss` on the WebWorker, output `filterXSS` to the globals\nfunction isWorkerEnv() {\n return typeof self !== 'undefined' && typeof DedicatedWorkerGlobalScope !== 'undefined' && self instanceof DedicatedWorkerGlobalScope;\n}\nif (isWorkerEnv()) {\n self.filterXSS = module.exports;\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Editor.vue?vue&type=style&index=0&id=e2c942e2&lang=scss\"","// 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');","// Exports the \"save\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/save')\n// ES2015:\n// import 'tinymce/plugins/save'\nrequire('./plugin.js');","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var enableWhenDirty = function (editor) {\n return editor.getParam('save_enablewhendirty', true);\n };\n var hasOnSaveCallback = function (editor) {\n return !!editor.getParam('save_onsavecallback');\n };\n var hasOnCancelCallback = function (editor) {\n return !!editor.getParam('save_oncancelcallback');\n };\n\n var displayErrorMessage = function (editor, message) {\n editor.notificationManager.open({\n text: message,\n type: 'error'\n });\n };\n var save = function (editor) {\n var formObj = global$1.DOM.getParent(editor.id, 'form');\n if (enableWhenDirty(editor) && !editor.isDirty()) {\n return;\n }\n editor.save();\n if (hasOnSaveCallback(editor)) {\n editor.execCallback('save_onsavecallback', editor);\n editor.nodeChanged();\n return;\n }\n if (formObj) {\n editor.setDirty(false);\n if (!formObj.onsubmit || formObj.onsubmit()) {\n if (typeof formObj.submit === 'function') {\n formObj.submit();\n } else {\n displayErrorMessage(editor, 'Error: Form submit field collision.');\n }\n }\n editor.nodeChanged();\n } else {\n displayErrorMessage(editor, 'Error: No form element found.');\n }\n };\n var cancel = function (editor) {\n var h = global$2.trim(editor.startContent);\n if (hasOnCancelCallback(editor)) {\n editor.execCallback('save_oncancelcallback', editor);\n return;\n }\n editor.resetContent(h);\n };\n\n var register = function (editor) {\n editor.addCommand('mceSave', function () {\n save(editor);\n });\n editor.addCommand('mceCancel', function () {\n cancel(editor);\n });\n };\n\n var stateToggle = function (editor) {\n return function (api) {\n var handler = function () {\n api.setDisabled(enableWhenDirty(editor) && !editor.isDirty());\n };\n editor.on('NodeChange dirty', handler);\n return function () {\n return editor.off('NodeChange dirty', handler);\n };\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addButton('save', {\n icon: 'save',\n tooltip: 'Save',\n disabled: true,\n onAction: function () {\n return editor.execCommand('mceSave');\n },\n onSetup: stateToggle(editor)\n });\n editor.ui.registry.addButton('cancel', {\n icon: 'cancel',\n tooltip: 'Cancel',\n disabled: true,\n onAction: function () {\n return editor.execCommand('mceCancel');\n },\n onSetup: stateToggle(editor)\n });\n editor.addShortcut('Meta+S', '', 'mceSave');\n };\n\n function Plugin () {\n global.add('save', function (editor) {\n register$1(editor);\n register(editor);\n });\n }\n\n Plugin();\n\n}());\n","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"editor\" }\nconst _hoisted_2 = [\"id\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"app-modal\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_filemanager = _resolveComponent(\"filemanager\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", { id: _ctx.id }, null, 8, _hoisted_2),\n (_ctx.modal)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_filemanager, {\n modal: true,\n media: _ctx.media\n }, null, 8, [\"media\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\r\nimport { Options, Vue } from 'vue-class-component';\r\nimport { Emit, Prop, Watch } from '@/helpers/Decorators';\r\nimport { baseurl } from '@/helpers/Utils';\r\nimport Permissions from '@/settings/permissions';\r\nimport StorageService from '@/services/admin/StorageService';\r\nimport merge from 'lodash/merge';\r\nimport head from 'lodash/head';\r\nimport * as xss from 'xss';\r\n\r\n// Import TinyMCE\r\nimport tinymce from 'tinymce/tinymce';\r\n\r\n// Any plugins you want to use has to be imported\r\nimport 'tinymce/plugins/advlist';\r\nimport 'tinymce/plugins/wordcount';\r\nimport 'tinymce/plugins/autolink';\r\nimport 'tinymce/plugins/autosave';\r\nimport 'tinymce/plugins/charmap';\r\nimport 'tinymce/plugins/emoticons';\r\nimport 'tinymce/icons/default';\r\n// import 'tinymce/plugins/codesample';\r\nimport 'tinymce/plugins/fullscreen';\r\nimport 'tinymce/plugins/hr';\r\n// import 'tinymce/plugins/imagetools';\r\nimport 'tinymce/plugins/insertdatetime';\r\nimport 'tinymce/plugins/link';\r\nimport 'tinymce/plugins/media';\r\n// import 'tinymce/plugins/noneditable';\r\nimport 'tinymce/plugins/paste';\r\n// import 'tinymce/plugins/print';\r\nimport 'tinymce/plugins/searchreplace';\r\n// import 'tinymce/plugins/tabfocus';\r\nimport 'tinymce/plugins/template';\r\nimport 'tinymce/plugins/textpattern';\r\nimport 'tinymce/plugins/visualblocks';\r\nimport 'tinymce/plugins/anchor';\r\nimport 'tinymce/plugins/autoresize';\r\n// import 'tinymce/plugins/bbcode';\r\nimport 'tinymce/plugins/code';\r\nimport 'tinymce/plugins/directionality';\r\n// import 'tinymce/plugins/fullpage';\r\n// import 'tinymce/plugins/help';\r\nimport 'tinymce/plugins/image';\r\n// import 'tinymce/plugins/importcss';\r\n// import 'tinymce/plugins/legacyoutput';\r\nimport 'tinymce/plugins/lists';\r\nimport 'tinymce/plugins/nonbreaking';\r\n// import 'tinymce/plugins/pagebreak';\r\n// import 'tinymce/plugins/preview';\r\nimport 'tinymce/plugins/save';\r\n// import 'tinymce/plugins/spellchecker';\r\nimport 'tinymce/plugins/table';\r\n// import 'tinymce/plugins/toc';\r\nimport 'tinymce/plugins/visualchars';\r\n\r\n// Custom plugins\r\n// import '../tinymce/plugins/linktools';\r\nimport '../tinymce/plugins/floatingtoolbar';\r\n\r\n// Language\r\nimport '../tinymce/langs/pl';\r\n\r\n// A theme is also required\r\nimport 'tinymce/themes/silver';\r\n\r\n@Options({\r\n name: 'editor',\r\n components: {\r\n // 'tinymce': TinyMCE\r\n }\r\n})\r\nexport default class Editor extends Vue\r\n{\r\n @Prop()\r\n public id!: string;\r\n\r\n @Prop({ default: '' })\r\n public modelValue: string;\r\n\r\n @Prop({\r\n default: () => [\r\n 'advlist autolink autosave lists link image charmap hr anchor autoresize',\r\n 'searchreplace wordcount visualblocks visualchars code template',\r\n 'insertdatetime media nonbreaking save table directionality',\r\n 'paste textpattern fullscreen floatingtoolbar'\r\n // 'gallery filemanager mention localautosave'\r\n ]\r\n })\r\n private plugins: string[];\r\n\r\n @Prop({\r\n default: 'undo redo | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link gallery_insert filemanager_insert | forecolor backcolor | nonbreaking template fullscreen code'\r\n })\r\n private toolbar: string;\r\n\r\n @Prop({ default: () => {} })\r\n public editorOptions: Record;\r\n\r\n private content: string = '';\r\n private modal: boolean = false;\r\n private media: string = \"files\";\r\n private filemanager: any = {\r\n enabled: false,\r\n callback: null,\r\n value: null,\r\n meta: null\r\n };\r\n\r\n private xssWhiteList: any = {\r\n iframe: ['width', 'height', 'src', 'frameborder', 'allow', 'allowfullscreen']\r\n };\r\n\r\n private xssOptions: xss.IFilterXSSOptions = {\r\n whiteList: merge(xss.getDefaultWhiteList(), this.xssWhiteList) as any,\r\n onIgnoreTagAttr: (tag: string, name: string, value: string, isWhiteAttr: any) =>\r\n {\r\n const allowed = ['id', 'style', 'class', 'contenteditable'];\r\n\r\n if (name.substr(0, 5) === \"data-\" || allowed.includes(name))\r\n {\r\n return `${name}=\"${value}\"`;\r\n }\r\n }\r\n };\r\n\r\n private editor(): any\r\n {\r\n return tinymce.get(this.id);\r\n }\r\n\r\n public async mounted(): Promise\r\n {\r\n this.filemanager.enabled = await this.$permissions.all([Permissions.Storage.View]);\r\n this.$events.$on('filemanager::modal::close', this.closeModal);\r\n this.$events.$on('filemanager::callback::modelValue', this.callbackValue);\r\n\r\n tinymce.init(this.settings(this));\r\n }\r\n\r\n public unmounted(): void\r\n {\r\n tinymce.remove(this.editor());\r\n\r\n this.$events.$off('filemanager::modal::close', this.closeModal);\r\n this.$events.$off('filemanager::callback::modelValue', this.callbackValue);\r\n }\r\n\r\n private filterXSS(value: string): string\r\n {\r\n return xss.filterXSS(value, this.xssOptions);\r\n }\r\n\r\n private settings(ctx: any): any\r\n {\r\n const updateImage = (el: any): void =>\r\n {\r\n const src = el.attr('src');\r\n\r\n if (src.indexOf('#(storage):') == 0)\r\n {\r\n const publicId = src.replace('#(storage):', '');\r\n\r\n el.attr('src', StorageService.previewResource(publicId));\r\n el.attr('data-src', src);\r\n }\r\n };\r\n\r\n const displayImages = (editor: any, content: string): string =>\r\n {\r\n const html = editor.$('
').html(content);\r\n\r\n html.find('img').toArray().forEach((img: any) =>\r\n {\r\n updateImage(editor.$(img));\r\n });\r\n\r\n return html.html();\r\n };\r\n\r\n const serializeImages = (editor: any, content: string): string =>\r\n {\r\n // Zablokowanie doczytywania obrazkow przez parser jquery\r\n content = content.replace(new RegExp(' src=\"', 'g'), ' src-disabled=\"');\r\n\r\n const html = editor.$('
').html(content);\r\n\r\n html.find('img').toArray().forEach((img: any) =>\r\n {\r\n const el = editor.$(img);\r\n const src = el.attr('data-src');\r\n\r\n if (src && src.indexOf('#(storage):') == 0)\r\n {\r\n el.attr('src-disabled', src);\r\n el.removeAttr('data-src');\r\n }\r\n });\r\n\r\n // Przywrocenie oryginalnego kodu html\r\n return html.html().replace(new RegExp(' src-disabled=\"', 'g'), ' src=\"');\r\n };\r\n\r\n const options = {\r\n base_url: '/static/tinymce',\r\n selector: '#' + this.id,\r\n language: ctx.$i18n.shortLocale(),\r\n skin_url: '/static/skins/oxide',\r\n content_css: '/static/skins/oxide/content.min.css',\r\n mobile: {\r\n theme: 'silver'\r\n },\r\n toolbar: this.toolbar,\r\n toolbar_mode: 'sliding',\r\n menubar: 'edit insert view format tools',\r\n plugins: this.plugins,\r\n templates: this.templates(),\r\n relative_urls: false,\r\n paste_data_images: false,\r\n browser_spellcheck: true,\r\n entity_encoding: \"raw\",\r\n min_height: 450,\r\n autoresize_bottom_margin: 50,\r\n autoresize_on_init: true,\r\n nowrap: false,\r\n resize: false,\r\n table_style_by_css: true,\r\n media_alt_source: false,\r\n media_poster: false,\r\n image_advtab: true,\r\n floatingtoolbar_selectors: ['div.content.scroll'],\r\n // las_seconds: 15,\r\n // extended_valid_elements : \"edito[class|data*],edito-gallery[class|data*],edito-files[class|data*],div[class|data*]\",\r\n // custom_elements: \"edito,edito-gallery,edito-files\",\r\n file_picker_callback: !this.filemanager.enabled ? null : (callback: any, value: any, meta: any) =>\r\n {\r\n ctx.modal = true;\r\n ctx.filemanager.callback = callback;\r\n ctx.filemanager.value = value;\r\n ctx.filemanager.meta = meta;\r\n\r\n switch (meta.filetype)\r\n {\r\n case \"image\":\r\n ctx.media = \"images\";\r\n break;\r\n case \"media\":\r\n ctx.media = \"media\";\r\n break;\r\n case \"file\":\r\n ctx.media = \"files\";\r\n break;\r\n default:\r\n ctx.media = \"files\";\r\n break;\r\n }\r\n },\r\n setup: (editor: any) =>\r\n {\r\n editor.on('init', (e: Event) =>\r\n {\r\n ctx.content = this.filterXSS(this.modelValue);\r\n editor.setContent(ctx.content);\r\n });\r\n editor.on('change keyup undo redo', () =>\r\n {\r\n ctx.content = serializeImages(editor, editor.getContent());\r\n ctx.updateModel(ctx.content);\r\n });\r\n editor.on('BeforeSetContent', (e: any) =>\r\n {\r\n if (e.content)\r\n {\r\n e.content = this.filterXSS(e.content);\r\n e.content = displayImages(editor, e.content);\r\n }\r\n });\r\n editor.on('PostProcess', (e: any) =>\r\n {\r\n if (e.content && e.source_view)\r\n {\r\n e.content = serializeImages(editor, e.content);\r\n }\r\n if (e.content && !e.source_view)\r\n {\r\n e.content = displayImages(editor, e.content);\r\n }\r\n });\r\n editor.on('NodeChange', (e: any) =>\r\n {\r\n if (e.element && e.element.tagName == \"IMG\")\r\n {\r\n const el = editor.$(e.element);\r\n const src = el.attr('src');\r\n\r\n if (src.startsWith('#(storage):'))\r\n {\r\n updateImage(editor.$(e.element));\r\n }\r\n }\r\n });\r\n editor.on('OpenWindow', (e: any) =>\r\n {\r\n const data = e.dialog.getData();\r\n\r\n // Image\r\n if (data?.src?.value?.length > 0 && data?.src?.value.startsWith(baseurl()))\r\n {\r\n e.dialog.setData({\r\n src: {\r\n value: `#(storage):${data.src.value.split('/').pop()}`\r\n }\r\n });\r\n }\r\n });\r\n }\r\n };\r\n\r\n return merge(options, this.editorOptions);\r\n }\r\n\r\n @Emit('update:modelValue')\r\n private updateModel(content: string): string\r\n {\r\n return content;\r\n }\r\n\r\n private callbackValue(files: any[]): void\r\n {\r\n if (this.modal === true)\r\n {\r\n const file = head(files);\r\n const params = this.filemanager;\r\n\r\n if (file)\r\n {\r\n const url = `#(storage):${file.publicId}`;\r\n const size = this.$filters.filesize(file.contentLength);\r\n const text = `${file.name} [${size}]`;\r\n\r\n if (params.meta.filetype === 'file')\r\n {\r\n params.callback(url, { text: params.meta.text || text, title: file.name });\r\n }\r\n if (params.meta.filetype === 'image')\r\n {\r\n params.callback(url, { alt: file.name, width: file.meta.width, height: file.meta.height });\r\n }\r\n if (params.meta.filetype === 'media')\r\n {\r\n params.callback(url, { width: 480, height: 270 });\r\n }\r\n }\r\n\r\n this.closeModal();\r\n }\r\n }\r\n\r\n private closeModal(): void\r\n {\r\n this.modal = false;\r\n }\r\n\r\n @Watch('modelValue')\r\n private onValueChanged(value: string, old: string): void\r\n {\r\n if (this.editor() && value !== this.content && value !== old)\r\n {\r\n value = this.filterXSS(value);\r\n this.editor().setContent(value);\r\n this.content = value;\r\n }\r\n }\r\n\r\n private templates(): any[]\r\n {\r\n return [\r\n {\r\n title: '1/2',\r\n description: this.$t('[[[Wstaw dwie równe kolumny]]]'),\r\n content: `\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n

\r\n `\r\n },\r\n {\r\n title: '2/3 - 1/3',\r\n description: this.$t('[[[Wstaw dwie kolumny 2/3 oraz 1/3]]]'),\r\n content: `\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n

\r\n `\r\n },\r\n {\r\n title: '1/3',\r\n description: this.$t('[[[Wstaw trzy kolumny 1/3]]]'),\r\n content: `\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n

\r\n `\r\n },\r\n {\r\n title: '1/4',\r\n description: this.$t('[[[Wstaw cztery kolumny 1/4]]]'),\r\n content: `\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n

\r\n `\r\n },\r\n {\r\n title: '1/3 - 2/3',\r\n description: this.$t('[[[Wstaw dwie kolumny 1/3 oraz 2/3]]]'),\r\n content: `\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n  Lorem ipsum...\r\n
\r\n
\r\n

\r\n `\r\n },\r\n {\r\n title: this.$t('[[[Ważne informacje]]]'),\r\n description: this.$t('[[[Wstaw szablon informacyjny ze zdjęciem]]]'),\r\n content: `\r\n
\r\n
\r\n \r\n
\r\n
\r\n  Treść komunikatu\r\n
\r\n
\r\n

\r\n `\r\n }\r\n ];\r\n }\r\n}\r\n","import { render } from \"./Editor.vue?vue&type=template&id=e2c942e2&ts=true\"\nimport script from \"./Editor.vue?vue&type=script&lang=ts\"\nexport * from \"./Editor.vue?vue&type=script&lang=ts\"\n\nimport \"./Editor.vue?vue&type=style&index=0&id=e2c942e2&lang=scss\"\n\nimport exportComponent from \"C:\\\\Agent\\\\ideo-logito\\\\_work\\\\15\\\\s\\\\Ideo.Core.Web.Admin\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// Exports the \"textpattern\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textpattern')\n// ES2015:\n// import 'tinymce/plugins/textpattern'\nrequire('./plugin.js');","/**\n * cssfilter\n *\n * @author 老雷\n */\n\nfunction getDefaultWhiteList () {\n // 白名单值说明:\n // true: 允许该属性\n // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许\n // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许\n // 除上面列出的值外均表示不允许\n var whiteList = {};\n\n whiteList['align-content'] = false; // default: auto\n whiteList['align-items'] = false; // default: auto\n whiteList['align-self'] = false; // default: auto\n whiteList['alignment-adjust'] = false; // default: auto\n whiteList['alignment-baseline'] = false; // default: baseline\n whiteList['all'] = false; // default: depending on individual properties\n whiteList['anchor-point'] = false; // default: none\n whiteList['animation'] = false; // default: depending on individual properties\n whiteList['animation-delay'] = false; // default: 0\n whiteList['animation-direction'] = false; // default: normal\n whiteList['animation-duration'] = false; // default: 0\n whiteList['animation-fill-mode'] = false; // default: none\n whiteList['animation-iteration-count'] = false; // default: 1\n whiteList['animation-name'] = false; // default: none\n whiteList['animation-play-state'] = false; // default: running\n whiteList['animation-timing-function'] = false; // default: ease\n whiteList['azimuth'] = false; // default: center\n whiteList['backface-visibility'] = false; // default: visible\n whiteList['background'] = true; // default: depending on individual properties\n whiteList['background-attachment'] = true; // default: scroll\n whiteList['background-clip'] = true; // default: border-box\n whiteList['background-color'] = true; // default: transparent\n whiteList['background-image'] = true; // default: none\n whiteList['background-origin'] = true; // default: padding-box\n whiteList['background-position'] = true; // default: 0% 0%\n whiteList['background-repeat'] = true; // default: repeat\n whiteList['background-size'] = true; // default: auto\n whiteList['baseline-shift'] = false; // default: baseline\n whiteList['binding'] = false; // default: none\n whiteList['bleed'] = false; // default: 6pt\n whiteList['bookmark-label'] = false; // default: content()\n whiteList['bookmark-level'] = false; // default: none\n whiteList['bookmark-state'] = false; // default: open\n whiteList['border'] = true; // default: depending on individual properties\n whiteList['border-bottom'] = true; // default: depending on individual properties\n whiteList['border-bottom-color'] = true; // default: current color\n whiteList['border-bottom-left-radius'] = true; // default: 0\n whiteList['border-bottom-right-radius'] = true; // default: 0\n whiteList['border-bottom-style'] = true; // default: none\n whiteList['border-bottom-width'] = true; // default: medium\n whiteList['border-collapse'] = true; // default: separate\n whiteList['border-color'] = true; // default: depending on individual properties\n whiteList['border-image'] = true; // default: none\n whiteList['border-image-outset'] = true; // default: 0\n whiteList['border-image-repeat'] = true; // default: stretch\n whiteList['border-image-slice'] = true; // default: 100%\n whiteList['border-image-source'] = true; // default: none\n whiteList['border-image-width'] = true; // default: 1\n whiteList['border-left'] = true; // default: depending on individual properties\n whiteList['border-left-color'] = true; // default: current color\n whiteList['border-left-style'] = true; // default: none\n whiteList['border-left-width'] = true; // default: medium\n whiteList['border-radius'] = true; // default: 0\n whiteList['border-right'] = true; // default: depending on individual properties\n whiteList['border-right-color'] = true; // default: current color\n whiteList['border-right-style'] = true; // default: none\n whiteList['border-right-width'] = true; // default: medium\n whiteList['border-spacing'] = true; // default: 0\n whiteList['border-style'] = true; // default: depending on individual properties\n whiteList['border-top'] = true; // default: depending on individual properties\n whiteList['border-top-color'] = true; // default: current color\n whiteList['border-top-left-radius'] = true; // default: 0\n whiteList['border-top-right-radius'] = true; // default: 0\n whiteList['border-top-style'] = true; // default: none\n whiteList['border-top-width'] = true; // default: medium\n whiteList['border-width'] = true; // default: depending on individual properties\n whiteList['bottom'] = false; // default: auto\n whiteList['box-decoration-break'] = true; // default: slice\n whiteList['box-shadow'] = true; // default: none\n whiteList['box-sizing'] = true; // default: content-box\n whiteList['box-snap'] = true; // default: none\n whiteList['box-suppress'] = true; // default: show\n whiteList['break-after'] = true; // default: auto\n whiteList['break-before'] = true; // default: auto\n whiteList['break-inside'] = true; // default: auto\n whiteList['caption-side'] = false; // default: top\n whiteList['chains'] = false; // default: none\n whiteList['clear'] = true; // default: none\n whiteList['clip'] = false; // default: auto\n whiteList['clip-path'] = false; // default: none\n whiteList['clip-rule'] = false; // default: nonzero\n whiteList['color'] = true; // default: implementation dependent\n whiteList['color-interpolation-filters'] = true; // default: auto\n whiteList['column-count'] = false; // default: auto\n whiteList['column-fill'] = false; // default: balance\n whiteList['column-gap'] = false; // default: normal\n whiteList['column-rule'] = false; // default: depending on individual properties\n whiteList['column-rule-color'] = false; // default: current color\n whiteList['column-rule-style'] = false; // default: medium\n whiteList['column-rule-width'] = false; // default: medium\n whiteList['column-span'] = false; // default: none\n whiteList['column-width'] = false; // default: auto\n whiteList['columns'] = false; // default: depending on individual properties\n whiteList['contain'] = false; // default: none\n whiteList['content'] = false; // default: normal\n whiteList['counter-increment'] = false; // default: none\n whiteList['counter-reset'] = false; // default: none\n whiteList['counter-set'] = false; // default: none\n whiteList['crop'] = false; // default: auto\n whiteList['cue'] = false; // default: depending on individual properties\n whiteList['cue-after'] = false; // default: none\n whiteList['cue-before'] = false; // default: none\n whiteList['cursor'] = false; // default: auto\n whiteList['direction'] = false; // default: ltr\n whiteList['display'] = true; // default: depending on individual properties\n whiteList['display-inside'] = true; // default: auto\n whiteList['display-list'] = true; // default: none\n whiteList['display-outside'] = true; // default: inline-level\n whiteList['dominant-baseline'] = false; // default: auto\n whiteList['elevation'] = false; // default: level\n whiteList['empty-cells'] = false; // default: show\n whiteList['filter'] = false; // default: none\n whiteList['flex'] = false; // default: depending on individual properties\n whiteList['flex-basis'] = false; // default: auto\n whiteList['flex-direction'] = false; // default: row\n whiteList['flex-flow'] = false; // default: depending on individual properties\n whiteList['flex-grow'] = false; // default: 0\n whiteList['flex-shrink'] = false; // default: 1\n whiteList['flex-wrap'] = false; // default: nowrap\n whiteList['float'] = false; // default: none\n whiteList['float-offset'] = false; // default: 0 0\n whiteList['flood-color'] = false; // default: black\n whiteList['flood-opacity'] = false; // default: 1\n whiteList['flow-from'] = false; // default: none\n whiteList['flow-into'] = false; // default: none\n whiteList['font'] = true; // default: depending on individual properties\n whiteList['font-family'] = true; // default: implementation dependent\n whiteList['font-feature-settings'] = true; // default: normal\n whiteList['font-kerning'] = true; // default: auto\n whiteList['font-language-override'] = true; // default: normal\n whiteList['font-size'] = true; // default: medium\n whiteList['font-size-adjust'] = true; // default: none\n whiteList['font-stretch'] = true; // default: normal\n whiteList['font-style'] = true; // default: normal\n whiteList['font-synthesis'] = true; // default: weight style\n whiteList['font-variant'] = true; // default: normal\n whiteList['font-variant-alternates'] = true; // default: normal\n whiteList['font-variant-caps'] = true; // default: normal\n whiteList['font-variant-east-asian'] = true; // default: normal\n whiteList['font-variant-ligatures'] = true; // default: normal\n whiteList['font-variant-numeric'] = true; // default: normal\n whiteList['font-variant-position'] = true; // default: normal\n whiteList['font-weight'] = true; // default: normal\n whiteList['grid'] = false; // default: depending on individual properties\n whiteList['grid-area'] = false; // default: depending on individual properties\n whiteList['grid-auto-columns'] = false; // default: auto\n whiteList['grid-auto-flow'] = false; // default: none\n whiteList['grid-auto-rows'] = false; // default: auto\n whiteList['grid-column'] = false; // default: depending on individual properties\n whiteList['grid-column-end'] = false; // default: auto\n whiteList['grid-column-start'] = false; // default: auto\n whiteList['grid-row'] = false; // default: depending on individual properties\n whiteList['grid-row-end'] = false; // default: auto\n whiteList['grid-row-start'] = false; // default: auto\n whiteList['grid-template'] = false; // default: depending on individual properties\n whiteList['grid-template-areas'] = false; // default: none\n whiteList['grid-template-columns'] = false; // default: none\n whiteList['grid-template-rows'] = false; // default: none\n whiteList['hanging-punctuation'] = false; // default: none\n whiteList['height'] = true; // default: auto\n whiteList['hyphens'] = false; // default: manual\n whiteList['icon'] = false; // default: auto\n whiteList['image-orientation'] = false; // default: auto\n whiteList['image-resolution'] = false; // default: normal\n whiteList['ime-mode'] = false; // default: auto\n whiteList['initial-letters'] = false; // default: normal\n whiteList['inline-box-align'] = false; // default: last\n whiteList['justify-content'] = false; // default: auto\n whiteList['justify-items'] = false; // default: auto\n whiteList['justify-self'] = false; // default: auto\n whiteList['left'] = false; // default: auto\n whiteList['letter-spacing'] = true; // default: normal\n whiteList['lighting-color'] = true; // default: white\n whiteList['line-box-contain'] = false; // default: block inline replaced\n whiteList['line-break'] = false; // default: auto\n whiteList['line-grid'] = false; // default: match-parent\n whiteList['line-height'] = false; // default: normal\n whiteList['line-snap'] = false; // default: none\n whiteList['line-stacking'] = false; // default: depending on individual properties\n whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n whiteList['line-stacking-shift'] = false; // default: consider-shifts\n whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n whiteList['list-style'] = true; // default: depending on individual properties\n whiteList['list-style-image'] = true; // default: none\n whiteList['list-style-position'] = true; // default: outside\n whiteList['list-style-type'] = true; // default: disc\n whiteList['margin'] = true; // default: depending on individual properties\n whiteList['margin-bottom'] = true; // default: 0\n whiteList['margin-left'] = true; // default: 0\n whiteList['margin-right'] = true; // default: 0\n whiteList['margin-top'] = true; // default: 0\n whiteList['marker-offset'] = false; // default: auto\n whiteList['marker-side'] = false; // default: list-item\n whiteList['marks'] = false; // default: none\n whiteList['mask'] = false; // default: border-box\n whiteList['mask-box'] = false; // default: see individual properties\n whiteList['mask-box-outset'] = false; // default: 0\n whiteList['mask-box-repeat'] = false; // default: stretch\n whiteList['mask-box-slice'] = false; // default: 0 fill\n whiteList['mask-box-source'] = false; // default: none\n whiteList['mask-box-width'] = false; // default: auto\n whiteList['mask-clip'] = false; // default: border-box\n whiteList['mask-image'] = false; // default: none\n whiteList['mask-origin'] = false; // default: border-box\n whiteList['mask-position'] = false; // default: center\n whiteList['mask-repeat'] = false; // default: no-repeat\n whiteList['mask-size'] = false; // default: border-box\n whiteList['mask-source-type'] = false; // default: auto\n whiteList['mask-type'] = false; // default: luminance\n whiteList['max-height'] = true; // default: none\n whiteList['max-lines'] = false; // default: none\n whiteList['max-width'] = true; // default: none\n whiteList['min-height'] = true; // default: 0\n whiteList['min-width'] = true; // default: 0\n whiteList['move-to'] = false; // default: normal\n whiteList['nav-down'] = false; // default: auto\n whiteList['nav-index'] = false; // default: auto\n whiteList['nav-left'] = false; // default: auto\n whiteList['nav-right'] = false; // default: auto\n whiteList['nav-up'] = false; // default: auto\n whiteList['object-fit'] = false; // default: fill\n whiteList['object-position'] = false; // default: 50% 50%\n whiteList['opacity'] = false; // default: 1\n whiteList['order'] = false; // default: 0\n whiteList['orphans'] = false; // default: 2\n whiteList['outline'] = false; // default: depending on individual properties\n whiteList['outline-color'] = false; // default: invert\n whiteList['outline-offset'] = false; // default: 0\n whiteList['outline-style'] = false; // default: none\n whiteList['outline-width'] = false; // default: medium\n whiteList['overflow'] = false; // default: depending on individual properties\n whiteList['overflow-wrap'] = false; // default: normal\n whiteList['overflow-x'] = false; // default: visible\n whiteList['overflow-y'] = false; // default: visible\n whiteList['padding'] = true; // default: depending on individual properties\n whiteList['padding-bottom'] = true; // default: 0\n whiteList['padding-left'] = true; // default: 0\n whiteList['padding-right'] = true; // default: 0\n whiteList['padding-top'] = true; // default: 0\n whiteList['page'] = false; // default: auto\n whiteList['page-break-after'] = false; // default: auto\n whiteList['page-break-before'] = false; // default: auto\n whiteList['page-break-inside'] = false; // default: auto\n whiteList['page-policy'] = false; // default: start\n whiteList['pause'] = false; // default: implementation dependent\n whiteList['pause-after'] = false; // default: implementation dependent\n whiteList['pause-before'] = false; // default: implementation dependent\n whiteList['perspective'] = false; // default: none\n whiteList['perspective-origin'] = false; // default: 50% 50%\n whiteList['pitch'] = false; // default: medium\n whiteList['pitch-range'] = false; // default: 50\n whiteList['play-during'] = false; // default: auto\n whiteList['position'] = false; // default: static\n whiteList['presentation-level'] = false; // default: 0\n whiteList['quotes'] = false; // default: text\n whiteList['region-fragment'] = false; // default: auto\n whiteList['resize'] = false; // default: none\n whiteList['rest'] = false; // default: depending on individual properties\n whiteList['rest-after'] = false; // default: none\n whiteList['rest-before'] = false; // default: none\n whiteList['richness'] = false; // default: 50\n whiteList['right'] = false; // default: auto\n whiteList['rotation'] = false; // default: 0\n whiteList['rotation-point'] = false; // default: 50% 50%\n whiteList['ruby-align'] = false; // default: auto\n whiteList['ruby-merge'] = false; // default: separate\n whiteList['ruby-position'] = false; // default: before\n whiteList['shape-image-threshold'] = false; // default: 0.0\n whiteList['shape-outside'] = false; // default: none\n whiteList['shape-margin'] = false; // default: 0\n whiteList['size'] = false; // default: auto\n whiteList['speak'] = false; // default: auto\n whiteList['speak-as'] = false; // default: normal\n whiteList['speak-header'] = false; // default: once\n whiteList['speak-numeral'] = false; // default: continuous\n whiteList['speak-punctuation'] = false; // default: none\n whiteList['speech-rate'] = false; // default: medium\n whiteList['stress'] = false; // default: 50\n whiteList['string-set'] = false; // default: none\n whiteList['tab-size'] = false; // default: 8\n whiteList['table-layout'] = false; // default: auto\n whiteList['text-align'] = true; // default: start\n whiteList['text-align-last'] = true; // default: auto\n whiteList['text-combine-upright'] = true; // default: none\n whiteList['text-decoration'] = true; // default: none\n whiteList['text-decoration-color'] = true; // default: currentColor\n whiteList['text-decoration-line'] = true; // default: none\n whiteList['text-decoration-skip'] = true; // default: objects\n whiteList['text-decoration-style'] = true; // default: solid\n whiteList['text-emphasis'] = true; // default: depending on individual properties\n whiteList['text-emphasis-color'] = true; // default: currentColor\n whiteList['text-emphasis-position'] = true; // default: over right\n whiteList['text-emphasis-style'] = true; // default: none\n whiteList['text-height'] = true; // default: auto\n whiteList['text-indent'] = true; // default: 0\n whiteList['text-justify'] = true; // default: auto\n whiteList['text-orientation'] = true; // default: mixed\n whiteList['text-overflow'] = true; // default: clip\n whiteList['text-shadow'] = true; // default: none\n whiteList['text-space-collapse'] = true; // default: collapse\n whiteList['text-transform'] = true; // default: none\n whiteList['text-underline-position'] = true; // default: auto\n whiteList['text-wrap'] = true; // default: normal\n whiteList['top'] = false; // default: auto\n whiteList['transform'] = false; // default: none\n whiteList['transform-origin'] = false; // default: 50% 50% 0\n whiteList['transform-style'] = false; // default: flat\n whiteList['transition'] = false; // default: depending on individual properties\n whiteList['transition-delay'] = false; // default: 0s\n whiteList['transition-duration'] = false; // default: 0s\n whiteList['transition-property'] = false; // default: all\n whiteList['transition-timing-function'] = false; // default: ease\n whiteList['unicode-bidi'] = false; // default: normal\n whiteList['vertical-align'] = false; // default: baseline\n whiteList['visibility'] = false; // default: visible\n whiteList['voice-balance'] = false; // default: center\n whiteList['voice-duration'] = false; // default: auto\n whiteList['voice-family'] = false; // default: implementation dependent\n whiteList['voice-pitch'] = false; // default: medium\n whiteList['voice-range'] = false; // default: medium\n whiteList['voice-rate'] = false; // default: normal\n whiteList['voice-stress'] = false; // default: normal\n whiteList['voice-volume'] = false; // default: medium\n whiteList['volume'] = false; // default: medium\n whiteList['white-space'] = false; // default: normal\n whiteList['widows'] = false; // default: 2\n whiteList['width'] = true; // default: auto\n whiteList['will-change'] = false; // default: auto\n whiteList['word-break'] = true; // default: normal\n whiteList['word-spacing'] = true; // default: normal\n whiteList['word-wrap'] = true; // default: normal\n whiteList['wrap-flow'] = false; // default: auto\n whiteList['wrap-through'] = false; // default: wrap\n whiteList['writing-mode'] = false; // default: horizontal-tb\n whiteList['z-index'] = false; // default: auto\n\n return whiteList;\n}\n\n\n/**\n * 匹配到白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onAttr (name, value, options) {\n // do nothing\n}\n\n/**\n * 匹配到不在白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreAttr (name, value, options) {\n // do nothing\n}\n\nvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n/**\n * 过滤属性值\n *\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction safeAttrValue(name, value) {\n if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n return value;\n}\n\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onAttr = onAttr;\nexports.onIgnoreAttr = onIgnoreAttr;\nexports.safeAttrValue = safeAttrValue;\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasProPlugin = function (editor) {\n if (editor.hasPlugin('powerpaste', true)) {\n if (typeof window.console !== 'undefined' && window.console.log) {\n window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\'paste\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n\n var get = function (clipboard, quirks) {\n return {\n clipboard: clipboard,\n quirks: quirks\n };\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n\n var nativeSlice = Array.prototype.slice;\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var value = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var repeat = function (s, count) {\n return count <= 0 ? '' : new Array(count + 1).join(s);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var firePastePreProcess = function (editor, html, internal, isWordHtml) {\n return editor.fire('PastePreProcess', {\n content: html,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePostProcess = function (editor, node, internal, isWordHtml) {\n return editor.fire('PastePostProcess', {\n node: node,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePlainTextToggle = function (editor, state) {\n return editor.fire('PastePlainTextToggle', { state: state });\n };\n var firePaste = function (editor, ieFake) {\n return editor.fire('paste', { ieFake: ieFake });\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var shouldBlockDrop = function (editor) {\n return editor.getParam('paste_block_drop', false);\n };\n var shouldPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false);\n };\n var shouldFilterDrop = function (editor) {\n return editor.getParam('paste_filter_drop', true);\n };\n var getPreProcess = function (editor) {\n return editor.getParam('paste_preprocess');\n };\n var getPostProcess = function (editor) {\n return editor.getParam('paste_postprocess');\n };\n var getWebkitStyles = function (editor) {\n return editor.getParam('paste_webkit_styles');\n };\n var shouldRemoveWebKitStyles = function (editor) {\n return editor.getParam('paste_remove_styles_if_webkit', true);\n };\n var shouldMergeFormats = function (editor) {\n return editor.getParam('paste_merge_formats', true);\n };\n var isSmartPasteEnabled = function (editor) {\n return editor.getParam('smart_paste', true);\n };\n var isPasteAsTextEnabled = function (editor) {\n return editor.getParam('paste_as_text', false);\n };\n var getRetainStyleProps = function (editor) {\n return editor.getParam('paste_retain_style_properties');\n };\n var getWordValidElements = function (editor) {\n var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\n return editor.getParam('paste_word_valid_elements', defaultValidElements);\n };\n var shouldConvertWordFakeLists = function (editor) {\n return editor.getParam('paste_convert_word_fake_lists', true);\n };\n var shouldUseDefaultFilters = function (editor) {\n return editor.getParam('paste_enable_default_filters', true);\n };\n var getValidate = function (editor) {\n return editor.getParam('validate');\n };\n var getAllowHtmlDataUrls = function (editor) {\n return editor.getParam('allow_html_data_urls', false, 'boolean');\n };\n var getPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false, 'boolean');\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter');\n };\n var getImagesReuseFilename = function (editor) {\n return editor.getParam('images_reuse_filename');\n };\n var getForcedRootBlock = function (editor) {\n return editor.getParam('forced_root_block');\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs');\n };\n var getTabSpaces = function (editor) {\n return editor.getParam('paste_tab_spaces', 4, 'number');\n };\n var getAllowedImageFileTypes = function (editor) {\n var defaultImageFileTypes = 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp';\n return global$5.explode(editor.getParam('images_file_types', defaultImageFileTypes, 'string'));\n };\n\n var internalMimeType = 'x-tinymce/html';\n var internalMark = '';\n var mark = function (html) {\n return internalMark + html;\n };\n var unmark = function (html) {\n return html.replace(internalMark, '');\n };\n var isMarked = function (html) {\n return html.indexOf(internalMark) !== -1;\n };\n var internalHtmlMime = function () {\n return internalMimeType;\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var isPlainText = function (text) {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n var toBRs = function (text) {\n return text.replace(/\\r?\\n/g, '
');\n };\n var openContainer = function (rootTag, rootAttrs) {\n var key;\n var attrs = [];\n var tag = '<' + rootTag;\n if (typeof rootAttrs === 'object') {\n for (key in rootAttrs) {\n if (rootAttrs.hasOwnProperty(key)) {\n attrs.push(key + '=\"' + global$6.encodeAllRaw(rootAttrs[key]) + '\"');\n }\n }\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n }\n return tag + '>';\n };\n var toBlockElements = function (text, rootTag, rootAttrs) {\n var blocks = text.split(/\\n\\n/);\n var tagOpen = openContainer(rootTag, rootAttrs);\n var tagClose = '';\n var paragraphs = global$5.map(blocks, function (p) {\n return p.split(/\\n/).join('
');\n });\n var stitch = function (p) {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : global$5.map(paragraphs, stitch).join('');\n };\n var convert = function (text, rootTag, rootAttrs) {\n return rootTag ? toBlockElements(text, rootTag === true ? 'p' : rootTag, rootAttrs) : toBRs(text);\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n var nbsp = '\\xA0';\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var filter$1 = function (content, items) {\n global$5.each(items, function (v) {\n if (v.constructor === RegExp) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n };\n var innerText = function (html) {\n var schema = global$a();\n var domParser = global$7({}, schema);\n var text = '';\n var shortEndedElements = schema.getShortEndedElements();\n var ignoreElements = global$5.makeMap('script noscript style textarea video audio iframe object', ' ');\n var blockElements = schema.getBlockElements();\n var walk = function (node) {\n var name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (shortEndedElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!node.shortEnded) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n };\n html = filter$1(html, [//g]);\n walk(domParser.parse(html));\n return text;\n };\n var trimHtml = function (html) {\n var trimSpaces = function (all, s1, s2) {\n if (!s1 && !s2) {\n return ' ';\n }\n return nbsp;\n };\n html = filter$1(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
/g,\n /
$/i\n ]);\n return html;\n };\n var createIdGenerator = function (prefix) {\n var count = 0;\n return function () {\n return prefix + count++;\n };\n };\n var getImageMimeType = function (ext) {\n var lowerExt = ext.toLowerCase();\n var mimeOverrides = {\n jpg: 'jpeg',\n jpe: 'jpeg',\n jfi: 'jpeg',\n jif: 'jpeg',\n jfif: 'jpeg',\n pjpeg: 'jpeg',\n pjp: 'jpeg',\n svg: 'svg+xml'\n };\n return global$5.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n };\n\n var isWordContent = function (content) {\n return / 1) {\n currentListNode.attr('start', '' + start);\n }\n paragraphNode.wrap(currentListNode);\n } else {\n currentListNode.append(paragraphNode);\n }\n paragraphNode.name = 'li';\n if (level > lastLevel && prevListNode) {\n prevListNode.lastChild.append(currentListNode);\n }\n lastLevel = level;\n removeIgnoredNodes(paragraphNode);\n trimListStart(paragraphNode, /^\\u00a0+/);\n trimListStart(paragraphNode, /^\\s*([\\u2022\\u00b7\\u00a7\\u25CF]|\\w+\\.)/);\n trimListStart(paragraphNode, /^\\u00a0+/);\n };\n var elements = [];\n var child = node.firstChild;\n while (typeof child !== 'undefined' && child !== null) {\n elements.push(child);\n child = child.walk();\n if (child !== null) {\n while (typeof child !== 'undefined' && child.parent !== node) {\n child = child.walk();\n }\n }\n }\n for (var i = 0; i < elements.length; i++) {\n node = elements[i];\n if (node.name === 'p' && node.firstChild) {\n var nodeText = getText(node);\n if (isBulletList(nodeText)) {\n convertParagraphToLi(node, 'ul');\n continue;\n }\n if (isNumericList(nodeText)) {\n var matches = /([0-9]+)\\./.exec(nodeText);\n var start = 1;\n if (matches) {\n start = parseInt(matches[1], 10);\n }\n convertParagraphToLi(node, 'ol', start);\n continue;\n }\n if (node._listLevel) {\n convertParagraphToLi(node, 'ul', 1);\n continue;\n }\n currentListNode = null;\n } else {\n prevListNode = currentListNode;\n currentListNode = null;\n }\n }\n };\n var filterStyles = function (editor, validStyles, node, styleValue) {\n var outputStyles = {}, matches;\n var styles = editor.dom.parseStyle(styleValue);\n global$5.each(styles, function (value, name) {\n switch (name) {\n case 'mso-list':\n matches = /\\w+ \\w+([0-9]+)/i.exec(styleValue);\n if (matches) {\n node._listLevel = parseInt(matches[1], 10);\n }\n if (/Ignore/i.test(value) && node.firstChild) {\n node._listIgnore = true;\n node.firstChild._listIgnore = true;\n }\n break;\n case 'horiz-align':\n name = 'text-align';\n break;\n case 'vert-align':\n name = 'vertical-align';\n break;\n case 'font-color':\n case 'mso-foreground':\n name = 'color';\n break;\n case 'mso-background':\n case 'mso-highlight':\n name = 'background';\n break;\n case 'font-weight':\n case 'font-style':\n if (value !== 'normal') {\n outputStyles[name] = value;\n }\n return;\n case 'mso-element':\n if (/^(comment|comment-list)$/i.test(value)) {\n node.remove();\n return;\n }\n break;\n }\n if (name.indexOf('mso-comment') === 0) {\n node.remove();\n return;\n }\n if (name.indexOf('mso-') === 0) {\n return;\n }\n if (getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {\n outputStyles[name] = value;\n }\n });\n if (/(bold)/i.test(outputStyles['font-weight'])) {\n delete outputStyles['font-weight'];\n node.wrap(new global$9('b', 1));\n }\n if (/(italic)/i.test(outputStyles['font-style'])) {\n delete outputStyles['font-style'];\n node.wrap(new global$9('i', 1));\n }\n outputStyles = editor.dom.serializeStyle(outputStyles, node.name);\n if (outputStyles) {\n return outputStyles;\n }\n return null;\n };\n var filterWordContent = function (editor, content) {\n var validStyles;\n var retainStyleProperties = getRetainStyleProps(editor);\n if (retainStyleProperties) {\n validStyles = global$5.makeMap(retainStyleProperties.split(/[, ]/));\n }\n content = filter$1(content, [\n /
/gi,\n /]+id=\"?docs-internal-[^>]*>/gi,\n //gi,\n /<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|img|meta|link|style|\\w:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\n [\n /<(\\/?)s>/gi,\n '<$1strike>'\n ],\n [\n / /gi,\n nbsp\n ],\n [\n /([\\s\\u00a0]*)<\\/span>/gi,\n function (str, spaces) {\n return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join(nbsp) : '';\n }\n ]\n ]);\n var validElements = getWordValidElements(editor);\n var schema = global$a({\n valid_elements: validElements,\n valid_children: '-li[p]'\n });\n global$5.each(schema.elements, function (rule) {\n if (!rule.attributes.class) {\n rule.attributes.class = {};\n rule.attributesOrder.push('class');\n }\n if (!rule.attributes.style) {\n rule.attributes.style = {};\n rule.attributesOrder.push('style');\n }\n });\n var domParser = global$7({}, schema);\n domParser.addAttributeFilter('style', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));\n if (node.name === 'span' && node.parent && !node.attributes.length) {\n node.unwrap();\n }\n }\n });\n domParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {\n node.remove();\n }\n node.attr('class', null);\n }\n });\n domParser.addNodeFilter('del', function (nodes) {\n var i = nodes.length;\n while (i--) {\n nodes[i].remove();\n }\n });\n domParser.addNodeFilter('a', function (nodes) {\n var i = nodes.length, node, href, name;\n while (i--) {\n node = nodes[i];\n href = node.attr('href');\n name = node.attr('name');\n if (href && href.indexOf('#_msocom_') !== -1) {\n node.remove();\n continue;\n }\n if (href && href.indexOf('file://') === 0) {\n href = href.split('#')[1];\n if (href) {\n href = '#' + href;\n }\n }\n if (!href && !name) {\n node.unwrap();\n } else {\n if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {\n node.unwrap();\n continue;\n }\n node.attr({\n href: href,\n name: name\n });\n }\n }\n });\n var rootNode = domParser.parse(content);\n if (shouldConvertWordFakeLists(editor)) {\n convertFakeListsToProperLists(rootNode);\n }\n content = global$8({ validate: getValidate(editor) }, schema).serialize(rootNode);\n return content;\n };\n var preProcess = function (editor, content) {\n return shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;\n };\n\n var preProcess$1 = function (editor, html) {\n var parser = global$7({}, editor.schema);\n parser.addNodeFilter('meta', function (nodes) {\n global$5.each(nodes, function (node) {\n node.remove();\n });\n });\n var fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return global$8({ validate: getValidate(editor) }, editor.schema).serialize(fragment);\n };\n var processResult = function (content, cancelled) {\n return {\n content: content,\n cancelled: cancelled\n };\n };\n var postProcessFilter = function (editor, html, internal, isWordHtml) {\n var tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n var postProcessArgs = firePastePostProcess(editor, tempBody, internal, isWordHtml);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n var filterContent = function (editor, content, internal, isWordHtml) {\n var preProcessArgs = firePastePreProcess(editor, content, internal, isWordHtml);\n var filteredContent = preProcess$1(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal, isWordHtml);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n var process = function (editor, html, internal) {\n var isWordHtml = isWordContent(html);\n var content = isWordHtml ? preProcess(editor, html) : html;\n return filterContent(editor, content, internal, isWordHtml);\n };\n\n var pasteHtml = function (editor, html) {\n editor.insertContent(html, {\n merge: shouldMergeFormats(editor),\n paste: true\n });\n return true;\n };\n var isAbsoluteUrl = function (url) {\n return /^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(url);\n };\n var isImageUrl = function (editor, url) {\n return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), function (type) {\n return endsWith(url.toLowerCase(), '.' + type.toLowerCase());\n });\n };\n var createImage = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.insertContent('');\n });\n return true;\n };\n var createLink = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n var linkSelection = function (editor, html, pasteHtmlFn) {\n return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n };\n var insertImage = function (editor, html, pasteHtmlFn) {\n return isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n };\n var smartInsertContent = function (editor, html) {\n global$5.each([\n linkSelection,\n insertImage,\n pasteHtml\n ], function (action) {\n return action(editor, html, pasteHtml) !== true;\n });\n };\n var insertContent = function (editor, html, pasteAsText) {\n if (pasteAsText || isSmartPasteEnabled(editor) === false) {\n pasteHtml(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n\n var isCollapsibleWhitespace = function (c) {\n return ' \\f\\t\\x0B'.indexOf(c) !== -1;\n };\n var isNewLineChar = function (c) {\n return c === '\\n' || c === '\\r';\n };\n var isNewline = function (text, idx) {\n return idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n };\n var normalizeWhitespace = function (editor, text) {\n var tabSpace = repeat(' ', getTabSpaces(editor));\n var normalizedText = text.replace(/\\t/g, tabSpace);\n var result = foldl(normalizedText, function (acc, c) {\n if (isCollapsibleWhitespace(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' || acc.str.length === normalizedText.length - 1 || 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 var doPaste = function (editor, content, internal, pasteAsText) {\n var args = process(editor, content, internal);\n if (args.cancelled === false) {\n insertContent(editor, args.content, pasteAsText);\n }\n };\n var pasteHtml$1 = function (editor, html, internalFlag) {\n var internal = internalFlag ? internalFlag : isMarked(html);\n doPaste(editor, unmark(html), internal, false);\n };\n var pasteText = function (editor, text) {\n var encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n var normalizedText = normalizeWhitespace(editor, encodedText);\n var html = convert(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n doPaste(editor, html, false, true);\n };\n var getDataTransferItems = function (dataTransfer) {\n var items = {};\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n if (dataTransfer) {\n if (dataTransfer.getData) {\n var legacyText = dataTransfer.getData('Text');\n if (legacyText && legacyText.length > 0) {\n if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {\n items['text/plain'] = legacyText;\n }\n }\n }\n if (dataTransfer.types) {\n for (var i = 0; i < dataTransfer.types.length; i++) {\n var contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n }\n return items;\n };\n var getClipboardContent = function (editor, clipboardEvent) {\n return getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);\n };\n var hasContentType = function (clipboardContent, mimeType) {\n return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n };\n var hasHtmlOrText = function (content) {\n return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n };\n var parseDataUri = function (uri) {\n var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=]+)/i.exec(uri);\n if (matches) {\n return {\n type: matches[1],\n data: decodeURIComponent(matches[2])\n };\n } else {\n return {\n type: null,\n data: null\n };\n }\n };\n var isValidDataUriImage = function (editor, imgElm) {\n var filter = getImagesDataImgFilter(editor);\n return filter ? filter(imgElm) : true;\n };\n var extractFilename = function (editor, str) {\n var m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n return isNonNullable(m) ? editor.dom.encode(m[1]) : null;\n };\n var uniqueId = createIdGenerator('mceclip');\n var pasteImage = function (editor, imageItem) {\n var _a = parseDataUri(imageItem.uri), base64 = _a.data, type = _a.type;\n var id = uniqueId();\n var file = imageItem.blob;\n var img = new Image();\n img.src = imageItem.uri;\n if (isValidDataUriImage(editor, img)) {\n var blobCache = editor.editorUpload.blobCache;\n var blobInfo = void 0;\n var existingBlobInfo = blobCache.getByData(base64, type);\n if (!existingBlobInfo) {\n var useFileName = getImagesReuseFilename(editor) && isNonNullable(file.name);\n var name_1 = useFileName ? extractFilename(editor, file.name) : id;\n var filename = useFileName ? file.name : undefined;\n blobInfo = blobCache.create(id, file, base64, name_1, filename);\n blobCache.add(blobInfo);\n } else {\n blobInfo = existingBlobInfo;\n }\n pasteHtml$1(editor, '', false);\n } else {\n pasteHtml$1(editor, '', false);\n }\n };\n var isClipboardEvent = function (event) {\n return event.type === 'paste';\n };\n var isDataTransferItem = function (item) {\n return isNonNullable(item.getAsFile);\n };\n var readFilesAsDataUris = function (items) {\n return global$3.all(map(items, function (item) {\n return new global$3(function (resolve) {\n var blob = isDataTransferItem(item) ? item.getAsFile() : item;\n var reader = new window.FileReader();\n reader.onload = function () {\n resolve({\n blob: blob,\n uri: reader.result\n });\n };\n reader.readAsDataURL(blob);\n });\n }));\n };\n var isImage = function (editor) {\n var allowedExtensions = getAllowedImageFileTypes(editor);\n return function (file) {\n return startsWith(file.type, 'image/') && exists(allowedExtensions, function (extension) {\n return getImageMimeType(extension) === file.type;\n });\n };\n };\n var getImagesFromDataTransfer = function (editor, dataTransfer) {\n var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {\n return item.getAsFile();\n }) : [];\n var files = dataTransfer.files ? from$1(dataTransfer.files) : [];\n return filter(items.length > 0 ? items : files, isImage(editor));\n };\n var pasteImageData = function (editor, e, rng) {\n var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (getPasteDataImages(editor) && dataTransfer) {\n var images = getImagesFromDataTransfer(editor, dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readFilesAsDataUris(images).then(function (fileResults) {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each(fileResults, function (result) {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n var isBrokenAndroidClipboardEvent = function (e) {\n var clipboardData = e.clipboardData;\n return navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;\n };\n var isKeyboardPasteEvent = function (e) {\n return global$4.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n };\n var registerEventHandlers = function (editor, pasteBin, pasteFormat) {\n var keyboardPasteEvent = value();\n var keyboardPastePressed = value();\n var keyboardPastePlainTextState;\n editor.on('keyup', keyboardPastePressed.clear);\n editor.on('keydown', function (e) {\n var removePasteBinOnKeyUp = function (e) {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n pasteBin.remove();\n }\n };\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n if (keyboardPastePlainTextState && global$1.webkit && navigator.userAgent.indexOf('Version/') !== -1) {\n return;\n }\n e.stopImmediatePropagation();\n keyboardPasteEvent.set(e);\n keyboardPastePressed.set(true);\n if (global$1.ie && keyboardPastePlainTextState) {\n e.preventDefault();\n firePaste(editor, true);\n return;\n }\n pasteBin.remove();\n pasteBin.create();\n editor.once('keyup', removePasteBinOnKeyUp);\n editor.once('paste', function () {\n editor.off('keyup', removePasteBinOnKeyUp);\n });\n }\n });\n var insertClipboardContent = function (editor, clipboardContent, isKeyBoardPaste, plainTextMode, internal) {\n var content;\n if (hasContentType(clipboardContent, 'text/html')) {\n content = clipboardContent['text/html'];\n } else {\n content = pasteBin.getHtml();\n internal = internal ? internal : isMarked(content);\n if (pasteBin.isDefaultContent(content)) {\n plainTextMode = true;\n }\n }\n content = trimHtml(content);\n pasteBin.remove();\n var isPlainTextHtml = internal === false && isPlainText(content);\n var isImage = isImageUrl(editor, content);\n if (!content.length || isPlainTextHtml && !isImage) {\n plainTextMode = true;\n }\n if (plainTextMode || isImage) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = innerText(content);\n }\n }\n if (pasteBin.isDefaultContent(content)) {\n if (!isKeyBoardPaste) {\n editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');\n }\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content);\n } else {\n pasteHtml$1(editor, content, internal);\n }\n };\n var getLastRng = function () {\n return pasteBin.getLastRng() || editor.selection.getRng();\n };\n editor.on('paste', function (e) {\n var isKeyboardPaste = keyboardPasteEvent.isSet() || keyboardPastePressed.isSet();\n if (isKeyboardPaste) {\n keyboardPasteEvent.clear();\n }\n var clipboardContent = getClipboardContent(editor, e);\n var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n var internal = hasContentType(clipboardContent, internalHtmlMime());\n keyboardPastePlainTextState = false;\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n pasteBin.remove();\n return;\n }\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n pasteBin.remove();\n return;\n }\n if (!isKeyboardPaste) {\n e.preventDefault();\n }\n if (global$1.ie && (!isKeyboardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {\n pasteBin.create();\n editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {\n e.stopPropagation();\n });\n editor.getDoc().execCommand('Paste', false, null);\n clipboardContent['text/html'] = pasteBin.getHtml();\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n if (!internal) {\n internal = isMarked(clipboardContent['text/html']);\n }\n insertClipboardContent(editor, clipboardContent, isKeyboardPaste, plainTextMode, internal);\n } else {\n global$2.setEditorTimeout(editor, function () {\n insertClipboardContent(editor, clipboardContent, isKeyboardPaste, plainTextMode, internal);\n }, 0);\n }\n });\n };\n var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n var src;\n editor.parser.addNodeFilter('img', function (nodes, name, args) {\n var isPasteInsert = function (args) {\n return args.data && args.data.paste === true;\n };\n var remove = function (node) {\n if (!node.attr('data-mce-object') && src !== global$1.transparentSrc) {\n node.remove();\n }\n };\n var isWebKitFakeUrl = function (src) {\n return src.indexOf('webkit-fake-url') === 0;\n };\n var isDataUri = function (src) {\n return src.indexOf('data:') === 0;\n };\n if (!getPasteDataImages(editor) && isPasteInsert(args)) {\n var i = nodes.length;\n while (i--) {\n src = nodes[i].attr('src');\n if (!src) {\n continue;\n }\n if (isWebKitFakeUrl(src)) {\n remove(nodes[i]);\n } else if (!getAllowHtmlDataUrls(editor) && isDataUri(src)) {\n remove(nodes[i]);\n }\n }\n }\n });\n };\n\n var getPasteBinParent = function (editor) {\n return global$1.ie && editor.inline ? document.body : editor.getBody();\n };\n var isExternalPasteBin = function (editor) {\n return getPasteBinParent(editor) !== editor.getBody();\n };\n var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {\n if (isExternalPasteBin(editor)) {\n editor.dom.bind(pasteBinElm, 'paste keyup', function (_e) {\n if (!isDefault(editor, pasteBinDefaultContent)) {\n editor.fire('paste');\n }\n });\n }\n };\n var create = function (editor, lastRngCell, pasteBinDefaultContent) {\n var dom = editor.dom, body = editor.getBody();\n lastRngCell.set(editor.selection.getRng());\n var pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (global$1.ie || global$1.gecko) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {\n e.stopPropagation();\n });\n delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);\n pasteBinElm.focus();\n editor.selection.select(pasteBinElm, true);\n };\n var remove = function (editor, lastRngCell) {\n if (getEl(editor)) {\n var pasteBinClone = void 0;\n var lastRng = lastRngCell.get();\n while (pasteBinClone = editor.dom.get('mcepastebin')) {\n editor.dom.remove(pasteBinClone);\n editor.dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n var getEl = function (editor) {\n return editor.dom.get('mcepastebin');\n };\n var getHtml = function (editor) {\n var copyAndRemove = function (toElm, fromElm) {\n toElm.appendChild(fromElm);\n editor.dom.remove(fromElm, true);\n };\n var pasteBinClones = global$5.grep(getPasteBinParent(editor).childNodes, function (elm) {\n return elm.id === 'mcepastebin';\n });\n var pasteBinElm = pasteBinClones.shift();\n global$5.each(pasteBinClones, function (pasteBinClone) {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n var dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);\n for (var i = dirtyWrappers.length - 1; i >= 0; i--) {\n var cleanWrapper = editor.dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n var getLastRng = function (lastRng) {\n return lastRng.get();\n };\n var isDefaultContent = function (pasteBinDefaultContent, content) {\n return content === pasteBinDefaultContent;\n };\n var isPasteBin = function (elm) {\n return elm && elm.id === 'mcepastebin';\n };\n var isDefault = function (editor, pasteBinDefaultContent) {\n var pasteBinElm = getEl(editor);\n return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);\n };\n var PasteBin = function (editor) {\n var lastRng = Cell(null);\n var pasteBinDefaultContent = '%MCEPASTEBIN%';\n return {\n create: function () {\n return create(editor, lastRng, pasteBinDefaultContent);\n },\n remove: function () {\n return remove(editor, lastRng);\n },\n getEl: function () {\n return getEl(editor);\n },\n getHtml: function () {\n return getHtml(editor);\n },\n getLastRng: function () {\n return getLastRng(lastRng);\n },\n isDefault: function () {\n return isDefault(editor, pasteBinDefaultContent);\n },\n isDefaultContent: function (content) {\n return isDefaultContent(pasteBinDefaultContent, content);\n }\n };\n };\n\n var Clipboard = function (editor, pasteFormat) {\n var pasteBin = PasteBin(editor);\n editor.on('PreInit', function () {\n return registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n return {\n pasteFormat: pasteFormat,\n pasteHtml: function (html, internalFlag) {\n return pasteHtml$1(editor, html, internalFlag);\n },\n pasteText: function (text) {\n return pasteText(editor, text);\n },\n pasteImageData: function (e, rng) {\n return pasteImageData(editor, e, rng);\n },\n getDataTransferItems: getDataTransferItems,\n hasHtmlOrText: hasHtmlOrText,\n hasContentType: hasContentType\n };\n };\n\n var togglePlainTextPaste = function (editor, clipboard) {\n if (clipboard.pasteFormat.get() === 'text') {\n clipboard.pasteFormat.set('html');\n firePastePlainTextToggle(editor, false);\n } else {\n clipboard.pasteFormat.set('text');\n firePastePlainTextToggle(editor, true);\n }\n editor.focus();\n };\n\n var register = function (editor, clipboard) {\n editor.addCommand('mceTogglePlainTextPaste', function () {\n togglePlainTextPaste(editor, clipboard);\n });\n editor.addCommand('mceInsertClipboardContent', function (ui, value) {\n if (value.content) {\n clipboard.pasteHtml(value.content, value.internal);\n }\n if (value.text) {\n clipboard.pasteText(value.text);\n }\n });\n };\n\n var hasWorkingClipboardApi = function (clipboardData) {\n return global$1.iOS === false && typeof (clipboardData === null || clipboardData === void 0 ? void 0 : clipboardData.setData) === 'function';\n };\n var setHtml5Clipboard = function (clipboardData, html, text) {\n if (hasWorkingClipboardApi(clipboardData)) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n var setClipboardData = function (evt, data, fallback, done) {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n var fallback = function (editor) {\n return function (html, done) {\n var markedHtml = mark(html);\n var outer = editor.dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);\n editor.dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n editor.dom.add(editor.getBody(), outer);\n var range = editor.selection.getRng();\n inner.focus();\n var offscreenRange = editor.dom.createRng();\n offscreenRange.selectNodeContents(inner);\n editor.selection.setRng(offscreenRange);\n global$2.setTimeout(function () {\n editor.selection.setRng(range);\n outer.parentNode.removeChild(outer);\n done();\n }, 0);\n };\n };\n var getData = function (editor) {\n return {\n html: editor.selection.getContent({ contextual: true }),\n text: editor.selection.getContent({ format: 'text' })\n };\n };\n var isTableSelection = function (editor) {\n return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n };\n var hasSelectedContent = function (editor) {\n return !editor.selection.isCollapsed() || isTableSelection(editor);\n };\n var cut = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), function () {\n if (global$1.browser.isChrome() || global$1.browser.isFirefox()) {\n var rng_1 = editor.selection.getRng();\n global$2.setEditorTimeout(editor, function () {\n editor.selection.setRng(rng_1);\n editor.execCommand('Delete');\n }, 0);\n } else {\n editor.execCommand('Delete');\n }\n });\n }\n };\n };\n var copy = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop);\n }\n };\n };\n var register$1 = function (editor) {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var getCaretRangeFromEvent = function (editor, e) {\n return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());\n };\n var isPlainTextFileUrl = function (content) {\n var plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n var setFocusedRange = function (editor, rng) {\n editor.focus();\n editor.selection.setRng(rng);\n };\n var setup = function (editor, clipboard, draggingInternallyState) {\n if (shouldBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!shouldPasteDataImages(editor)) {\n editor.on('drop', function (e) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', function (e) {\n var rng = getCaretRangeFromEvent(editor, e);\n if (e.isDefaultPrevented() || draggingInternallyState.get()) {\n return;\n }\n var dropContent = clipboard.getDataTransferItems(e.dataTransfer);\n var internal = clipboard.hasContentType(dropContent, internalHtmlMime());\n if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {\n return;\n }\n if (rng && shouldFilterDrop(editor)) {\n var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];\n if (content_1) {\n e.preventDefault();\n global$2.setEditorTimeout(editor, function () {\n editor.undoManager.transact(function () {\n if (dropContent['mce-internal']) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n content_1 = trimHtml(content_1);\n if (!dropContent['text/html']) {\n clipboard.pasteText(content_1);\n } else {\n clipboard.pasteHtml(content_1, internal);\n }\n });\n });\n }\n }\n });\n editor.on('dragstart', function (_e) {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', function (e) {\n if (shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n };\n\n var setup$1 = function (editor) {\n var plugin = editor.plugins.paste;\n var preProcess = getPreProcess(editor);\n if (preProcess) {\n editor.on('PastePreProcess', function (e) {\n preProcess.call(plugin, plugin, e);\n });\n }\n var postProcess = getPostProcess(editor);\n if (postProcess) {\n editor.on('PastePostProcess', function (e) {\n postProcess.call(plugin, plugin, e);\n });\n }\n };\n\n var addPreProcessFilter = function (editor, filterFunc) {\n editor.on('PastePreProcess', function (e) {\n e.content = filterFunc(editor, e.content, e.internal, e.wordContent);\n });\n };\n var addPostProcessFilter = function (editor, filterFunc) {\n editor.on('PastePostProcess', function (e) {\n filterFunc(editor, e.node);\n });\n };\n var removeExplorerBrElementsAfterBlocks = function (editor, html) {\n if (!isWordContent(html)) {\n return html;\n }\n var blockElements = [];\n global$5.each(editor.schema.getBlockElements(), function (block, blockName) {\n blockElements.push(blockName);\n });\n var explorerBlocksRegExp = new RegExp('(?:
 [\\\\s\\\\r\\\\n]+|
)*(<\\\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
 [\\\\s\\\\r\\\\n]+|
)*', 'g');\n html = filter$1(html, [[\n explorerBlocksRegExp,\n '$1'\n ]]);\n html = filter$1(html, [\n [\n /

/g,\n '

'\n ],\n [\n /
/g,\n ' '\n ],\n [\n /

/g,\n '
'\n ]\n ]);\n return html;\n };\n var removeWebKitStyles = function (editor, content, internal, isWordHtml) {\n if (isWordHtml || internal) {\n return content;\n }\n var webKitStylesSetting = getWebkitStyles(editor);\n var webKitStyles;\n if (shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {\n return content;\n }\n if (webKitStylesSetting) {\n webKitStyles = webKitStylesSetting.split(/[, ]/);\n }\n if (webKitStyles) {\n var dom_1 = editor.dom, node_1 = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, function (all, before, value, after) {\n var inputStyles = dom_1.parseStyle(dom_1.decode(value));\n var outputStyles = {};\n if (webKitStyles === 'none') {\n return before + after;\n }\n for (var i = 0; i < webKitStyles.length; i++) {\n var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n inputValue = dom_1.toHex(inputValue);\n currentValue = dom_1.toHex(currentValue);\n }\n if (currentValue !== inputValue) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n outputStyles = dom_1.serializeStyle(outputStyles, 'span');\n if (outputStyles) {\n return before + ' style=\"' + outputStyles + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, function (all, before, value, after) {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n };\n var removeUnderlineAndFontInAnchor = function (editor, root) {\n editor.$('a', root).find('font,u').each(function (i, node) {\n editor.dom.remove(node, true);\n });\n };\n var setup$2 = function (editor) {\n if (global$1.webkit) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n if (global$1.ie) {\n addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);\n addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);\n }\n };\n\n var makeSetupHandler = function (editor, clipboard) {\n return function (api) {\n api.setActive(clipboard.pasteFormat.get() === 'text');\n var pastePlainTextToggleHandler = function (e) {\n return api.setActive(e.state);\n };\n editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n return function () {\n return editor.off('PastePlainTextToggle', pastePlainTextToggleHandler);\n };\n };\n };\n var register$2 = function (editor, clipboard) {\n editor.ui.registry.addToggleButton('pastetext', {\n active: false,\n icon: 'paste-text',\n tooltip: 'Paste as text',\n onAction: function () {\n return editor.execCommand('mceTogglePlainTextPaste');\n },\n onSetup: makeSetupHandler(editor, clipboard)\n });\n editor.ui.registry.addToggleMenuItem('pastetext', {\n text: 'Paste as text',\n icon: 'paste-text',\n onAction: function () {\n return editor.execCommand('mceTogglePlainTextPaste');\n },\n onSetup: makeSetupHandler(editor, clipboard)\n });\n };\n\n function Plugin () {\n global.add('paste', function (editor) {\n if (hasProPlugin(editor) === false) {\n var draggingInternallyState = Cell(false);\n var pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n var clipboard = Clipboard(editor, pasteFormat);\n var quirks = setup$2(editor);\n register$2(editor, clipboard);\n register(editor, clipboard);\n setup$1(editor);\n register$1(editor);\n setup(editor, clipboard, draggingInternallyState);\n return get(clipboard, quirks);\n }\n });\n }\n\n Plugin();\n\n}());\n","tinymce.addI18n('pl',{\r\n\"Redo\": \"Pon\\u00f3w\",\r\n\"Undo\": \"Cofnij\",\r\n\"Cut\": \"Wytnij\",\r\n\"Copy\": \"Kopiuj\",\r\n\"Paste\": \"Wklej\",\r\n\"Select all\": \"Zaznacz wszystko\",\r\n\"New document\": \"Nowy dokument\",\r\n\"Ok\": \"Ok\",\r\n\"Cancel\": \"Anuluj\",\r\n\"Visual aids\": \"Pomoce wizualne\",\r\n\"Bold\": \"Pogrubienie\",\r\n\"Italic\": \"Kursywa\",\r\n\"Underline\": \"Podkre\\u015blenie\",\r\n\"Strikethrough\": \"Przekre\\u015blenie\",\r\n\"Superscript\": \"Indeks g\\u00f3rny\",\r\n\"Subscript\": \"Indeks dolny\",\r\n\"Clear formatting\": \"Wyczy\\u015b\\u0107 formatowanie\",\r\n\"Align left\": \"Wyr\\u00f3wnaj do lewej\",\r\n\"Align center\": \"Wyr\\u00f3wnaj do \\u015brodka\",\r\n\"Align right\": \"Wyr\\u00f3wnaj do prawej\",\r\n\"Justify\": \"Do lewej i prawej\",\r\n\"Bullet list\": \"Lista wypunktowana\",\r\n\"Numbered list\": \"Lista numerowana\",\r\n\"Decrease indent\": \"Zmniejsz wci\\u0119cie\",\r\n\"Increase indent\": \"Zwi\\u0119ksz wci\\u0119cie\",\r\n\"Close\": \"Zamknij\",\r\n\"Formats\": \"Formaty\",\r\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Twoja przegl\\u0105darka nie obs\\u0142uguje bezpo\\u015bredniego dost\\u0119pu do schowka. U\\u017cyj zamiast tego kombinacji klawiszy Ctrl+X\\/C\\/V.\",\r\n\"Headers\": \"Nag\\u0142\\u00f3wki\",\r\n\"Header 1\": \"Nag\\u0142\\u00f3wek 1\",\r\n\"Header 2\": \"Nag\\u0142\\u00f3wek 2\",\r\n\"Header 3\": \"Nag\\u0142\\u00f3wek 3\",\r\n\"Header 4\": \"Nag\\u0142\\u00f3wek 4\",\r\n\"Header 5\": \"Nag\\u0142\\u00f3wek 5\",\r\n\"Header 6\": \"Nag\\u0142\\u00f3wek 6\",\r\n\"Headings\": \"Nag\\u0142\\u00f3wki\",\r\n\"Heading 1\": \"Nag\\u0142\\u00f3wek 1\",\r\n\"Heading 2\": \"Nag\\u0142\\u00f3wek 2\",\r\n\"Heading 3\": \"Nag\\u0142\\u00f3wek 3\",\r\n\"Heading 4\": \"Nag\\u0142\\u00f3wek 4\",\r\n\"Heading 5\": \"Nag\\u0142\\u00f3wek 5\",\r\n\"Heading 6\": \"Nag\\u0142\\u00f3wek 6\",\r\n\"Preformatted\": \"Sformatowany tekst\",\r\n\"Div\": \"Div\",\r\n\"Pre\": \"Sformatowany tekst\",\r\n\"Code\": \"Kod \\u017ar\\u00f3d\\u0142owy\",\r\n\"Paragraph\": \"Akapit\",\r\n\"Blockquote\": \"Blok cytatu\",\r\n\"Inline\": \"W tek\\u015bcie\",\r\n\"Blocks\": \"Bloki\",\r\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Wklejanie jest w trybie tekstowym. Zawarto\\u015b\\u0107 zostanie wklejona jako zwyk\\u0142y tekst dop\\u00f3ki nie wy\\u0142\\u0105czysz tej opcji.\",\r\n\"Fonts\": \"Fonty\",\r\n\"Font Sizes\": \"Rozmiar fontu\",\r\n\"Class\": \"Klasa\",\r\n\"Browse for an image\": \"Przegl\\u0105daj za zdj\\u0119ciem\",\r\n\"OR\": \"LUB\",\r\n\"Drop an image here\": \"Upu\\u015b\\u0107 obraz tutaj\",\r\n\"Upload\": \"Prze\\u015blij\",\r\n\"Block\": \"Zablokuj\",\r\n\"Align\": \"Wyr\\u00f3wnaj\",\r\n\"Default\": \"Domy\\u015blne\",\r\n\"Circle\": \"K\\u00f3\\u0142ko\",\r\n\"Disc\": \"Dysk\",\r\n\"Square\": \"Kwadrat\",\r\n\"Lower Alpha\": \"Ma\\u0142e litery\",\r\n\"Lower Greek\": \"Ma\\u0142e greckie\",\r\n\"Lower Roman\": \"Ma\\u0142e rzymskie\",\r\n\"Upper Alpha\": \"Wielkie litery\",\r\n\"Upper Roman\": \"Wielkie rzymskie\",\r\n\"Anchor...\": \"Kotwica...\",\r\n\"Name\": \"Nazwa\",\r\n\"Id\": \"Identyfikator\",\r\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Identyfikator powinien zaczyna\\u0107 si\\u0119 liter\\u0105, dozwolone s\\u0105 tylko litery, numery, uko\\u015bniki, kropki, dwukropki i podkre\\u015blniki - tzw. pod\\u0142ogi\",\r\n\"You have unsaved changes are you sure you want to navigate away?\": \"Masz niezapisane zmiany. Czy na pewno chcesz opu\\u015bci\\u0107 stron\\u0119?\",\r\n\"Restore last draft\": \"Przywr\\u00f3\\u0107 ostatni szkic\",\r\n\"Special characters...\": \"Znaki specjalne...\",\r\n\"Source code\": \"Kod \\u017ar\\u00f3d\\u0142owy\",\r\n\"Insert\\/Edit code sample\": \"Dodaj\\/Edytuj przyk\\u0142adowy kod\",\r\n\"Language\": \"J\\u0119zyk\",\r\n\"Code sample...\": \"Przyk\\u0142ad kodu...\",\r\n\"Color Picker\": \"Wybierz kolor\",\r\n\"R\": \"R\",\r\n\"G\": \"G\",\r\n\"B\": \"B\",\r\n\"Left to right\": \"Od lewej do prawej\",\r\n\"Right to left\": \"Od prawej do lewej\",\r\n\"Emoticons...\": \"Emotikony...\",\r\n\"Metadata and Document Properties\": \"Metadane i w\\u0142a\\u015bciwo\\u015bci dokumentu\",\r\n\"Title\": \"Tytu\\u0142\",\r\n\"Keywords\": \"S\\u0142owa kluczowe\",\r\n\"Description\": \"Opis\",\r\n\"Robots\": \"Roboty\",\r\n\"Author\": \"Autor\",\r\n\"Encoding\": \"Kodowanie\",\r\n\"Fullscreen\": \"Pe\\u0142ny ekran\",\r\n\"Action\": \"Akcja\",\r\n\"Shortcut\": \"Skr\\u00f3t\",\r\n\"Help\": \"Pomoc\",\r\n\"Address\": \"Adres\",\r\n\"Focus to menubar\": \"Skup si\\u0119 na pasku menu\",\r\n\"Focus to toolbar\": \"Skupi\\u0107 si\\u0119 na pasku\",\r\n\"Focus to element path\": \"Skup si\\u0119 na \\u015bcie\\u017cce elementu\",\r\n\"Focus to contextual toolbar\": \"Skupi\\u0107 si\\u0119 na pasku narz\\u0119dzi kontekstowych\",\r\n\"Insert link (if link plugin activated)\": \"Wstaw \\u0142\\u0105cze (je\\u015bli w\\u0142\\u0105czysz wtyczk\\u0119 link\\u00f3w)\",\r\n\"Save (if save plugin activated)\": \"Zapisz (je\\u015bli aktywowana jest wtyczka do zapisu)\",\r\n\"Find (if searchreplace plugin activated)\": \"Znajd\\u017a (je\\u015bli w\\u0142\\u0105czysz wtyczk\\u0119 do wyszukiwania)\",\r\n\"Plugins installed ({0}):\": \"Zainstalowane wtyczki ({0}):\",\r\n\"Premium plugins:\": \"Wtyczki Premium:\",\r\n\"Learn more...\": \"Dowiedz si\\u0119 wi\\u0119cej...\",\r\n\"You are using {0}\": \"U\\u017cywasz {0}\",\r\n\"Plugins\": \"Pluginy\",\r\n\"Handy Shortcuts\": \"Przydatne skr\\u00f3ty\",\r\n\"Horizontal line\": \"Pozioma linia\",\r\n\"Insert\\/edit image\": \"Wstaw\\/edytuj obrazek\",\r\n\"Image description\": \"Opis obrazka\",\r\n\"Source\": \"\\u0179r\\u00f3d\\u0142o\",\r\n\"Dimensions\": \"Wymiary\",\r\n\"Constrain proportions\": \"Zachowaj proporcje\",\r\n\"General\": \"Og\\u00f3lne\",\r\n\"Advanced\": \"Zaawansowane\",\r\n\"Style\": \"Styl\",\r\n\"Vertical space\": \"Odst\\u0119p pionowy\",\r\n\"Horizontal space\": \"Odst\\u0119p poziomy\",\r\n\"Border\": \"Ramka\",\r\n\"Insert image\": \"Wstaw obrazek\",\r\n\"Image...\": \"Obraz...\",\r\n\"Image list\": \"Lista obrazk\\u00f3w\",\r\n\"Rotate counterclockwise\": \"Obr\\u00f3\\u0107 w lewo\",\r\n\"Rotate clockwise\": \"Obr\\u00f3\\u0107 w prawo\",\r\n\"Flip vertically\": \"Przerzu\\u0107 w pionie\",\r\n\"Flip horizontally\": \"Przerzu\\u0107 w poziomie\",\r\n\"Edit image\": \"Edytuj obrazek\",\r\n\"Image options\": \"Opcje obrazu\",\r\n\"Zoom in\": \"Powi\\u0119ksz\",\r\n\"Zoom out\": \"Pomniejsz\",\r\n\"Crop\": \"Przytnij\",\r\n\"Resize\": \"Zmiana rozmiaru\",\r\n\"Orientation\": \"Orientacja\",\r\n\"Brightness\": \"Jasno\\u015b\\u0107\",\r\n\"Sharpen\": \"Wyostrz\",\r\n\"Contrast\": \"Kontrast\",\r\n\"Color levels\": \"Poziom koloru\",\r\n\"Gamma\": \"Gamma\",\r\n\"Invert\": \"Odwr\\u00f3\\u0107\",\r\n\"Apply\": \"Zaakceptuj\",\r\n\"Back\": \"Cofnij\",\r\n\"Insert date\\/time\": \"Wstaw dat\\u0119\\/czas\",\r\n\"Date\\/time\": \"Data\\/Czas\",\r\n\"Insert\\/Edit Link\": \"Wstaw\\/Dostosuj \\u0142\\u0105cze\",\r\n\"Insert\\/edit link\": \"Wstaw\\/edytuj \\u0142\\u0105cze\",\r\n\"Text to display\": \"Tekst do wy\\u015bwietlenia\",\r\n\"Url\": \"URL\",\r\n\"Open link in...\": \"Otw\\u00f3rz \\u0142\\u0105cze w...\",\r\n\"Current window\": \"Aktualne okno\",\r\n\"None\": \"\\u017baden\",\r\n\"New window\": \"Nowe okno\",\r\n\"Remove link\": \"Usu\\u0144 \\u0142\\u0105cze\",\r\n\"Anchors\": \"Kotwice\",\r\n\"Link...\": \"\\u0141\\u0105cze...\",\r\n\"Paste or type a link\": \"Wklej lub wpisz adres \\u0142\\u0105cza\",\r\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"URL, kt\\u00f3ry wprowadzi\\u0142e\\u015b wygl\\u0105da na adres e-mail. Czy chcesz doda\\u0107 mailto: jako prefiks?\",\r\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"URL, kt\\u00f3ry wprowadzi\\u0142e\\u015b wygl\\u0105da na link zewn\\u0119trzny. Czy chcesz doda\\u0107 http:\\/\\/ jako prefiks?\",\r\n\"Link list\": \"Lista link\\u00f3w\",\r\n\"Insert video\": \"Wstaw wideo\",\r\n\"Insert\\/edit video\": \"Wstaw\\/edytuj wideo\",\r\n\"Insert\\/edit media\": \"Wstaw\\/Edytuj media\",\r\n\"Alternative source\": \"Alternatywne \\u017ar\\u00f3d\\u0142o\",\r\n\"Alternative source URL\": \"Alternatywny URL \\u017ar\\u00f3d\\u0142a\",\r\n\"Media poster (Image URL)\": \"Plakat (URL obrazu)\",\r\n\"Paste your embed code below:\": \"Wklej tutaj kod do osadzenia:\",\r\n\"Embed\": \"Osad\\u017a\",\r\n\"Media...\": \"Media...\",\r\n\"Nonbreaking space\": \"Nie\\u0142amliwa spacja\",\r\n\"Page break\": \"Podzia\\u0142 strony\",\r\n\"Paste as text\": \"Wklej jako zwyk\\u0142y tekst\",\r\n\"Preview\": \"Podgl\\u0105d\",\r\n\"Print...\": \"Drukuj...\",\r\n\"Save\": \"Zapisz\",\r\n\"Find\": \"Znajd\\u017a\",\r\n\"Replace with\": \"Zamie\\u0144 na\",\r\n\"Replace\": \"Zamie\\u0144\",\r\n\"Replace all\": \"Zamie\\u0144 wszystko\",\r\n\"Previous\": \"Poprzedni\",\r\n\"Next\": \"Nast.\",\r\n\"Find and replace...\": \"Znajd\\u017a i zamie\\u0144...\",\r\n\"Could not find the specified string.\": \"Nie znaleziono szukanego tekstu.\",\r\n\"Match case\": \"Dopasuj wielko\\u015b\\u0107 liter\",\r\n\"Find whole words only\": \"Znajd\\u017a tylko ca\\u0142e wyrazy\",\r\n\"Spell check\": \"Sprawd\\u017a pisowni\\u0119\",\r\n\"Ignore\": \"Ignoruj\",\r\n\"Ignore all\": \"Ignoruj wszystko\",\r\n\"Finish\": \"Zako\\u0144cz\",\r\n\"Add to Dictionary\": \"Dodaj do s\\u0142ownika\",\r\n\"Insert table\": \"Wstaw tabel\\u0119\",\r\n\"Table properties\": \"W\\u0142a\\u015bciwo\\u015bci tabeli\",\r\n\"Delete table\": \"Usu\\u0144 tabel\\u0119\",\r\n\"Cell\": \"Kom\\u00f3rka\",\r\n\"Row\": \"Wiersz\",\r\n\"Column\": \"Kolumna\",\r\n\"Cell properties\": \"W\\u0142a\\u015bciwo\\u015bci kom\\u00f3rki\",\r\n\"Merge cells\": \"\\u0141\\u0105cz kom\\u00f3rki\",\r\n\"Split cell\": \"Podziel kom\\u00f3rk\\u0119\",\r\n\"Insert row before\": \"Wstaw wiersz przed\",\r\n\"Insert row after\": \"Wstaw wiersz po\",\r\n\"Delete row\": \"Usu\\u0144 wiersz\",\r\n\"Row properties\": \"W\\u0142a\\u015bciwo\\u015bci wiersza\",\r\n\"Cut row\": \"Wytnij wiersz\",\r\n\"Copy row\": \"Kopiuj wiersz\",\r\n\"Paste row before\": \"Wklej wiersz przed\",\r\n\"Paste row after\": \"Wklej wiersz po\",\r\n\"Insert column before\": \"Wstaw kolumn\\u0119 przed\",\r\n\"Insert column after\": \"Wstaw kolumn\\u0119 po\",\r\n\"Delete column\": \"Usu\\u0144 kolumn\\u0119\",\r\n\"Cols\": \"Kol.\",\r\n\"Rows\": \"Wiersz.\",\r\n\"Width\": \"Szeroko\\u015b\\u0107\",\r\n\"Height\": \"Wysoko\\u015b\\u0107\",\r\n\"Cell spacing\": \"Odst\\u0119py kom\\u00f3rek\",\r\n\"Cell padding\": \"Dope\\u0142nienie kom\\u00f3rki\",\r\n\"Show caption\": \"Poka\\u017c podpis\",\r\n\"Left\": \"Lewo\",\r\n\"Center\": \"\\u015arodek\",\r\n\"Right\": \"Prawo\",\r\n\"Cell type\": \"Typ kom\\u00f3rki\",\r\n\"Scope\": \"Kontekst\",\r\n\"Alignment\": \"Wyr\\u00f3wnanie\",\r\n\"H Align\": \"Wyr\\u00f3wnanie w pionie\",\r\n\"V Align\": \"Wyr\\u00f3wnanie w poziomie\",\r\n\"Top\": \"G\\u00f3ra\",\r\n\"Middle\": \"\\u015arodek\",\r\n\"Bottom\": \"D\\u00f3\\u0142\",\r\n\"Header cell\": \"Kom\\u00f3rka nag\\u0142\\u00f3wka\",\r\n\"Row group\": \"Grupa wierszy\",\r\n\"Column group\": \"Grupa kolumn\",\r\n\"Row type\": \"Typ wiersza\",\r\n\"Header\": \"Nag\\u0142\\u00f3wek\",\r\n\"Body\": \"Tre\\u015b\\u0107\",\r\n\"Footer\": \"Stopka\",\r\n\"Border color\": \"Kolor ramki\",\r\n\"Insert template...\": \"Wstaw szablon...\",\r\n\"Templates\": \"Szablony\",\r\n\"Template\": \"Szablon\",\r\n\"Text color\": \"Kolor tekstu\",\r\n\"Background color\": \"Kolor t\\u0142a\",\r\n\"Custom...\": \"Niestandardowy...\",\r\n\"Custom color\": \"Kolor niestandardowy\",\r\n\"No color\": \"Bez koloru\",\r\n\"Remove color\": \"Usu\\u0144 kolor\",\r\n\"Table of Contents\": \"Spis tre\\u015bci\",\r\n\"Show blocks\": \"Poka\\u017c bloki\",\r\n\"Show invisible characters\": \"Poka\\u017c niewidoczne znaki\",\r\n\"Word count\": \"Liczba s\\u0142\\u00f3w\",\r\n\"Words: {0}\": \"S\\u0142\\u00f3w: {0}\",\r\n\"{0} words\": \"{0} s\\u0142\\u00f3w\",\r\n\"File\": \"Plik\",\r\n\"Edit\": \"Edycja\",\r\n\"Insert\": \"Wstaw\",\r\n\"View\": \"Widok\",\r\n\"Format\": \"Format\",\r\n\"Table\": \"Tabela\",\r\n\"Tools\": \"Narz\\u0119dzia\",\r\n\"Powered by {0}\": \"Powered by {0}\",\r\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Obszar Edycji. ALT-F9 - menu. ALT-F10 - pasek narz\\u0119dzi. ALT-0 - pomoc\",\r\n\"Image title\": \"Tytu\\u0142 obrazu\",\r\n\"Border width\": \"Grubo\\u015b\\u0107 ramki\",\r\n\"Border style\": \"Styl ramki\",\r\n\"Error\": \"B\\u0142\\u0105d\",\r\n\"Warn\": \"Ostrze\\u017cenie\",\r\n\"Valid\": \"Poprawny\",\r\n\"To open the popup, press Shift+Enter\": \"Aby otworzy\\u0107 okienko, naci\\u015bnij Shift+Enter\",\r\n\"Rich Text Area. Press ALT-0 for help.\": \"Obszar tekstu sformatowanego. Naci\\u015bnij ALT-0 aby uzyska\\u0107 pomoc.\",\r\n\"System Font\": \"Font systemowy\",\r\n\"Failed to upload image: {0}\": \"Nie uda\\u0142o si\\u0119 przes\\u0142a\\u0107 obrazu: {0}\",\r\n\"Failed to load plugin: {0} from url {1}\": \"Nie uda\\u0142o si\\u0119 za\\u0142adowa\\u0107 wtyczki: {0} z adresu {1}\",\r\n\"Failed to load plugin url: {0}\": \"Nie uda\\u0142o si\\u0119 za\\u0142adowa\\u0107 adresu wtyczki: {0}\",\r\n\"Failed to initialize plugin: {0}\": \"Nie mo\\u017cna zainicjowa\\u0107 wtyczki: {0}\",\r\n\"example\": \"przyk\\u0142ad\",\r\n\"Search\": \"Znajd\\u017a\",\r\n\"All\": \"Wszystkie\",\r\n\"Currency\": \"Waluty\",\r\n\"Text\": \"Tekstowe\",\r\n\"Quotations\": \"Cudzys\\u0142owy\",\r\n\"Mathematical\": \"Matematyczne\",\r\n\"Extended Latin\": \"Dodatkowe\",\r\n\"Symbols\": \"Symbole\",\r\n\"Arrows\": \"Strza\\u0142ki\",\r\n\"User Defined\": \"W\\u0142asny\",\r\n\"dollar sign\": \"znak dolara\",\r\n\"currency sign\": \"znak waluty\",\r\n\"euro-currency sign\": \"znak euro\",\r\n\"colon sign\": \"znak colon\",\r\n\"cruzeiro sign\": \"znak cruzeiro\",\r\n\"french franc sign\": \"znak franka francuskiego\",\r\n\"lira sign\": \"znak liry\",\r\n\"mill sign\": \"znak mill\",\r\n\"naira sign\": \"znak nairy\",\r\n\"peseta sign\": \"znak pesety\",\r\n\"rupee sign\": \"znak rupii\",\r\n\"won sign\": \"znak wona\",\r\n\"new sheqel sign\": \"znak nowego szekla\",\r\n\"dong sign\": \"znak donga\",\r\n\"kip sign\": \"znak kipa\",\r\n\"tugrik sign\": \"znak tugrika\",\r\n\"drachma sign\": \"znak drachmy\",\r\n\"german penny symbol\": \"znak feniga\",\r\n\"peso sign\": \"znak peso\",\r\n\"guarani sign\": \"znak guarani\",\r\n\"austral sign\": \"znak australa\",\r\n\"hryvnia sign\": \"znak hrywny\",\r\n\"cedi sign\": \"znak cedi\",\r\n\"livre tournois sign\": \"znak livre tournois\",\r\n\"spesmilo sign\": \"znak spesmilo\",\r\n\"tenge sign\": \"znak tenge\",\r\n\"indian rupee sign\": \"znak rupii indyjskiej\",\r\n\"turkish lira sign\": \"znak liry tureckiej\",\r\n\"nordic mark sign\": \"znak nordic mark\",\r\n\"manat sign\": \"znak manata\",\r\n\"ruble sign\": \"znak rubla\",\r\n\"yen character\": \"znak jena\",\r\n\"yuan character\": \"znak juana\",\r\n\"yuan character, in hong kong and taiwan\": \"znak juana w Hongkongu i Tajwanie\",\r\n\"yen\\/yuan character variant one\": \"jen\\/juan wariant pierwszy\",\r\n\"Loading emoticons...\": \"\\u0141adowanie emotikon\\u00f3w...\",\r\n\"Could not load emoticons\": \"Nie mo\\u017cna za\\u0142adowa\\u0107 emotikon\\u00f3w\",\r\n\"People\": \"Ludzie\",\r\n\"Animals and Nature\": \"Zwierz\\u0119ta i natura\",\r\n\"Food and Drink\": \"Jedzenie i picie\",\r\n\"Activity\": \"Aktywno\\u015b\\u0107\",\r\n\"Travel and Places\": \"Podr\\u00f3\\u017ce i miejsca\",\r\n\"Objects\": \"Obiekty\",\r\n\"Flags\": \"Flagi\",\r\n\"Characters\": \"Znak\\u00f3w\",\r\n\"Characters (no spaces)\": \"Znak\\u00f3w (bez spacji)\",\r\n\"Error: Form submit field collision.\": \"B\\u0142\\u0105d: Kolizja pola przesy\\u0142ania formularza.\",\r\n\"Error: No form element found.\": \"B\\u0142\\u0105d: nie znaleziono elementu formularza.\",\r\n\"Update\": \"Aktualizuj\",\r\n\"Color swatch\": \"Pr\\u00f3bka koloru\",\r\n\"Turquoise\": \"Turkusowy\",\r\n\"Green\": \"Zielony\",\r\n\"Blue\": \"Niebieski\",\r\n\"Purple\": \"Purpurowy\",\r\n\"Navy Blue\": \"Ciemnoniebieski\",\r\n\"Dark Turquoise\": \"Ciemny Turkusowy\",\r\n\"Dark Green\": \"Ciemny Zielony\",\r\n\"Medium Blue\": \"\\u015aredni Niebieski\",\r\n\"Medium Purple\": \"\\u015aredni Purpurowy\",\r\n\"Midnight Blue\": \"Niebieska p\\u00f3\\u0142noc, Midnight Blue\",\r\n\"Yellow\": \"\\u017b\\u00f3\\u0142ty\",\r\n\"Orange\": \"Pomara\\u0144czowy\",\r\n\"Red\": \"Czerwony\",\r\n\"Light Gray\": \"Jasny Szary\",\r\n\"Gray\": \"Szary\",\r\n\"Dark Yellow\": \"Ciemny \\u017b\\u00f3\\u0142ty\",\r\n\"Dark Orange\": \"Ciemny Pomara\\u0144czowy\",\r\n\"Dark Red\": \"Ciemny Czerwony\",\r\n\"Medium Gray\": \"\\u015aredni Szary\",\r\n\"Dark Gray\": \"Ciemny Szary\",\r\n\"Black\": \"Czarny\",\r\n\"White\": \"Bia\\u0142y\",\r\n\"Switch to or from fullscreen mode\": \"W\\u0142\\u0105cz lub wy\\u0142\\u0105cz tryb pe\\u0142noekranowy\",\r\n\"Open help dialog\": \"Otw\\u00f3rz okienko pomocy\",\r\n\"history\": \"historia\",\r\n\"styles\": \"style\",\r\n\"formatting\": \"formatowanie\",\r\n\"alignment\": \"wyr\\u00f3wnanie\",\r\n\"indentation\": \"wci\\u0119cie\",\r\n\"permanent pen\": \"marker\",\r\n\"comments\": \"komentarze\",\r\n\"Anchor\": \"Kotwica\",\r\n\"Special character\": \"Znak specjalny\",\r\n\"Code sample\": \"Przyk\\u0142ad kodu \\u017ar\\u00f3d\\u0142owego\",\r\n\"Color\": \"Kolor\",\r\n\"Emoticons\": \"Ikony emocji\",\r\n\"Document properties\": \"W\\u0142a\\u015bciwo\\u015bci dokumentu\",\r\n\"Image\": \"Obraz\",\r\n\"Insert link\": \"Wstaw \\u0142\\u0105cze\",\r\n\"Target\": \"Cel\",\r\n\"Link\": \"Adres \\u0142\\u0105cza\",\r\n\"Poster\": \"Plakat\",\r\n\"Media\": \"Media\",\r\n\"Print\": \"Drukuj\",\r\n\"Prev\": \"Poprz.\",\r\n\"Find and replace\": \"Znajd\\u017a i zamie\\u0144\",\r\n\"Whole words\": \"Ca\\u0142e s\\u0142owa\",\r\n\"Spellcheck\": \"Sprawdzanie pisowni\",\r\n\"Caption\": \"Tytu\\u0142\",\r\n\"Insert template\": \"Wstaw szablon\"\r\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');","// Exports the \"directionality\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/directionality')\n// ES2015:\n// import 'tinymce/plugins/directionality'\nrequire('./plugin.js');","module.exports = {\n indexOf: function (arr, item) {\n var i, j;\n if (Array.prototype.indexOf) {\n return arr.indexOf(item);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n },\n forEach: function (arr, fn, scope) {\n var i, j;\n if (Array.prototype.forEach) {\n return arr.forEach(fn, scope);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n fn.call(scope, arr[i], i, arr);\n }\n },\n trim: function (str) {\n if (String.prototype.trim) {\n return str.trim();\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n },\n trimRight: function (str) {\n if (String.prototype.trimRight) {\n return str.trimRight();\n }\n return str.replace(/(\\s*$)/g, '');\n }\n};\n","export default class Permissions\r\n{\r\n public static Standard = class\r\n {\r\n public static AdminAccess = \"Ideo.Core.StandardPermissions@AdminAccess\";\r\n public static Superuser = \"Ideo.Core.StandardPermissions@Superuser\";\r\n };\r\n\r\n public static Core = class\r\n {\r\n public static Users = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.UsersPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.UsersPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.UsersPermissions@Delete\";\r\n };\r\n\r\n public static Roles = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.RolesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.RolesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.RolesPermissions@Delete\";\r\n };\r\n\r\n public static Teams = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TeamsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TeamsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TeamsPermissions@Delete\";\r\n };\r\n\r\n public static Organization = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.OrganizationPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.OrganizationPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.OrganizationPermissions@Delete\";\r\n };\r\n\r\n public static Substitutions = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.SubstitutionsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.SubstitutionsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.SubstitutionsPermissions@Delete\";\r\n };\r\n\r\n public static DataSources = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DataSourcesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DataSourcesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DataSourcesPermissions@Delete\";\r\n };\r\n\r\n public static DynamicForms = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@View\";\r\n public static Categories = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@Categories\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@Delete\";\r\n public static Accept = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@Accept\";\r\n public static EditAll = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@EditAll\";\r\n public static DeleteAll = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@DeleteAll\";\r\n public static AcceptAll = \"Ideo.Core.App.Areas.Admin.Core.Controllers.DynamicFormsPermissions@AcceptAll\";\r\n };\r\n\r\n public static Filters = class\r\n {\r\n public static Manage = \"Ideo.Core.App.Areas.Admin.Core.Controllers.FiltersPermissions@Manage\";\r\n };\r\n\r\n public static Admin = class\r\n {\r\n public static Security = \"Ideo.Core.App.Areas.Admin.Core.Controllers.AdminPermissions@Security\";\r\n public static Authlog = \"Ideo.Core.App.Areas.Admin.Core.Controllers.AdminPermissions@Authlog\";\r\n public static Changelog = \"Ideo.Core.App.Areas.Admin.Core.Controllers.AdminPermissions@Changelog\";\r\n };\r\n };\r\n\r\n public static Finance = class\r\n {\r\n public static Invoices = class\r\n {\r\n public static Add = \"Ideo.Core.App.Areas.Finance.Invoices.InvoicePermissions@CanAdd\";\r\n public static Coordinator = \"Ideo.Core.App.Areas.Finance.Invoices.InvoicePermissions@Coordinator\";\r\n public static Accountant = \"Ideo.Core.App.Areas.Finance.Invoices.InvoicePermissions@Accountant\";\r\n };\r\n };\r\n\r\n public static Cms = class\r\n {\r\n public static Pages = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.PagesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.PagesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.PagesPermissions@Delete\";\r\n };\r\n\r\n public static Layouts = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.LayoutsPermissions@View\";\r\n public static Compose = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.LayoutsPermissions@Compose\";\r\n public static Publish = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.LayoutsPermissions@Publish\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.LayoutsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.LayoutsPermissions@Delete\";\r\n };\r\n\r\n public static Websites = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.WebsitesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.WebsitesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.WebsitesPermissions@Delete\";\r\n };\r\n\r\n public static Articles = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@Delete\";\r\n public static Accept = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@Accept\";\r\n public static Publish = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@Publish\";\r\n public static EditAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@EditAll\";\r\n public static DeleteAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@DeleteAll\";\r\n public static AcceptAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@AcceptAll\";\r\n public static PublishAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ArticlesPermissions@PublishAll\";\r\n };\r\n\r\n public static Informations = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@Delete\";\r\n public static Accept = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@Accept\";\r\n public static Publish = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@Publish\";\r\n public static EditAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@EditAll\";\r\n public static DeleteAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@DeleteAll\";\r\n public static AcceptAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@AcceptAll\";\r\n public static PublishAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.InformationsPermissions@PublishAll\";\r\n };\r\n\r\n public static Faq = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@Delete\";\r\n public static Accept = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@Accept\";\r\n public static Publish = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@Publish\";\r\n public static EditAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@EditAll\";\r\n public static DeleteAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@DeleteAll\";\r\n public static AcceptAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@AcceptAll\";\r\n public static PublishAll = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.FaqPermissions@PublishAll\";\r\n };\r\n\r\n public static Tags = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.TagsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.TagsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.TagsPermissions@Delete\";\r\n public static Publish = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.TagsPermissions@Publish\";\r\n };\r\n\r\n public static ContactForms = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ContactFormsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ContactFormsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Cms.Controllers.ContactFormsPermissions@Delete\";\r\n };\r\n };\r\n\r\n public static Saas = class\r\n {\r\n public static Databases = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.DatabasesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.DatabasesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.DatabasesPermissions@Delete\";\r\n };\r\n\r\n public static Storages = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.StoragesPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.StoragesPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.StoragesPermissions@Delete\";\r\n };\r\n\r\n public static Tenants = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.TenantsPermissions@View\";\r\n public static Edit = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.TenantsPermissions@Edit\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Saas.Controllers.TenantsPermissions@Delete\";\r\n };\r\n };\r\n\r\n public static Storage = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.Storage.StoragePermissions@View\";\r\n };\r\n\r\n public static Trash = class\r\n {\r\n public static View = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TrashPermissions@View\";\r\n public static Recover = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TrashPermissions@Recover\";\r\n public static Delete = \"Ideo.Core.App.Areas.Admin.Core.Controllers.TrashPermissions@Delete\";\r\n };\r\n}\r\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var applyListFormat = function (editor, listName, styleValue) {\n var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n var register = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getNumberStyles = function (editor) {\n var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var getBulletStyles = function (editor) {\n var styles = editor.getParam('advlist_bullet_styles', 'default,circle,square');\n return styles ? styles.split(/[ ,]/) : [];\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var isChildOfBody = function (editor, elm) {\n return editor.$.contains(editor.getBody(), elm);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isListNode = function (editor) {\n return function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n };\n var getSelectedStyleType = function (editor) {\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n var style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var styleValueToText = function (styleValue) {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, function (chr) {\n return chr.toUpperCase();\n });\n };\n var isWithinList = function (editor, e, nodeName) {\n var tableCellIndex = findIndex(e.parents, isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$1.grep(parents, isListNode(editor));\n return lists.length > 0 && lists[0].nodeName === nodeName;\n };\n var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.ui.registry.addSplitButton(id, {\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: function (callback) {\n var items = global$1.map(styles, function (styleValue) {\n var iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n var iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n var itemValue = styleValue === 'default' ? '' : styleValue;\n var 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: function () {\n return editor.execCommand(cmd);\n },\n onItemAction: function (_splitButtonApi, value) {\n applyListFormat(editor, nodeName, value);\n },\n select: function (value) {\n var listStyleType = getSelectedStyleType(editor);\n return listStyleType.map(function (listStyle) {\n return value === listStyle;\n }).getOr(false);\n },\n onSetup: function (api) {\n var nodeChangeHandler = function (e) {\n api.setActive(isWithinList(editor, e, nodeName));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n }\n });\n };\n var addButton = function (editor, id, tooltip, cmd, nodeName, _styles) {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: function (api) {\n var nodeChangeHandler = function (e) {\n api.setActive(isWithinList(editor, e, nodeName));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n },\n onAction: function () {\n return editor.execCommand(cmd);\n }\n });\n };\n var addControl = function (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);\n }\n };\n var register$1 = function (editor) {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n function Plugin () {\n global.add('advlist', function (editor) {\n if (editor.hasPlugin('lists')) {\n register$1(editor);\n register(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 * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isUndefined = eq(undefined);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var fireRestoreDraft = function (editor) {\n return editor.fire('RestoreDraft');\n };\n var fireStoreDraft = function (editor) {\n return editor.fire('StoreDraft');\n };\n var fireRemoveDraft = function (editor) {\n return editor.fire('RemoveDraft');\n };\n\n var parse = function (timeString, defaultTime) {\n var multiples = {\n s: 1000,\n m: 60000\n };\n var toParse = timeString || defaultTime;\n var parsedTime = /^(\\d+)([ms]?)$/.exec('' + toParse);\n return (parsedTime[2] ? multiples[parsedTime[2]] : 1) * parseInt(toParse, 10);\n };\n\n var shouldAskBeforeUnload = function (editor) {\n return editor.getParam('autosave_ask_before_unload', true);\n };\n var getAutoSavePrefix = function (editor) {\n var location = document.location;\n return editor.getParam('autosave_prefix', 'tinymce-autosave-{path}{query}{hash}-{id}-').replace(/{path}/g, location.pathname).replace(/{query}/g, location.search).replace(/{hash}/g, location.hash).replace(/{id}/g, editor.id);\n };\n var shouldRestoreWhenEmpty = function (editor) {\n return editor.getParam('autosave_restore_when_empty', false);\n };\n var getAutoSaveInterval = function (editor) {\n return parse(editor.getParam('autosave_interval'), '30s');\n };\n var getAutoSaveRetention = function (editor) {\n return parse(editor.getParam('autosave_retention'), '20m');\n };\n\n var isEmpty = function (editor, html) {\n if (isUndefined(html)) {\n return editor.dom.isEmpty(editor.getBody());\n } else {\n var trimmedHtml = global$3.trim(html);\n if (trimmedHtml === '') {\n return true;\n } else {\n var fragment = new DOMParser().parseFromString(trimmedHtml, 'text/html');\n return editor.dom.isEmpty(fragment);\n }\n }\n };\n var hasDraft = function (editor) {\n var time = parseInt(global$2.getItem(getAutoSavePrefix(editor) + 'time'), 10) || 0;\n if (new Date().getTime() - time > getAutoSaveRetention(editor)) {\n removeDraft(editor, false);\n return false;\n }\n return true;\n };\n var removeDraft = function (editor, fire) {\n var prefix = getAutoSavePrefix(editor);\n global$2.removeItem(prefix + 'draft');\n global$2.removeItem(prefix + 'time');\n if (fire !== false) {\n fireRemoveDraft(editor);\n }\n };\n var storeDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (!isEmpty(editor) && editor.isDirty()) {\n global$2.setItem(prefix + 'draft', editor.getContent({\n format: 'raw',\n no_events: true\n }));\n global$2.setItem(prefix + 'time', new Date().getTime().toString());\n fireStoreDraft(editor);\n }\n };\n var restoreDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (hasDraft(editor)) {\n editor.setContent(global$2.getItem(prefix + 'draft'), { format: 'raw' });\n fireRestoreDraft(editor);\n }\n };\n var startStoreDraft = function (editor) {\n var interval = getAutoSaveInterval(editor);\n global$1.setEditorInterval(editor, function () {\n storeDraft(editor);\n }, interval);\n };\n var restoreLastDraft = function (editor) {\n editor.undoManager.transact(function () {\n restoreDraft(editor);\n removeDraft(editor);\n });\n editor.focus();\n };\n\n var get = function (editor) {\n return {\n hasDraft: function () {\n return hasDraft(editor);\n },\n storeDraft: function () {\n return storeDraft(editor);\n },\n restoreDraft: function () {\n return restoreDraft(editor);\n },\n removeDraft: function (fire) {\n return removeDraft(editor, fire);\n },\n isEmpty: function (html) {\n return isEmpty(editor, html);\n }\n };\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var setup = function (editor) {\n editor.editorManager.on('BeforeUnload', function (e) {\n var msg;\n global$3.each(global$4.get(), function (editor) {\n if (editor.plugins.autosave) {\n editor.plugins.autosave.storeDraft();\n }\n if (!msg && editor.isDirty() && shouldAskBeforeUnload(editor)) {\n msg = editor.translate('You have unsaved changes are you sure you want to navigate away?');\n }\n });\n if (msg) {\n e.preventDefault();\n e.returnValue = msg;\n }\n });\n };\n\n var makeSetupHandler = function (editor) {\n return function (api) {\n api.setDisabled(!hasDraft(editor));\n var editorEventCallback = function () {\n return api.setDisabled(!hasDraft(editor));\n };\n editor.on('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);\n return function () {\n return editor.off('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);\n };\n };\n };\n var register = function (editor) {\n startStoreDraft(editor);\n editor.ui.registry.addButton('restoredraft', {\n tooltip: 'Restore last draft',\n icon: 'restore-draft',\n onAction: function () {\n restoreLastDraft(editor);\n },\n onSetup: makeSetupHandler(editor)\n });\n editor.ui.registry.addMenuItem('restoredraft', {\n text: 'Restore last draft',\n icon: 'restore-draft',\n onAction: function () {\n restoreLastDraft(editor);\n },\n onSetup: makeSetupHandler(editor)\n });\n };\n\n function Plugin () {\n global.add('autosave', function (editor) {\n setup(editor);\n register(editor);\n editor.on('init', function () {\n if (shouldRestoreWhenEmpty(editor) && editor.dom.isEmpty(editor.getBody())) {\n restoreDraft(editor);\n }\n });\n return get(editor);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"wordcount\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/wordcount')\n// ES2015:\n// import 'tinymce/plugins/wordcount'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var range = function (num, f) {\n var r = [];\n for (var i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var pure = function (x) {\n return [x];\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n var last = function (xs) {\n return get(xs, xs.length - 1);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (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: function (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: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (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: 'OSX',\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 var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var is = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq$1 = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is;\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var size = function (obj) {\n return keys(obj).length;\n };\n var get$1 = function (obj, key) {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n var isEmpty = function (r) {\n for (var x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n var validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n var isValidSection = function (parentName) {\n return contains(validSectionList, parentName);\n };\n var grid = function (rows, columns) {\n return {\n rows: rows,\n columns: columns\n };\n };\n var address = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n var detail = function (element, rowspan, colspan) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan\n };\n };\n var detailnew = function (element, rowspan, colspan, isNew) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan,\n isNew: isNew\n };\n };\n var extended = function (element, rowspan, colspan, row, column, isLocked) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan,\n row: row,\n column: column,\n isLocked: isLocked\n };\n };\n var rowdata = function (element, cells, section) {\n return {\n element: element,\n cells: cells,\n section: section\n };\n };\n var elementnew = function (element, isNew, isLocked) {\n return {\n element: element,\n isNew: isNew,\n isLocked: isLocked\n };\n };\n var rowdatanew = function (element, cells, section, isNew) {\n return {\n element: element,\n cells: cells,\n section: section,\n isNew: isNew\n };\n };\n var rowcells = function (cells, section) {\n return {\n cells: cells,\n section: section\n };\n };\n var rowdetails = function (details, section) {\n return {\n details: details,\n section: section\n };\n };\n var bounds = function (startRow, startCol, finishRow, finishCol) {\n return {\n startRow: startRow,\n startCol: startCol,\n finishRow: finishRow,\n finishCol: finishCol\n };\n };\n var columnext = function (element, colspan, column) {\n return {\n element: element,\n colspan: colspan,\n column: column\n };\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n var isTag = function (tag) {\n return function (e) {\n return isElement(e) && name(e) === tag;\n };\n };\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var 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 var offsetParent = function (element) {\n return Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n };\n var prevSibling = function (element) {\n return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = function () {\n return getBody(SugarElement.fromDom(document));\n };\n var getBody = function (doc) {\n var 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 var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function 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 var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var 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 var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Optional.some(child_1);\n }\n var 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 var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n var is$1 = function (element, selector) {\n return is(element, selector);\n };\n return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n };\n\n var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom;\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$2 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$2(element, key));\n };\n var remove = function (element, key) {\n element.dom.removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom.attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var isSupported$1 = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (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 var internalRemove = function (dom, property) {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom;\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$3 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$1 = function (element, property) {\n var dom = element.dom;\n internalRemove(dom, property);\n if (getOpt(element, 'style').map(trim).is('')) {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom;\n var targetDom = target.dom;\n if (isSupported$1(sourceDom) && isSupported$1(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var getAttrValue = function (cell, name, fallback) {\n if (fallback === void 0) {\n fallback = 0;\n }\n return getOpt(cell, name).map(function (value) {\n return parseInt(value, 10);\n }).getOr(fallback);\n };\n var getSpan = function (cell, type) {\n return getAttrValue(cell, type, 1);\n };\n var hasColspan = function (cell) {\n return getSpan(cell, 'colspan') > 1;\n };\n var hasRowspan = function (cell) {\n return getSpan(cell, 'rowspan') > 1;\n };\n var getCssValue = function (element, property) {\n return parseInt(get$3(element, property), 10);\n };\n var minWidth = constant(10);\n var minHeight = constant(10);\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, always);\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n if (is(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains(tags, name(element))) {\n return Optional.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return firstLayer(ancestor, 'th,td');\n };\n var columns = function (ancestor) {\n if (is(ancestor, 'colgroup')) {\n return children$2(ancestor, 'col');\n } else {\n return bind(columnGroups(ancestor), function (columnGroup) {\n return children$2(columnGroup, 'col');\n });\n }\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var rows = function (ancestor) {\n return firstLayer(ancestor, 'tr');\n };\n var columnGroups = function (ancestor) {\n return table(ancestor).fold(constant([]), function (table) {\n return children$2(table, 'colgroup');\n });\n };\n\n var fromRowsOrColGroups = function (elems, getSection) {\n return map(elems, function (row) {\n if (name(row) === 'colgroup') {\n var cells$1 = map(columns(row), function (column) {\n var colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdata(row, cells$1, 'colgroup');\n } else {\n var cells$1 = map(cells(row), function (cell) {\n var rowspan = getAttrValue(cell, 'rowspan', 1);\n var colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells$1, getSection(row));\n }\n });\n };\n var getParentSection = function (group) {\n return parent(group).map(function (parent) {\n var parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n };\n var fromTable = function (table) {\n var rows$1 = rows(table);\n var columnGroups$1 = columnGroups(table);\n var elems = __spreadArrays(columnGroups$1, rows$1);\n return fromRowsOrColGroups(elems, getParentSection);\n };\n var fromPastedRows = function (elems, section) {\n return fromRowsOrColGroups(elems, function () {\n return section;\n });\n };\n\n var addCells = function (gridRow, index, cells) {\n var existingCells = gridRow.cells;\n var before = existingCells.slice(0, index);\n var after = existingCells.slice(index);\n var newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n var addCell = function (gridRow, index, cell) {\n return addCells(gridRow, index, [cell]);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells;\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section);\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells;\n var r = map(cells, f);\n return rowcells(r, gridRow.section);\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element;\n };\n var cellLength = function (gridRow) {\n return gridRow.cells.length;\n };\n var extractGridDetails = function (grid) {\n var result = partition(grid, function (row) {\n return row.section === 'colgroup';\n });\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n\n var LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n var getLockedColumnsFromTable = function (table) {\n return getOpt(table, LOCKED_COL_ATTR).bind(function (lockedColStr) {\n return Optional.from(lockedColStr.match(/\\d+/g));\n }).map(function (lockedCols) {\n return mapToObject(lockedCols, always);\n });\n };\n var getLockedColumnsFromGrid = function (grid) {\n var locked = foldl(extractGridDetails(grid).rows, function (acc, row) {\n each(row.cells, function (cell, idx) {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n var lockedArr = mapToArray(locked, function (_val, key) {\n return parseInt(key, 10);\n });\n return sort(lockedArr);\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access[key(row, column)];\n return raw !== undefined ? Optional.some(raw) : Optional.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all, function (r) {\n return r.cells;\n });\n return filter(all, predicate);\n };\n var generateColumns = function (rowData) {\n var columnsGroup = {};\n var index = 0;\n each(rowData.cells, function (column) {\n var colspan = column.colspan;\n range(colspan, function (columnIndex) {\n var colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var columns = {};\n var tableOpt = head(list).map(function (rowData) {\n return rowData.element;\n }).bind(table);\n var lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n var maxRows = 0;\n var maxColumns = 0;\n var rowCount = 0;\n each(list, function (rowData) {\n if (rowData.section === 'colgroup') {\n columns = generateColumns(rowData);\n } else {\n var currentRow_1 = [];\n each(rowData.cells, function (rowCell) {\n var start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n var isLocked = hasNonNullableKey(lockedColumns, start.toString());\n var current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (var occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (var occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n var rowPosition = rowCount + occupiedRowPosition;\n var columnPosition = start + occupiedColumnPosition;\n var newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow_1.push(current);\n });\n maxRows++;\n cells.push(rowdata(rowData.element, currentRow_1, rowData.section));\n rowCount++;\n }\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access: access,\n all: cells,\n columns: columns\n };\n };\n var fromTable$1 = function (table) {\n var list = fromTable(table);\n return generate(list);\n };\n var justCells = function (warehouse) {\n return bind(warehouse.all, function (w) {\n return w.cells;\n });\n };\n var justColumns = function (warehouse) {\n return values(warehouse.columns);\n };\n var hasColumns = function (warehouse) {\n return keys(warehouse.columns).length > 0;\n };\n var getColumnAt = function (warehouse, columnIndex) {\n return Optional.from(warehouse.columns[columnIndex]);\n };\n var Warehouse = {\n fromTable: fromTable$1,\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells,\n justColumns: justColumns,\n hasColumns: hasColumns,\n getColumnAt: getColumnAt\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column;\n var rightEdge = detail.column + detail.colspan - 1;\n var topEdge = detail.row;\n var bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n var isWithin = function (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 var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (var 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 var getBounds = function (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 var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return isRectangular(warehouse, bounds);\n });\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(function (detail) {\n var startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n var startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element;\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element;\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element;\n });\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n var optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return getBox(warehouse, first, last);\n };\n var getWarehouse = Warehouse.fromTable;\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each(children(element), function (rogue) {\n remove$2(rogue);\n });\n };\n var remove$2 = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$2(wrapper);\n };\n\n var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api = NodeValue(isText, 'text');\n var get$4 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n return api.set(element, value);\n };\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 function DomUniverse () {\n var clone$1 = function (element) {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n var document = function (element) {\n return documentOrOwner(element).dom;\n };\n var isBoundary = function (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 var isEmptyTag = function (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 var isNonEditable = function (element) {\n return isElement(element) && get$2(element, 'contenteditable') === 'false';\n };\n var comparePosition = function (element, other) {\n return element.dom.compareDocumentPosition(other.dom);\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n var isSpecial = function (element) {\n var 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 return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$3,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get$2,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone: clone$1,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial: isSpecial,\n getText: get$4,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag,\n isNonEditable: isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n }\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Optional.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$2 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$2(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared: shared\n };\n };\n\n var sharedOne = oneAll;\n var ancestors$3 = ancestors$2;\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return ancestors$3(universe, start, finish, isRoot);\n };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (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: start,\n finish: finish\n });\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts$1(startTable, start, finish),\n start: start,\n finish: finish\n });\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n });\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n });\n } else {\n return ancestors$4(start, finish).shared.bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var 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 var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return sharedOne$1(lookupTable, [\n first,\n last\n ]).map(function (table) {\n return {\n first: first,\n last: last,\n table: table\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes.map(function (boxes) {\n return {\n boxes: boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return moveBy$1(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n var retrieve$1 = function (container, selector) {\n return retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq$1(container, ancestor);\n };\n var sectionSelector = 'thead,tfoot,tbody,table';\n var firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n var lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq$1(fA, lA) ? getBox$1(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n var generate$1 = function (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 var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['element'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var none$1 = type$1.none;\n var multiple = type$1.multiple;\n var single = type$1.single;\n\n var Selections = function (lazyRoot, getStart, selectedSelector) {\n var get = function () {\n return retrieve$1(lazyRoot(), selectedSelector).fold(function () {\n return getStart().map(single).getOrThunk(none$1);\n }, function (cells) {\n return multiple(cells);\n });\n };\n return { get: get };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = SugarElement.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var bindFrom = function (a, f) {\n return a !== undefined && a !== null ? f(a) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var Dimension = function (name, getOffset) {\n var set = function (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 var dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$3(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$3(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api$1 = Dimension('width', function (element) {\n return element.dom.offsetWidth;\n });\n var get$5 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var columns$1 = function (warehouse, isValidCell) {\n if (isValidCell === void 0) {\n isValidCell = always;\n }\n var grid = warehouse.grid;\n var cols = range(grid.columns, identity);\n var rowsArr = range(grid.rows, identity);\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column === col;\n }).toArray();\n });\n };\n var isValid = function (detail) {\n return detail.colspan === 1 && isValidCell(detail.element);\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isValid, getFallback);\n });\n };\n var decide = function (getBlock, isValid, getFallback) {\n var inBlock = getBlock();\n var validInBlock = find(inBlock, isValid);\n var detailOption = validInBlock.orThunk(function () {\n return Optional.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element;\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid;\n var rowsArr = range(grid.rows, identity);\n var cols = range(grid.columns, identity);\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Optional.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Optional.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var onDirection = function (isLtr, isRtl) {\n return function (element) {\n return getDirection(element) === 'rtl' ? isRtl : isLtr;\n };\n };\n var getDirection = function (element) {\n return get$3(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var api$2 = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$6 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var 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 var rowInfo = function (row, y) {\n return {\n row: row,\n y: y\n };\n };\n var colInfo = function (col, x) {\n return {\n col: col,\n x: x\n };\n };\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left + getOuter(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left;\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top;\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter$1(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var detect$4 = onDirection(ltr, rtl);\n var width = {\n delta: function (amount, table) {\n return detect$4(table).delta(amount, table);\n },\n positions: function (cols, table) {\n return detect$4(table).positions(cols, table);\n },\n edge: function (cell) {\n return detect$4(cell).edge(cell);\n }\n };\n\n var 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 var pattern = function () {\n var decimalDigits = '[0-9]+';\n var signedInteger = '[+-]?' + decimalDigits;\n var exponentPart = '[eE]' + signedInteger;\n var dot = '\\\\.';\n var opt = function (input) {\n return '(?:' + input + ')?';\n };\n var unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n var float = '[+-]?(?:' + unsignedDecimalLiteral + ')';\n return new RegExp('^(' + float + ')(.*)$');\n }();\n var isUnit = function (unit, accepted) {\n return exists(accepted, function (acc) {\n return exists(units[acc], function (check) {\n return unit === check;\n });\n });\n };\n var parse = function (input, accepted) {\n var match = Optional.from(pattern.exec(input));\n return match.bind(function (array) {\n var value = Number(array[1]);\n var unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value: value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n var needManualCalc = function () {\n var browser = detect$3().browser;\n return browser.isIE() || browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$3(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var height = cell.dom.getBoundingClientRect().height;\n var boxSizing = get$3(cell, 'box-sizing');\n if (boxSizing === 'border-box') {\n return height;\n } else {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var borders = borderTop + borderBottom;\n return height - paddingTop - paddingBottom - borders;\n }\n };\n var getCalculatedWidth = function (cell) {\n var width = cell.dom.getBoundingClientRect().width;\n var boxSizing = get$3(cell, 'box-sizing');\n if (boxSizing === 'border-box') {\n return width;\n } else {\n var paddingLeft = getProp(cell, 'padding-left', 0);\n var paddingRight = getProp(cell, 'padding-right', 0);\n var borderLeft = getProp(cell, 'border-left-width', 0);\n var borderRight = getProp(cell, 'border-right-width', 0);\n var borders = borderLeft + borderRight;\n return width - paddingLeft - paddingRight - borders;\n }\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$6(cell));\n };\n var getWidth = function (cell) {\n return needManualCalc() ? getCalculatedWidth(cell) : getProp(cell, 'width', get$5(cell));\n };\n\n var rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var getPercentSize = function (elm, getter) {\n var relativeParent = offsetParent(elm).getOr(getBody(owner(elm)));\n return getter(elm) / getter(relativeParent) * 100;\n };\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$6(cell);\n }\n return normalizePixelSize(value, cell, get$6, setHeight);\n };\n var get$7 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Optional.from(get$2(element, 'width'));\n }, function (width) {\n return Optional.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = rPercentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = getWidth(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$5(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = rPixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = rPercentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return getWidth(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return getWidth(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$7(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n return parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]);\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var getPixelTableWidth = function (table) {\n return get$5(table) + 'px';\n };\n var getPercentTableWidth = function (table) {\n return getPercentSize(table, get$5) + '%';\n };\n var isPercentSizing = function (table) {\n return getRawWidth(table).exists(function (size) {\n return rPercentageBasedSizeRegex.test(size);\n });\n };\n var isPixelSizing = function (table) {\n return getRawWidth(table).exists(function (size) {\n return rPixelBasedSizeRegex.test(size);\n });\n };\n var isNoneSizing = function (table) {\n return getRawWidth(table).isNone();\n };\n var percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n var pixelBasedSizeRegex = constant(rPixelBasedSizeRegex);\n\n var isCol = isTag('col');\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n var fallback = function (e) {\n return isCol(e) ? get$5(e) : getPixelWidth(e, tableSize);\n };\n return getRaw$1(cell, 'width', fallback);\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', getHeight$1);\n };\n var justCols = function (warehouse) {\n return map(Warehouse.justColumns(warehouse), function (column) {\n return Optional.from(column.element);\n });\n };\n var hasRawStyle = function (cell, prop) {\n return getRaw(cell, prop).isSome();\n };\n var isValidColumn = function (cell) {\n return !isCol(cell) || hasRawStyle(cell, 'width');\n };\n var getDimension = function (cellOpt, index, backups, filter, getter, fallback) {\n return cellOpt.filter(filter).fold(function () {\n return fallback(deduce(backups, index));\n }, function (cell) {\n return getter(cell);\n });\n };\n var getWidthFrom = function (warehouse, table, getWidth, fallback, tableSize) {\n var columnCells = columns$1(warehouse, function (cell) {\n return hasRawStyle(cell, 'width');\n });\n var columns = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n var backups = [Optional.some(width.edge(table))].concat(map(width.positions(columnCells, table), function (pos) {\n return pos.map(function (p) {\n return p.x;\n });\n }));\n var colFilter = not(hasColspan);\n return map(columns, function (cellOption, c) {\n return getDimension(cellOption, c, backups, colFilter, function (column) {\n if (isValidColumn(column)) {\n return getWidth(column, tableSize);\n } else {\n var cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, function (cell) {\n return fallback(Optional.some(get$5(cell)));\n }, fallback);\n }\n }, fallback);\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, table, direction, getHeight, fallback) {\n var rows = rows$1(warehouse);\n var backups = [Optional.some(direction.edge(table))].concat(map(direction.positions(rows, table), function (pos) {\n return pos.map(function (p) {\n return p.y;\n });\n }));\n return map(rows, function (cellOption, c) {\n return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n });\n };\n var getPixelHeights = function (warehouse, table, direction) {\n return getHeightFrom(warehouse, table, direction, getHeight$1, function (deduced) {\n return deduced.getOrThunk(minHeight);\n });\n };\n var getRawHeights = function (warehouse, table, direction) {\n return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var noneSize = function (table) {\n var getWidth = function () {\n return get$5(table);\n };\n var zero = constant(0);\n var getWidths = function (warehouse, tableSize) {\n return getPixelWidths(warehouse, table, tableSize);\n };\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: 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 var percentageSize = function (initialWidth, table) {\n var floatWidth = Cell(parseFloat(initialWidth));\n var pixelWidth = Cell(get$5(table));\n var getCellDelta = function (delta) {\n return delta / pixelWidth.get() * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return minWidth() / pixelWidth.get() * 100;\n };\n var adjustTableWidth = function (delta) {\n var currentWidth = floatWidth.get();\n var change = delta / 100 * currentWidth;\n var newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n floatWidth.set(newWidth);\n pixelWidth.set(get$5(table));\n };\n var getWidths = function (warehouse, tableSize) {\n return getPercentageWidths(warehouse, table, tableSize);\n };\n return {\n width: floatWidth.get,\n pixelWidth: pixelWidth.get,\n getWidths: getWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth: adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n var pixelSize = function (initialWidth, table) {\n var width = Cell(initialWidth);\n var getWidth = width.get;\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n var adjustTableWidth = function (delta) {\n var newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n width.set(newWidth);\n };\n var getWidths = function (warehouse, tableSize) {\n return getPixelWidths(warehouse, table, tableSize);\n };\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: getWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth: adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth, element);\n }\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth, element);\n };\n var getTableSize = function (table) {\n var width = getRawWidth(table);\n return width.fold(function () {\n return noneSize(table);\n }, function (w) {\n return chooseSize(table, w);\n });\n };\n var TableSize = {\n getTableSize: getTableSize,\n pixelSize: pixelSize,\n percentageSize: percentageSize,\n noneSize: noneSize\n };\n\n var statsStruct = function (minRow, minCol, maxRow, maxCol, allCells, selectedCells) {\n return {\n minRow: minRow,\n minCol: minCol,\n maxRow: maxRow,\n maxCol: maxCol,\n allCells: allCells,\n selectedCells: selectedCells\n };\n };\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid.columns;\n var totalRows = house.grid.rows;\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n var allCells = [];\n var selectedCells = [];\n each$1(house.access, function (detail) {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n var startRow = detail.row;\n var endRow = startRow + detail.rowspan - 1;\n var startCol = detail.column;\n var 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 var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element;\n var td = SugarElement.fromTag('td');\n append(td, SugarElement.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid.columns;\n var totalRows = house.grid.rows;\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (replica, stats, house, widthDelta) {\n each$1(house.columns, function (col) {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$2(col.element);\n }\n });\n var emptyRows = filter(firstLayer(replica, 'tr'), function (row) {\n return row.dom.childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each(firstLayer(replica, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(replica, LOCKED_COL_ATTR);\n remove(replica, 'data-snooker-col-series');\n var tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n var getTableWidthDelta = function (table, warehouse, tableSize, stats) {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n var colWidths = getPixelWidths(warehouse, table, tableSize);\n var allColsWidth = foldl(colWidths, function (acc, width) {\n return acc + width;\n }, 0);\n var selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), function (acc, width) {\n return acc + width;\n }, 0);\n var newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n var delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element, selectedSelector);\n };\n var replica = deep(table);\n var list = fromTable(replica);\n var tableSize = TableSize.getTableSize(table);\n var replicaHouse = Warehouse.generate(list);\n var replicaStats = findSelectedStats(replicaHouse, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = filterFirstLayer(replica, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n var house = Warehouse.fromTable(table);\n var widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n var nbsp = '\\xA0';\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(nbsp) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n var transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n var createCell = function () {\n var td = SugarElement.fromTag('td');\n append(td, SugarElement.fromTag('br'));\n return td;\n };\n var createCol = function () {\n return SugarElement.fromTag('col');\n };\n var createColgroup = function () {\n return SugarElement.fromTag('colgroup');\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return SugarElement.fromTag('tr', doc.dom);\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq$1(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cloneAppropriateAttributes = function (original, clone) {\n each$1(transferableAttributes, function (validAttributes, attributeName) {\n return getOpt(original, attributeName).filter(function (attribute) {\n return contains(validAttributes, attribute);\n }).each(function (attribute) {\n return set(clone, attributeName, attribute);\n });\n });\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var cloneCss = function (prev, clone) {\n copy(prev.element, clone);\n remove$1(clone, 'height');\n if (prev.colspan !== 1) {\n remove$1(clone, 'width');\n }\n };\n var newCell = function (prev) {\n var docu = owner(prev.element);\n var td = SugarElement.fromTag(name(prev.element), docu.dom);\n var 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 var lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n var newCol = function (prev) {\n var doc = owner(prev.element);\n var 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,\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n col: createCol,\n colgroup: createColgroup,\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n var fromDom$1 = function (nodes) {\n return map(nodes, SugarElement.fromDom);\n };\n\n var getNodeName = function (elm) {\n return elm.nodeName.toLowerCase();\n };\n var getBody$1 = function (editor) {\n return SugarElement.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq$1(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addPxSuffix = function (size) {\n return /^\\d+(\\.\\d+)?$/.test(size) ? size + 'px' : size;\n };\n var removeDataStyle = function (table) {\n remove(table, 'data-mce-style');\n var removeStyleAttribute = function (element) {\n return remove(element, 'data-mce-style');\n };\n each(cells(table), removeStyleAttribute);\n each(columns(table), removeStyleAttribute);\n };\n var getRawWidth$1 = function (editor, elm) {\n var raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Optional.from(raw).filter(isNotEmpty);\n };\n var isPercentage = function (value) {\n return /^(\\d+(\\.\\d+)?)%$/.test(value);\n };\n var isPixel = function (value) {\n return /^(\\d+(\\.\\d+)?)px$/.test(value);\n };\n var getSelectionStart = function (editor) {\n return SugarElement.fromDom(editor.selection.getStart());\n };\n\n var selection = function (selections) {\n return cata(selections.get(), constant([]), identity, pure);\n };\n var unmergable = function (selections) {\n var hasSpan = function (elem, type) {\n return getOpt(elem, type).exists(function (span) {\n return parseInt(span, 10) > 1;\n });\n };\n var hasRowOrColSpan = function (elem) {\n return hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n };\n var candidates = selection(selections);\n return candidates.length > 0 && forall(candidates, hasRowOrColSpan) ? Optional.some(candidates) : Optional.none();\n };\n var mergable = function (table, selections, ephemera) {\n return cata(selections.get(), Optional.none, function (cells) {\n if (cells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(function (bounds) {\n return {\n bounds: bounds,\n cells: cells\n };\n });\n }\n }, Optional.none);\n };\n\n var strSelected = 'data-mce-selected';\n var strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n var strAttributeSelector = '[' + strSelected + ']';\n var strFirstSelected = 'data-mce-first-selected';\n var strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n var strLastSelected = 'data-mce-last-selected';\n var strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n var attributeSelector = strAttributeSelector;\n var ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n var noMenu = function (cell) {\n return {\n element: cell,\n mergable: Optional.none(),\n unmergable: Optional.none(),\n selection: [cell]\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: cell,\n mergable: mergable(table, selections, ephemera),\n unmergable: unmergable(selections),\n selection: selection(selections)\n };\n };\n var paste$1 = function (element, clipboard, generators) {\n return {\n element: element,\n clipboard: clipboard,\n generators: generators\n };\n };\n var pasteRows = function (selections, cell, clipboard, generators) {\n return {\n selection: selection(selections),\n clipboard: clipboard,\n generators: generators\n };\n };\n\n var extractSelected = function (cells) {\n return table(cells[0]).map(function (table) {\n var replica = extract(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom, {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom.innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Optional.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = SugarElement.fromDom(domCell);\n table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n var isTable = function (elm) {\n return name(elm) === 'table';\n };\n if (elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n var doc = SugarElement.fromDom(editor.getDoc());\n var generators = paste(doc);\n var targets = paste$1(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (data) {\n editor.selection.setRng(data.rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n\n var 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 var ColumnContext = __assign({}, adt);\n\n var neighbours = function (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 var determine = function (input, column, step, tableSize, resize) {\n var result = input.slice(0);\n var context = neighbours(input, column);\n var onNone = constant(map(result, constant(0)));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onLeft = function (index, next) {\n return resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n var onMiddle = function (prev, index, next) {\n return resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n var onRight = function (prev, index) {\n return resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidthForCells = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width: width,\n colspan: cell.colspan\n };\n });\n };\n var recalculateWidthForColumns = function (warehouse, widths) {\n var groups = Warehouse.justColumns(warehouse);\n return map(groups, function (column, index) {\n return {\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n };\n });\n };\n var recalculateHeightForCells = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row, cell.row + cell.rowspan, heights);\n return {\n element: cell.element,\n height: height,\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all, function (row, i) {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var recalculate = function (warehouse, widths) {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n var recalculateAndApply = function (warehouse, widths, tableSize) {\n var newSizes = recalculate(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n var adjustWidth = function (table, delta, index, resizing, tableSize) {\n var warehouse = Warehouse.fromTable(table);\n var step = tableSize.getCellDelta(delta);\n var widths = tableSize.getWidths(warehouse, tableSize);\n var isLastColumn = index === warehouse.grid.columns - 1;\n var clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n var deltas = determine(widths, index, clampedStep, tableSize, resizing);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = Warehouse.fromTable(table);\n var heights = getPixelHeights(warehouse, table, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, minHeight()) : dy;\n });\n var newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n var newRowSizes = matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n setHeight(row.element, row.height);\n });\n each(newCellSizes, function (cell) {\n setHeight(cell.element, cell.height);\n });\n var total = sumUp(newHeights);\n setHeight(table, total);\n };\n var adjustAndRedistributeWidths = function (_table, list, details, tableSize, resizeBehaviour) {\n var warehouse = Warehouse.generate(list);\n var sizes = tableSize.getWidths(warehouse, tableSize);\n var tablePixelWidth = tableSize.pixelWidth();\n var _a = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative), newSizes = _a.newSizes, delta = _a.delta;\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n var adjustWidthTo = function (_table, list, _info, tableSize) {\n var warehouse = Warehouse.generate(list);\n var widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n var zero = function (array) {\n return map(array, constant(0));\n };\n var surround = function (sizes, startIndex, endIndex, results, f) {\n return f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n };\n var clampDeltaHelper = function (predicate) {\n return function (sizes, index, delta, minCellSize) {\n if (!predicate(delta)) {\n return delta;\n } else {\n var newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n var diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n };\n var clampNegativeDelta = clampDeltaHelper(function (delta) {\n return delta < 0;\n });\n var clampDelta = clampDeltaHelper(always);\n var resizeTable = function () {\n var calcFixedDeltas = function (sizes, index, next, delta, minCellSize) {\n var clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n var calcRelativeDeltas = function (sizes, index, delta, minCellSize) {\n var ratio = (100 + delta) / 100;\n var newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map(sizes, function (size, idx) {\n var newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n var calcLeftEdgeDeltas = function (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 var calcMiddleDeltas = function (sizes, _prev, index, next, delta, minCellSize, isRelative) {\n return calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n };\n var resizeTable = function (resizer, delta) {\n return resizer(delta);\n };\n var calcRightEdgeDeltas = function (sizes, _prev, index, delta, minCellSize, isRelative) {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n var clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n var calcRedestributedWidths = function (sizes, totalWidth, pixelDelta, isRelative) {\n if (isRelative) {\n var tableWidth = totalWidth + pixelDelta;\n var ratio_1 = tableWidth / totalWidth;\n var newSizes = map(sizes, function (size) {\n return size / ratio_1;\n });\n return {\n delta: ratio_1 * 100 - 100,\n newSizes: newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable: resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas: calcLeftEdgeDeltas,\n calcMiddleDeltas: calcMiddleDeltas,\n calcRightEdgeDeltas: calcRightEdgeDeltas,\n calcRedestributedWidths: calcRedestributedWidths\n };\n };\n var preserveTable = function () {\n var calcLeftEdgeDeltas = function (sizes, index, next, delta, minCellSize) {\n var idx = delta >= 0 ? next : index;\n var clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n var calcMiddleDeltas = function (sizes, _prev, index, next, delta, minCellSize) {\n return calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n };\n var resizeTable = function (resizer, delta, isLastColumn) {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n var calcRightEdgeDeltas = function (sizes, _prev, _index, delta, _minCellSize, isRelative) {\n if (isRelative) {\n return zero(sizes);\n } else {\n var diff = delta / sizes.length;\n return map(sizes, constant(diff));\n }\n };\n var clampTableDelta = function (sizes, index, delta, minCellSize, isLastColumn) {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n var maxDelta = foldl(sizes, function (a, b) {\n return a + b - minCellSize;\n }, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n var calcRedestributedWidths = function (sizes, _totalWidth, _pixelDelta, _isRelative) {\n return {\n delta: 0,\n newSizes: sizes\n };\n };\n return {\n resizeTable: resizeTable,\n clampTableDelta: clampTableDelta,\n calcLeftEdgeDeltas: calcLeftEdgeDeltas,\n calcMiddleDeltas: calcMiddleDeltas,\n calcRightEdgeDeltas: calcRightEdgeDeltas,\n calcRedestributedWidths: calcRedestributedWidths\n };\n };\n\n var only = function (element, isResizable) {\n var parent = Optional.from(element.dom.documentElement).map(SugarElement.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable: isResizable\n };\n };\n var detached = function (editable, chrome, isResizable) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin,\n isResizable: isResizable\n };\n };\n var body$1 = function (editable, chrome, isResizable) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable: isResizable\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var adt$1 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n var validateFor = function (suffix, type, value) {\n var rawAmount = value.substring(0, value.length - suffix.length);\n var amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$1.invalid(value);\n };\n var from$1 = function (value) {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$1.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$1.pixels, value);\n }\n return adt$1.invalid(value);\n };\n var Size = __assign(__assign({}, adt$1), { from: from$1 });\n\n var redistributeToPercent = function (widths, totalWidth) {\n return map(widths, function (w) {\n var colType = Size.from(w);\n return colType.fold(function () {\n return w;\n }, function (px) {\n var ratio = px / totalWidth * 100;\n return ratio + '%';\n }, function (pc) {\n return pc + '%';\n });\n });\n };\n var redistributeToPx = function (widths, totalWidth, newTotalWidth) {\n var scale = newTotalWidth / totalWidth;\n return map(widths, function (w) {\n var colType = Size.from(w);\n return colType.fold(function () {\n return w;\n }, function (px) {\n return px * scale + 'px';\n }, function (pc) {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n var redistributeEmpty = function (newWidthType, columns) {\n var f = newWidthType.fold(function () {\n return constant('');\n }, function (pixels) {\n var num = pixels / columns;\n return constant(num + 'px');\n }, function () {\n var num = 100 / columns;\n return constant(num + '%');\n });\n return range(columns, f);\n };\n var redistributeValues = function (newWidthType, widths, totalWidth) {\n return newWidthType.fold(function () {\n return widths;\n }, function (px) {\n return redistributeToPx(widths, totalWidth, px);\n }, function (_pc) {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n var redistribute = function (widths, totalWidth, newWidth) {\n var newType = Size.from(newWidth);\n var floats = forall(widths, function (s) {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n var sum = function (values, fallback) {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, function (rest, v) {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n var roundDown = function (num, unit) {\n var floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n var add = function (value, amount) {\n return Size.from(value).fold(constant(value), function (px) {\n return px + amount + 'px';\n }, function (pc) {\n return pc + amount + '%';\n });\n };\n var normalize = function (values) {\n if (values.length === 0) {\n return values;\n }\n var scan = foldr(values, function (rest, value) {\n var info = Size.from(value).fold(function () {\n return {\n value: value,\n remainder: 0\n };\n }, function (num) {\n return roundDown(num, 'px');\n }, function (num) {\n return {\n value: num + '%',\n remainder: 0\n };\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 var r = scan.output;\n return r.slice(0, r.length - 1).concat([add(r[r.length - 1], Math.round(scan.remainder))]);\n };\n var validate = Size.from;\n\n var redistributeToW = function (newWidths, cells, unit) {\n each(cells, function (cell) {\n var widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n var w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n var redistributeToColumns = function (newWidths, columns, unit) {\n each(columns, function (column, index) {\n var width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n var redistributeToH = function (newHeights, rows, cells, unit) {\n each(cells, function (cell) {\n var heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n var h = sum(heights, minHeight());\n set$1(cell.element, 'height', h + unit);\n });\n each(rows, function (row, i) {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n var getUnit = function (newSize) {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n var redistribute$1 = function (table, optWidth, optHeight, tableSize) {\n var warehouse = Warehouse.fromTable(table);\n var rows = warehouse.all;\n var cells = Warehouse.justCells(warehouse);\n var columns = Warehouse.justColumns(warehouse);\n optWidth.each(function (newWidth) {\n var widthUnit = getUnit(newWidth);\n var totalWidth = get$5(table);\n var oldWidths = getRawWidths(warehouse, table, tableSize);\n var nuWidths = redistribute(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(function (newHeight) {\n var hUnit = getUnit(newHeight);\n var totalHeight = get$6(table);\n var oldHeights = getRawHeights(warehouse, table, height);\n var nuHeights = redistribute(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n var isPercentSizing$1 = isPercentSizing;\n var isPixelSizing$1 = isPixelSizing;\n var isNoneSizing$1 = isNoneSizing;\n var getPercentTableWidth$1 = getPercentTableWidth;\n\n var getGridSize = function (table) {\n var warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n var Event = function (fields) {\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = {};\n each(fields, function (name, i) {\n event[name] = args[i];\n });\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var sort$1 = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort$1(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (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 function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (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 var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var InDrag = function () {\n var previous = Optional.none();\n var reset = function () {\n previous = Optional.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n };\n\n var NoDrag = function () {\n var events = create({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n var Movement = function () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n };\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info);\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n var filter$2 = always;\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$2, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var read = function (element, attr) {\n var value = get$2(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$1 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$8 = function (element) {\n return read(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$1(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$3 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$2(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has$1 = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-dragster');\n var resolve = styles.resolve;\n\n var Blocker = function (options) {\n var settings = __assign({ layerClass: resolve('blocker') }, options);\n var div = SugarElement.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$3(div, resolve('blocker'));\n add$3(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var compare = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n var extract$1 = function (event) {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left, info.top);\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\n });\n\n var transform = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n var isContentEditableTrue = function (elm) {\n return get$2(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var styles$1 = css('ephox-snooker');\n var resolve$1 = styles$1.resolve;\n\n var Mutation = function () {\n var events = create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Optional.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n var assign = function (t) {\n target = Optional.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var col = function (column, x, y, w, h) {\n var bar = SugarElement.fromTag('div');\n setAll$1(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(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n var row = function (r, x, y, w, h) {\n var bar = SugarElement.fromTag('div');\n setAll$1(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(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n var resizeBar = resolve$1('resizer-bar');\n var resizeRowBar = resolve$1('resizer-rows');\n var resizeColBar = resolve$1('resizer-cols');\n var BAR_THICKNESS = 7;\n var resizableRows = function (warehouse, isResizable) {\n return bind(warehouse.all, function (row, i) {\n return isResizable(row.element) ? [i] : [];\n });\n };\n var resizableColumns = function (warehouse, isResizable) {\n var resizableCols = [];\n range(warehouse.grid.columns, function (index) {\n var colElmOpt = Warehouse.getColumnAt(warehouse, index).map(function (col) {\n return col.element;\n });\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter(resizableCols, function (colIndex) {\n var columnCells = Warehouse.filterItems(warehouse, function (cell) {\n return cell.column === colIndex;\n });\n return forall(columnCells, function (cell) {\n return isResizable(cell.element);\n });\n });\n };\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$3(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add$3(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add$3(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (warhouse, wire, table, rows, cols) {\n var position = absolute(table);\n var isResizable = wire.isResizable;\n var rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n var resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n var resizableRowPositions = filter(rowPositions, function (_pos, i) {\n return exists(resizableRowBars, function (barIndex) {\n return i === barIndex;\n });\n });\n refreshRow(wire, resizableRowPositions, position, getOuter(table));\n var colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n var resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n var resizableColPositions = filter(colPositions, function (_pos, i) {\n return exists(resizableColBars, function (barIndex) {\n return i === barIndex;\n });\n });\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n var refresh = function (wire, table) {\n destroy(wire);\n if (wire.isResizable(table)) {\n var warehouse = Warehouse.fromTable(table);\n var rows = rows$1(warehouse);\n var cols = columns$1(warehouse);\n refreshGrid(warehouse, wire, table, rows, cols);\n }\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$1(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$1(element, resizeColBar);\n };\n\n var resizeBarDragging = resolve$1('resizer-bar-dragging');\n var BarManager = function (wire) {\n var mutation = BarMutation();\n var resizing = transform(mutation, {});\n var hoverTable = Optional.none();\n var getResizer = function (element, type) {\n return Optional.from(get$2(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target, 'data-row').each(function (_dataRow) {\n var currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(function (_dataCol) {\n var currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = getCssValue(target, dir);\n var oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, getCssValue(target, dir));\n add$3(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (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 var isRoot = function (e) {\n return eq$1(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target).fold(function () {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, function (table) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n });\n });\n var destroy$1 = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n var refresh$1 = function (tbl) {\n refresh(wire, tbl);\n };\n var events = create({\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 var create$1 = function (wire, resizing, lazySizing) {\n var hdirection = height;\n var vdirection = width;\n var manager = BarManager(wire);\n var events = create({\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(function (event) {\n var table = event.table;\n events.trigger.beforeResize(table, 'row');\n var 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(function (_event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n var table = event.table;\n events.trigger.beforeResize(table, 'col');\n var delta = vdirection.delta(event.delta, table);\n var 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 hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$1 };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height, origin) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireObjectResized = function (editor, target, width, height, origin) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireTableSelectionChange = function (editor, cells, start, finish, otherCells) {\n editor.fire('TableSelectionChange', {\n cells: cells,\n start: start,\n finish: finish,\n otherCells: otherCells\n });\n };\n var fireTableSelectionClear = function (editor) {\n editor.fire('TableSelectionClear');\n };\n var fireTableModified = function (editor, table, data) {\n editor.fire('TableModified', __assign(__assign({}, data), { table: table }));\n };\n var styleModified = {\n structure: false,\n style: true\n };\n var structureModified = {\n structure: true,\n style: false\n };\n\n var defaultTableToolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol';\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var determineDefaultStyles = function (editor) {\n if (isPixelsForced(editor)) {\n var editorWidth = editor.getBody().offsetWidth;\n return __assign(__assign({}, defaultStyles), { width: editorWidth + 'px' });\n } else if (isResponsiveForced(editor)) {\n return filter$1(defaultStyles, function (_value, key) {\n return key !== 'width';\n });\n } else {\n return defaultStyles;\n }\n };\n var defaultAttributes = { border: '1' };\n var defaultColumnResizingBehaviour = 'preservetable';\n var getTableSizingMode = function (editor) {\n return editor.getParam('table_sizing_mode', 'auto');\n };\n var getTableResponseWidth = function (editor) {\n return editor.getParam('table_responsive_width');\n };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', determineDefaultStyles(editor), 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var isPercentagesForced = function (editor) {\n return getTableSizingMode(editor) === 'relative' || getTableResponseWidth(editor) === true;\n };\n var isPixelsForced = function (editor) {\n return getTableSizingMode(editor) === 'fixed' || getTableResponseWidth(editor) === false;\n };\n var isResponsiveForced = function (editor) {\n return getTableSizingMode(editor) === 'responsive';\n };\n var getToolbar = function (editor) {\n return editor.getParam('table_toolbar', defaultTableToolbar);\n };\n var useColumnGroup = function (editor) {\n return editor.getParam('table_use_colgroups', false, 'boolean');\n };\n var getTableHeaderType = function (editor) {\n var defaultValue = 'section';\n var value = editor.getParam('table_header_type', defaultValue, 'string');\n var validValues = [\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ];\n if (!contains(validValues, value)) {\n return defaultValue;\n } else {\n return value;\n }\n };\n var getColumnResizingBehaviour = function (editor) {\n var validModes = [\n 'preservetable',\n 'resizetable'\n ];\n var givenMode = editor.getParam('table_column_resizing', defaultColumnResizingBehaviour, 'string');\n return find(validModes, function (mode) {\n return mode === givenMode;\n }).getOr(defaultColumnResizingBehaviour);\n };\n var isPreserveTableColumnResizing = function (editor) {\n return getColumnResizingBehaviour(editor) === 'preservetable';\n };\n var isResizeTableColumnResizing = function (editor) {\n return getColumnResizingBehaviour(editor) === 'resizetable';\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Optional.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Optional.some(cloneElements);\n } else {\n return Optional.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return isString(objectResizing) ? objectResizing === 'table' : objectResizing;\n };\n\n var get$9 = function (editor, table) {\n if (isPercentagesForced(editor)) {\n var width = getRawWidth$1(editor, table.dom).filter(isPercentage).getOrThunk(function () {\n return getPercentTableWidth$1(table);\n });\n return TableSize.percentageSize(width, table);\n } else if (isPixelsForced(editor)) {\n return TableSize.pixelSize(get$5(table), table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n var cleanupLegacyAttributes = function (element) {\n remove(element, 'width');\n };\n var convertToPercentSize = function (table, tableSize) {\n var newWidth = getPercentTableWidth(table);\n redistribute$1(table, Optional.some(newWidth), Optional.none(), tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToPixelSize = function (table, tableSize) {\n var newWidth = getPixelTableWidth(table);\n redistribute$1(table, Optional.some(newWidth), Optional.none(), tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToNoneSize = function (table) {\n remove$1(table, 'width');\n var columns$1 = columns(table);\n var rowElements = columns$1.length > 0 ? columns$1 : cells(table);\n each(rowElements, function (cell) {\n remove$1(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n var enforcePercentage = function (editor, table) {\n var tableSizing = get$9(editor, table);\n convertToPercentSize(table, tableSizing);\n };\n var enforcePixels = function (editor, table) {\n var tableSizing = get$9(editor, table);\n convertToPixelSize(table, tableSizing);\n };\n var enforceNone = convertToNoneSize;\n var syncPixels = function (table) {\n var warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each(cells(table), function (cell) {\n var computedWidth = get$3(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove(cell, 'width');\n });\n }\n };\n\n var createContainer = function () {\n var container = SugarElement.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$a = function (editor, isResizable) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n\n var barResizerPrefix = 'bar-';\n var isResizable = function (elm) {\n return get$2(elm, 'data-mce-resize') !== 'false';\n };\n var getResizeHandler = function (editor) {\n var selectionRng = Optional.none();\n var resize = Optional.none();\n var wire = Optional.none();\n var startW;\n var startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(SugarElement.fromDom(editor.getBody()), isResizable));\n };\n var lazySizing = function (table) {\n return get$9(editor, table);\n };\n var lazyResizingBehaviour = function () {\n return isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n };\n var getNumColumns = function (table) {\n return getGridSize(table).columns;\n };\n var afterCornerResize = function (table, origin, width) {\n var isRightEdgeResize = endsWith(origin, 'e');\n if (startRawW === '') {\n enforcePercentage(editor, table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n var resizing = lazyResizingBehaviour();\n var tableSize = lazySizing(table);\n var col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage(startRawW)) {\n var percentW = parseFloat(startRawW.replace('%', ''));\n var targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncPixels(table);\n }\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n remove$6(editor, w);\n });\n };\n editor.on('init', function () {\n var rawWire = get$a(editor, isResizable);\n wire = Optional.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var resizing = lazyResizingBehaviour();\n var sz = TableResize.create(rawWire, resizing, lazySizing);\n sz.on();\n sz.events.startDrag.bind(function (_event) {\n selectionRng = Optional.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table;\n var rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n resize = Optional.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = SugarElement.fromDom(targetElm);\n each(editor.dom.select('.mce-clonedresizable'), function (clone) {\n editor.dom.addClass(clone, 'mce-' + getColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing$1(table) && isPixelsForced(editor)) {\n enforcePixels(editor, table);\n } else if (!isPercentSizing$1(table) && isPercentagesForced(editor)) {\n enforcePercentage(editor, table);\n }\n if (isNoneSizing$1(table) && startsWith(e.origin, barResizerPrefix)) {\n enforcePercentage(editor, table);\n }\n startW = e.width;\n startRawW = isResponsiveForced(editor) ? '' : getRawWidth$1(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = SugarElement.fromDom(targetElm);\n var origin_1 = e.origin;\n if (startsWith(origin_1, 'corner-')) {\n afterCornerResize(table, origin_1, e.width);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', function () {\n lazyResize().each(function (resize) {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var point = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n\n var scan = function (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(function (elem) {\n return scan(universe, elem, direction).orThunk(function () {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n var toEnd = function (universe, element) {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n var children = universe.property().children(element);\n return children.length;\n };\n var freefallRtl = function (universe, element) {\n var candidate = scan(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n var children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n var freefallRtl$1 = freefallRtl;\n\n var universe$1 = DomUniverse();\n var freefallRtl$2 = function (element) {\n return freefallRtl$1(universe$1, element);\n };\n\n var halve = function (main, other) {\n var colspan = getSpan(main, 'colspan');\n if (colspan === 1) {\n var width = getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var insert = function (table, selector, element) {\n last(children$2(table, selector)).fold(function () {\n return prepend(table, element);\n }, function (child) {\n return after(child, element);\n });\n };\n var generateSection = function (table, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert(table, 'caption', newSection);\n } else {\n append(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var syncRows = function (gridSection) {\n return map(gridSection, function (row) {\n if (row.isNew) {\n newRows.push(row.element);\n }\n var tr = row.element;\n empty(tr);\n each(row.cells, function (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(tr, cell.element);\n });\n return tr;\n });\n };\n var syncColGroup = function (gridSection) {\n return bind(gridSection, function (colGroup) {\n return map(colGroup.cells, function (col) {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n });\n });\n };\n var renderSection = function (gridSection, sectionName) {\n var section = generateSection(table, sectionName);\n var sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n var sectionElems = sync(gridSection);\n append$1(section, sectionElems);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n var columnGroupsSection = [];\n each(grid, function (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: newRows,\n newCells: newCells\n };\n };\n var copy$2 = function (grid) {\n return map(grid, function (row) {\n var tr = shallow(row.element);\n each(row.cells, function (cell) {\n var clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element, x.element);\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells.slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: endColIndex,\n rowspan: endRowIndex\n };\n };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row) {\n return map(row.cells, never);\n });\n var updateSeen = function (rowIndex, columnIndex, rowspan, colspan) {\n for (var row = rowIndex; row < rowIndex + rowspan; row++) {\n for (var column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map(grid, function (row, rowIndex) {\n var details = bind(row.cells, function (cell, columnIndex) {\n if (seen[rowIndex][columnIndex] === false) {\n var 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 rowdetails(details, row.section);\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n if (Warehouse.hasColumns(warehouse)) {\n var groupElementNew = map(Warehouse.justColumns(warehouse), function (column) {\n return elementnew(column.element, isNew, false);\n });\n grid.push(rowcells(groupElementNew, 'colgroup'));\n }\n for (var rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n var rowCells = [];\n for (var columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n var element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(function (item) {\n return elementnew(item.element, isNew, item.isLocked);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true, false);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all[rowIndex].section);\n grid.push(row);\n }\n return grid;\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew, false);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true, false);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details);\n return rowdatanew(row.element, details.details, details.section, row.isNew);\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = toDetails(grid, eq$1);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n return findMap(warehouse.all, function (r) {\n return find(r.cells, function (e) {\n return eq$1(element, e.element);\n });\n });\n };\n var extractCells = function (warehouse, target, predicate) {\n var details = map(target.selection, function (cell$1) {\n return cell(cell$1).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n }).filter(predicate);\n });\n var cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, sizing, resizeBehaviour) {\n var warehouse = Warehouse.fromTable(table);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq$1, genWrappers(generators));\n var lockedColumns = getLockedColumnsFromGrid(result.grid);\n var grid = toDetailList(result.grid, generators);\n return {\n info: info,\n grid: grid,\n cursor: result.cursor,\n lockedColumns: lockedColumns\n };\n });\n return output.bind(function (out) {\n var newElements = render(table, out.grid);\n var tableSizing = Optional.from(sizing).getOrThunk(function () {\n return TableSize.getTableSize(table);\n });\n var resizing = Optional.from(resizeBehaviour).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, tableSizing, resizing);\n postAction(table);\n refresh(wire, table);\n remove(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set(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 };\n var onCell = function (warehouse, target) {\n return cell(target.element).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return cell(target.element).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteByEditor = function (warehouse, target) {\n return extractCells(warehouse, target, always).map(function (cells) {\n return {\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n };\n });\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable;\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable;\n };\n var onCells = function (warehouse, target) {\n return extractCells(warehouse, target, always);\n };\n var onUnlockedCell = function (warehouse, target) {\n return onCell(warehouse, target).filter(function (detail) {\n return !detail.isLocked;\n });\n };\n var onUnlockedCells = function (warehouse, target) {\n return extractCells(warehouse, target, function (detail) {\n return !detail.isLocked;\n });\n };\n var isUnlockedTableCell = function (warehouse, cell) {\n return findInWarehouse(warehouse, cell).exists(function (detail) {\n return !detail.isLocked;\n });\n };\n var allUnlocked = function (warehouse, cells) {\n return forall(cells, function (cell) {\n return isUnlockedTableCell(warehouse, cell);\n });\n };\n var onUnlockedMergable = function (warehouse, target) {\n return onMergable(warehouse, target).filter(function (mergeable) {\n return allUnlocked(warehouse, mergeable.cells);\n });\n };\n var onUnlockedUnmergable = function (warehouse, target) {\n return onUnmergable(warehouse, target).filter(function (cells) {\n return allUnlocked(warehouse, cells);\n });\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (var j = bounds.startCol; j <= bounds.finishCol; j++) {\n var row = rows[i];\n var isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var first = true;\n for (var i = 0; i < rows.length; i++) {\n for (var j = 0; j < cellLength(rows[0]); j++) {\n var row = rows[i];\n var currentCell = getCell(row, j);\n var currentCellElm = currentCell.element;\n var isToReplace = comparator(currentCellElm, target);\n if (isToReplace === true && first === false) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitCols = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid[0].cells.length) {\n each(grid, function (row) {\n var prevCell = row.cells[index - 1];\n var current = row.cells[index];\n var isToReplace = comparator(current.element, prevCell.element);\n if (isToReplace) {\n mutateCell(row, index, elementnew(substitution(), true, current.isLocked));\n }\n });\n }\n return grid;\n };\n var splitRows = function (grid, index, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n var rowPrevCells = rows[index - 1].cells;\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Optional.none();\n for (var i = index; i < rows.length; i++) {\n var _loop_1 = function (j) {\n var row = rows[i];\n var current = getCell(row, j);\n var isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(function (sub) {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n };\n for (var j = 0; j < cellLength(rows[0]); j++) {\n _loop_1(j);\n }\n }\n });\n }\n return grid;\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (_opt) {\n return value(o);\n };\n var orThunk = function (_f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (_f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (_f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (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 var rowRemainder = gridA.slice(startAddress.row);\n var colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n var colRequired = cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = cellLength(gridA[0]);\n var colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n var measureHeight = function (gridA, gridB) {\n var rowLengthA = gridA.length;\n var rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n var generateElements = function (amount, row, generators, isLocked) {\n var generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range(amount, function (idx) {\n return elementnew(generator(), true, isLocked(idx));\n });\n };\n var rowFill = function (grid, amount, generators, lockedColumns) {\n return grid.concat(range(amount, function () {\n var row = grid[grid.length - 1];\n var elements = generateElements(row.cells.length, row, generators, function (idx) {\n return has(lockedColumns, idx.toString());\n });\n return setCells(row, elements);\n }));\n };\n var colFill = function (grid, amount, generators, startIndex) {\n return map(grid, function (row) {\n var newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n };\n var lockedColFill = function (grid, generators, lockedColumns) {\n return map(grid, function (row) {\n return foldl(lockedColumns, function (acc, colNum) {\n var newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n };\n var tailor = function (gridA, delta, generators) {\n var fillCols = delta.colDelta < 0 ? colFill : identity;\n var fillRows = delta.rowDelta < 0 ? rowFill : identity;\n var lockedColumns = getLockedColumnsFromGrid(gridA);\n var gridWidth = cellLength(gridA[0]);\n var isLastColLocked = exists(lockedColumns, function (locked) {\n return locked === gridWidth - 1;\n });\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n var newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = getCell(grid[row], col);\n var matching = curry(comparator, candidate.element);\n var 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 var mergeTables = function (startAddress, gridA, gridB, generator, comparator, lockedColumns) {\n var startRow = startAddress.row;\n var startCol = startAddress.column;\n var mergeHeight = gridB.length;\n var mergeWidth = cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth + lockedColumns.length;\n var lockedColumnObj = mapToObject(lockedColumns, always);\n for (var r = startRow; r < endRow; r++) {\n var skippedCol = 0;\n for (var 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 var gridBColIndex = c - startCol - skippedCol;\n var newCell = getCell(gridB[r - startRow], gridBColIndex);\n var newCellElm = newCell.element;\n var replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n var getValidStartAddress = function (currentStartAddress, grid, lockedColumns) {\n var gridColLength = cellLength(grid[0]);\n var possibleColAddresses = range(gridColLength - currentStartAddress.column, function (num) {\n return num + currentStartAddress.column;\n });\n var validColAddress = find(possibleColAddresses, function (num) {\n return forall(lockedColumns, function (col) {\n return col !== num;\n });\n }).getOr(gridColLength - 1);\n return __assign(__assign({}, currentStartAddress), { column: validColAddress });\n };\n var getLockedColumnsWithinBounds = function (startAddress, grid, lockedColumns) {\n return filter(lockedColumns, function (colNum) {\n return colNum >= startAddress.column && colNum <= cellLength(grid[0]) + startAddress.column;\n });\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var lockedColumns = getLockedColumnsFromGrid(gridA);\n var validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n var lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridB, lockedColumns);\n var result = measure(validStartAddress, gridA, gridB);\n return result.map(function (diff) {\n var delta = __assign(__assign({}, diff), { colDelta: diff.colDelta - lockedColumnsWithinBounds.length });\n var fittedGrid = tailor(gridA, delta, generator);\n var newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n var newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridB, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridB, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n var insertCols = function (index, gridA, gridB, generator, comparator) {\n splitCols(gridA, index, comparator, generator.cell);\n var delta = measureHeight(gridB, gridA);\n var fittedNewGrid = tailor(gridB, delta, generator);\n var secondDelta = measureHeight(gridA, fittedNewGrid);\n var fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map(fittedOldGrid, function (gridRow, i) {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n var insertRows = function (index, gridA, gridB, generator, comparator) {\n splitRows(gridA, index, comparator, generator.cell);\n var locked = getLockedColumnsFromGrid(gridA);\n var diff = measureWidth(gridA, gridB);\n var delta = __assign(__assign({}, diff), { colDelta: diff.colDelta - locked.length });\n var fittedOldGrid = tailor(gridA, delta, generator);\n var _a = extractGridDetails(fittedOldGrid), oldCols = _a.cols, oldRows = _a.rows;\n var newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n var secondDiff = measureWidth(gridB, gridA);\n var secondDelta = __assign(__assign({}, secondDiff), { colDelta: secondDiff.colDelta + newLocked.length });\n var fittedGridB = lockedColFill(gridB, generator, newLocked);\n var fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return oldCols.concat(oldRows.slice(0, index)).concat(fittedNewGrid).concat(oldRows.slice(index, oldRows.length));\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var _a = extractGridDetails(grid), rows = _a.rows, cols = _a.cols;\n var before = rows.slice(0, index);\n var after = rows.slice(index);\n var between = mapCells(rows[example], function (ex, c) {\n var withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n var ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n });\n return cols.concat(before).concat([between]).concat(after);\n };\n var getElementFor = function (row, column, section, withinSpan, example, comparator, substitution) {\n if (section === 'colgroup' || !withinSpan) {\n var cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n var sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n };\n var deleteColumnsAt = function (grid, columns) {\n return bind(grid, function (row) {\n var existingCells = row.cells;\n var cells = foldr(columns, function (acc, column) {\n return column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc;\n }, existingCells);\n return cells.length > 0 ? [rowcells(cells, row.section)] : [];\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n var _a = extractGridDetails(grid), rows = _a.rows, cols = _a.cols;\n return cols.concat(rows.slice(0, start)).concat(rows.slice(finish + 1));\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element, target.element);\n });\n };\n return map(grid, function (row) {\n return mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element, comparator), true, cell.isLocked) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var targets = bind(rows, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var targetRow = rows[index];\n var targets = bind(targetRow.cells, function (item, i) {\n var alreadyAdded = notStartRow(rows, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n\n var uniqueColumns = function (details) {\n var uniqueCheck = function (rest, detail) {\n var columnExists = exists(rest, function (currentDetail) {\n return currentDetail.column === detail.column;\n });\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort(function (detailA, detailB) {\n return detailA.column - detailB.column;\n });\n };\n\n var elementToData = function (element) {\n var colspan = getAttrValue(element, 'colspan', 1);\n var rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element: element,\n colspan: colspan,\n rowspan: rowspan\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n var position = Cell(Optional.none());\n var nu = function (data) {\n switch (name(data.element)) {\n case 'col':\n return generators.col(data);\n default:\n return generators.cell(data);\n }\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Optional.some(replacement));\n }\n recent = Optional.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Optional.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform$1 = function (scope, tag) {\n return function (generators) {\n var position = Cell(Optional.none());\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Optional.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n if (name(element) === 'col') {\n return element;\n } else {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n }\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var getScopeAttribute = function (cell) {\n return getOpt(cell, 'scope').map(function (attribute) {\n return attribute.substr(0, 3);\n });\n };\n var merging = function (generators) {\n var position = Cell(Optional.none());\n var unmerge = function (cell) {\n if (position.get().isNone()) {\n position.set(Optional.some(cell));\n }\n var scope = getScopeAttribute(cell);\n scope.each(function (attribute) {\n return set(cell, 'scope', attribute);\n });\n return function () {\n var raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n scope.each(function (attribute) {\n return set(raw, 'scope', attribute);\n });\n return raw;\n };\n };\n var merge = function (cells) {\n var getScopeProperty = function () {\n var stringAttributes = cat(map(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n var baseScope_1 = stringAttributes[0];\n var scopes_1 = [\n 'row',\n 'col'\n ];\n var isMixed = exists(stringAttributes, function (attribute) {\n return attribute !== baseScope_1 && contains(scopes_1, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope_1);\n }\n };\n remove$1(cells[0], 'width');\n getScopeProperty().fold(function () {\n return remove(cells[0], 'scope');\n }, function (attribute) {\n return set(cells[0], 'scope', attribute + 'group');\n });\n return constant(cells[0]);\n };\n return {\n unmerge: unmerge,\n merge: merge,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform$1,\n merging: merging\n };\n\n var 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 var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n var universe$2 = DomUniverse();\n var isBlock$1 = function (element) {\n return isBlock(universe$2, element);\n };\n var isList$1 = function (element) {\n return isList(universe$2, element);\n };\n var isEmptyTag$1 = function (element) {\n return isEmptyTag(universe$2, element);\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$4(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, isList$1).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (isBlock$1(rightSibling)) {\n return true;\n }\n if (isEmptyTag$1(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock$1(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n\n var prune = function (table) {\n var cells$1 = cells(table);\n if (cells$1.length === 0) {\n remove$2(table);\n }\n };\n var outcome = function (grid, cursor) {\n return {\n grid: grid,\n cursor: cursor\n };\n };\n var elementFromGrid = function (grid, row, column) {\n var rows = extractGridDetails(grid).rows;\n return findIn(rows, row, column).orThunk(function () {\n return findIn(rows, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Optional.from(grid[row]).bind(function (r) {\n return Optional.from(r.cells[column]).bind(function (c) {\n return Optional.from(c.element);\n });\n });\n };\n var bundle = function (grid, row, column) {\n var rows = extractGridDetails(grid).rows;\n return outcome(grid, findIn(rows, row, column));\n };\n var uniqueRows = function (details) {\n var rowCompilation = function (rest, detail) {\n var rowExists = exists(rest, function (currentDetail) {\n return currentDetail.row === detail.row;\n });\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort(function (detailA, detailB) {\n return detailA.row - detailB.row;\n });\n };\n var opInsertRowsBefore = function (grid, details, comparator, genWrappers) {\n var targetIndex = details[0].row;\n var rows = uniqueRows(details);\n var newGrid = foldr(rows, function (acc, row) {\n var 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: grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n var opInsertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var target = rows[rows.length - 1];\n var targetIndex = target.row + target.rowspan;\n var newGrid = foldr(rows, function (newG, row) {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n var opInsertColumnsBefore = function (grid, extractDetail, comparator, genWrappers) {\n var details = extractDetail.details;\n var columns = uniqueColumns(details);\n var targetIndex = columns[0].column;\n var newGrid = foldr(columns, function (acc, col) {\n var 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: grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n var opInsertColumnsAfter = function (grid, extractDetail, comparator, genWrappers) {\n var details = extractDetail.details;\n var target = details[details.length - 1];\n var targetIndex = target.column + target.colspan;\n var columns = uniqueColumns(details);\n var newGrid = foldr(columns, function (newG, col) {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n var opMakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceRow(grid, detail.row, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row, detail.column);\n };\n var opMakeRowsHeader = function (initialGrid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var replacer = function (currentGrid, row) {\n return replaceRow(currentGrid, row.row, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(rows, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opMakeColumnHeader = function (initialGrid, detail, comparator, genWrappers) {\n var newGrid = replaceColumn(initialGrid, detail.column, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row, detail.column);\n };\n var opMakeColumnsHeader = function (initialGrid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var replacer = function (currentGrid, column) {\n return replaceColumn(currentGrid, column.column, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(columns, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opUnmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceRow(grid, detail.row, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row, detail.column);\n };\n var opUnmakeRowsHeader = function (initialGrid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var replacer = function (currentGrid, row) {\n return replaceRow(currentGrid, row.row, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(rows, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opUnmakeColumnHeader = function (initialGrid, detail, comparator, genWrappers) {\n var newGrid = replaceColumn(initialGrid, detail.column, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row, detail.column);\n };\n var opUnmakeColumnsHeader = function (initialGrid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var replacer = function (currentGrid, column) {\n return replaceColumn(currentGrid, column.column, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(columns, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opEraseColumns = function (grid, extractDetail, _comparator, _genWrappers) {\n var columns = uniqueColumns(extractDetail.details);\n var newGrid = deleteColumnsAt(grid, map(columns, function (column) {\n return column.column;\n }));\n var cursor = elementFromGrid(newGrid, columns[0].row, columns[0].column);\n return outcome(newGrid, cursor);\n };\n var opEraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n var cursor = elementFromGrid(newGrid, details[0].row, details[0].column);\n return outcome(newGrid, cursor);\n };\n var opMergeCells = function (grid, mergable, comparator, genWrappers) {\n var cells = mergable.cells;\n merge$2(cells);\n var newGrid = merge(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n var opUnmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var unmerge$1 = function (b, cell) {\n return unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n };\n var newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n var opPasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n var startAddress = address(pasteDetails.row, pasteDetails.column);\n var mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Optional.some(pasteDetails.element));\n }, function (newGrid) {\n var cursor = elementFromGrid(newGrid, pasteDetails.row, pasteDetails.column);\n return outcome(newGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, context) {\n var pasteDetails = fromPastedRows(rows, context.section);\n var wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n var opPasteColsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[0].column;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n return outcome(mergedGrid, cursor);\n };\n var opPasteColsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n return outcome(mergedGrid, cursor);\n };\n var opPasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[0].row;\n var context = rows[index];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n return outcome(mergedGrid, cursor);\n };\n var opPasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n return outcome(mergedGrid, cursor);\n };\n var opGetColumnType = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.bind(function (selectedCells) {\n var lastSelectedCell = selectedCells[selectedCells.length - 1];\n var minColRange = selectedCells[0].column;\n var maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n var selectedColumnCells = flatten(map(house.all, function (row) {\n return filter(row.cells, function (cell) {\n return cell.column >= minColRange && cell.column < maxColRange;\n });\n }));\n return getCellsType(selectedColumnCells, function (cell) {\n return name(cell.element) === 'th';\n });\n }).getOr('');\n };\n var getCellsType = function (cells, headerPred) {\n var headerCells = filter(cells, headerPred);\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 var resize = adjustWidthTo;\n var adjustAndRedistributeWidths$1 = adjustAndRedistributeWidths;\n var firstColumnIsLocked = function (_warehouse, details) {\n return exists(details, function (detail) {\n return detail.column === 0 && detail.isLocked;\n });\n };\n var lastColumnIsLocked = function (warehouse, details) {\n return exists(details, function (detail) {\n return detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked;\n });\n };\n var getColumnsWidth = function (warehouse, details) {\n var columns = columns$1(warehouse);\n var uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, function (acc, detail) {\n var column = columns[detail.column];\n var colWidth = column.map(getOuter).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n var insertColumnsExtractor = function (before) {\n return function (warehouse, target) {\n return onCells(warehouse, target).filter(function (details) {\n var checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(function (details) {\n return {\n details: details,\n pixelDelta: getColumnsWidth(warehouse, details)\n };\n });\n };\n };\n var eraseColumnsExtractor = function (warehouse, target) {\n return onUnlockedCells(warehouse, target).map(function (details) {\n return {\n details: details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n };\n });\n };\n var pasteColumnsExtractor = function (before) {\n return function (warehouse, target) {\n return onPasteByEditor(warehouse, target).filter(function (details) {\n var checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n };\n };\n var insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n var insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n var insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths$1, noop, Generators.modification);\n var insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths$1, noop, Generators.modification);\n var eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths$1, prune, Generators.modification);\n var eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n var makeColumnHeader = run(opMakeColumnHeader, onUnlockedCell, noop, noop, Generators.transform('row', 'th'));\n var makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, Generators.transform('row', 'th'));\n var unmakeColumnHeader = run(opUnmakeColumnHeader, onUnlockedCell, noop, noop, Generators.transform(null, 'td'));\n var unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, Generators.transform(null, 'td'));\n var makeRowHeader = run(opMakeRowHeader, onCell, noop, noop, Generators.transform('col', 'th'));\n var makeRowsHeader = run(opMakeRowsHeader, onCells, noop, noop, Generators.transform('col', 'th'));\n var unmakeRowHeader = run(opUnmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td'));\n var unmakeRowsHeader = run(opUnmakeRowsHeader, onCells, noop, noop, Generators.transform(null, 'td'));\n var mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n var unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n var pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n var pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n var pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n var pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n var pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n var getColumnType = opGetColumnType;\n\n var getSection = function (elm) {\n return getNodeName(elm.parentNode);\n };\n var mapSectionNameToType = function (section) {\n if (section === 'thead') {\n return 'header';\n } else if (section === 'tfoot') {\n return 'footer';\n } else {\n return 'body';\n }\n };\n var detectHeaderRow = function (editor, elm) {\n var isThead = getSection(elm) === 'thead';\n var areAllCellsThs = !exists(elm.cells, function (c) {\n return getNodeName(c) !== 'th';\n });\n return isThead || areAllCellsThs ? Optional.some({\n thead: isThead,\n ths: areAllCellsThs\n }) : Optional.none();\n };\n var getRowType = function (editor, elm) {\n return mapSectionNameToType(detectHeaderRow(editor, elm).fold(function () {\n return getSection(elm);\n }, function (_rowConfig) {\n return 'thead';\n }));\n };\n var switchRowSection = function (dom, rowElm, newSectionName) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldSectionElm = rowElm.parentNode;\n var oldSectionName = getNodeName(oldSectionElm);\n if (newSectionName !== oldSectionName) {\n var sectionElm_1 = dom.select(newSectionName, tableElm)[0];\n if (!sectionElm_1) {\n sectionElm_1 = dom.create(newSectionName);\n var firstTableChild_1 = tableElm.firstChild;\n if (newSectionName === 'thead') {\n last(children$2(SugarElement.fromDom(tableElm), 'caption,colgroup')).fold(function () {\n return tableElm.insertBefore(sectionElm_1, firstTableChild_1);\n }, function (c) {\n return dom.insertAfter(sectionElm_1, c.dom);\n });\n } else {\n tableElm.appendChild(sectionElm_1);\n }\n }\n if (newSectionName === 'tbody' && oldSectionName === 'thead' && sectionElm_1.firstChild) {\n sectionElm_1.insertBefore(rowElm, sectionElm_1.firstChild);\n } else {\n sectionElm_1.appendChild(rowElm);\n }\n if (!oldSectionElm.hasChildNodes()) {\n dom.remove(oldSectionElm);\n }\n }\n };\n var renameCell = function (editor, cell, newCellType) {\n if (isNonNullable(newCellType) && getNodeName(cell) !== newCellType) {\n var newCellElm = editor.dom.rename(cell, newCellType);\n fireNewCell(editor, newCellElm);\n return newCellElm;\n } else {\n return cell;\n }\n };\n var switchCellType = function (editor, cell, newCellType, scope) {\n var dom = editor.dom;\n var newCell = renameCell(editor, cell, newCellType);\n if (!isUndefined(scope)) {\n dom.setAttrib(newCell, 'scope', scope);\n }\n return newCell;\n };\n var switchCellsType = function (editor, cells, newCellType, scope) {\n return each(cells, function (c) {\n return switchCellType(editor, c, newCellType, scope);\n });\n };\n var switchSectionType = function (editor, rowElm, newType) {\n var determineHeaderRowType = function () {\n var allTableRows = table(SugarElement.fromDom(rowElm.cells[0])).map(function (table) {\n return rows(table);\n }).getOr([]);\n return findMap(allTableRows, function (row) {\n return detectHeaderRow(editor, row.dom);\n }).map(function (detectedType) {\n if (detectedType.thead && detectedType.ths) {\n return 'sectionCells';\n } else {\n return detectedType.thead ? 'section' : 'cells';\n }\n }).getOr('section');\n };\n var dom = editor.dom;\n if (newType === 'header') {\n var headerRowTypeSetting = getTableHeaderType(editor);\n var headerRowType = headerRowTypeSetting === 'auto' ? determineHeaderRowType() : headerRowTypeSetting;\n switchCellsType(editor, rowElm.cells, headerRowType === 'section' ? 'td' : 'th', 'col');\n switchRowSection(dom, rowElm, headerRowType === 'cells' ? 'tbody' : 'thead');\n } else {\n switchCellsType(editor, rowElm.cells, 'td', null);\n switchRowSection(dom, rowElm, newType === 'footer' ? 'tfoot' : 'tbody');\n }\n };\n\n var getSelectionStartCellFallback = function (start) {\n return table(start).bind(function (table) {\n return retrieve$1(table, ephemera.firstSelectedSelector);\n }).fold(function () {\n return start;\n }, function (cells) {\n return cells[0];\n });\n };\n var getSelectionStartFromSelector = function (selector) {\n return function (start) {\n var startCellName = name(start);\n var startCell = startCellName === 'col' || startCellName === 'colgroup' ? getSelectionStartCellFallback(start) : start;\n return closest$1(startCell, selector);\n };\n };\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getSelectionStartCellOrCaption = getSelectionStartFromSelector('th,td,caption');\n var getCellsFromSelection = function (start, selections) {\n return getSelectionStartCell(start).map(function (_cell) {\n return selection(selections);\n }).getOr([]);\n };\n var getRowsFromSelection = function (start, selector) {\n var cellOpt = getSelectionStartCell(start);\n var rowsOpt = cellOpt.bind(function (cell) {\n return table(cell);\n }).map(function (table) {\n return rows(table);\n });\n return lift2(cellOpt, rowsOpt, function (cell, rows) {\n return filter(rows, function (row) {\n return exists(fromDom$1(row.dom.cells), function (rowCell) {\n return get$2(rowCell, selector) === '1' || eq$1(rowCell, cell);\n });\n });\n }).getOr([]);\n };\n\n var TableActions = function (editor, lazyWire, selections) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n return isTableBody(editor) === false || getGridSize(table).rows > 1;\n };\n var lastColumnGuard = function (table) {\n return isTableBody(editor) === false || getGridSize(table).columns > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n var execute = function (operation, guard, mutate, lazyWire, effect) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = SugarElement.fromDom(editor.getDoc());\n var generators = cellOperations(mutate, doc, cloneFormats);\n var sizing = get$9(editor, table);\n var resizeBehaviour = isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable();\n return guard(table) ? operation(wire, table, target, generators, sizing, resizeBehaviour).bind(function (result) {\n each(result.newRows, function (row) {\n fireNewRow(editor, row.dom);\n });\n each(result.newCells, function (cell) {\n fireNewCell(editor, cell.dom);\n });\n return result.cursor.map(function (cell) {\n var des = freefallRtl$2(cell);\n var rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n return {\n rng: rng,\n effect: effect\n };\n });\n }) : Optional.none();\n };\n };\n var deleteRow = execute(eraseRows, lastRowGuard, noop, lazyWire, structureModified);\n var deleteColumn = execute(eraseColumns, lastColumnGuard, noop, lazyWire, structureModified);\n var insertRowsBefore$1 = execute(insertRowsBefore, always, noop, lazyWire, structureModified);\n var insertRowsAfter$1 = execute(insertRowsAfter, always, noop, lazyWire, structureModified);\n var insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, lazyWire, structureModified);\n var insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, lazyWire, structureModified);\n var mergeCells$1 = execute(mergeCells, always, noop, lazyWire, structureModified);\n var unmergeCells$1 = execute(unmergeCells, always, noop, lazyWire, structureModified);\n var pasteColsBefore$1 = execute(pasteColsBefore, always, noop, lazyWire, structureModified);\n var pasteColsAfter$1 = execute(pasteColsAfter, always, noop, lazyWire, structureModified);\n var pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, lazyWire, structureModified);\n var pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, lazyWire, structureModified);\n var pasteCells$1 = execute(pasteCells, always, noop, lazyWire, structureModified);\n var extractType = function (args, validTypes) {\n return get$1(args, 'type').filter(function (type) {\n return contains(validTypes, type);\n });\n };\n var setTableCellType = function (editor, args) {\n return extractType(args, [\n 'td',\n 'th'\n ]).each(function (type) {\n var cells = map(getCellsFromSelection(getSelectionStart(editor), selections), function (c) {\n return c.dom;\n });\n switchCellsType(editor, cells, type, null);\n });\n };\n var setTableRowType = function (editor, args) {\n return extractType(args, [\n 'header',\n 'body',\n 'footer'\n ]).each(function (type) {\n map(getRowsFromSelection(getSelectionStart(editor), ephemera.selected), function (row) {\n return switchSectionType(editor, row.dom, type);\n });\n });\n };\n var makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, lazyWire, structureModified);\n var unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, lazyWire, structureModified);\n var getTableRowType = function (editor) {\n var rows = getRowsFromSelection(getSelectionStart(editor), ephemera.selected);\n if (rows.length > 0) {\n var rowTypes = map(rows, function (r) {\n return getRowType(editor, r.dom);\n });\n var hasHeader = contains(rowTypes, 'header');\n var hasFooter = contains(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return 'body';\n } else {\n var hasBody = contains(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return 'header';\n } else if (!hasHeader && !hasBody && hasFooter) {\n return 'footer';\n } else {\n return '';\n }\n }\n }\n };\n var getTableCellType = function (editor) {\n return getCellsType(getCellsFromSelection(getSelectionStart(editor), selections), function (cell) {\n return name(cell) === 'th';\n }).getOr('');\n };\n var getTableColType = getColumnType;\n return {\n deleteRow: deleteRow,\n deleteColumn: 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 setTableCellType: setTableCellType,\n setTableRowType: setTableRowType,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n getTableRowType: getTableRowType,\n getTableCellType: getTableCellType,\n getTableColType: getTableColType\n };\n };\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n var tableHeaderCell = function () {\n return SugarElement.fromTag('th');\n };\n var tableCell = function () {\n return SugarElement.fromTag('td');\n };\n var tableColumn = function () {\n return SugarElement.fromTag('col');\n };\n var createRow = function (columns, rowHeaders, columnHeaders, rowIndex) {\n var tr = SugarElement.fromTag('tr');\n for (var j = 0; j < columns; j++) {\n var td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, SugarElement.fromTag('br'));\n append(tr, td);\n }\n return tr;\n };\n var createGroupRow = function (columns) {\n var columnGroup = SugarElement.fromTag('colgroup');\n range(columns, function () {\n return append(columnGroup, tableColumn());\n });\n return columnGroup;\n };\n var createRows = function (rows, columns, rowHeaders, columnHeaders) {\n return range(rows, function (r) {\n return createRow(columns, rowHeaders, columnHeaders, r);\n });\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = SugarElement.fromTag('table');\n var rowHeadersGoInThead = headerType !== 'cells';\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append(table, createGroupRow(columns));\n }\n var actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n var thead = SugarElement.fromTag('thead');\n append(table, thead);\n var theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n var theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append$1(thead, theadRows);\n }\n var tbody = SugarElement.fromTag('tbody');\n append(table, tbody);\n var numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n var numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n var tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append$1(tbody, tbodyRows);\n return table;\n };\n\n var get$b = function (element) {\n return element.dom.innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = SugarElement.fromTag('div');\n var clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append(container, clone);\n return get$b(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom);\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n var isPercentage$1 = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows, colHeaders, rowHeaders) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n colGroups: useColumnGroup(editor)\n };\n editor.undoManager.ignore(function () {\n var table = render$1(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n enforcePixels(editor, table);\n } else if (isResponsiveForced(editor)) {\n enforceNone(table);\n } else if (isPercentagesForced(editor) || isPercentage$1(defaultStyles.width)) {\n enforcePercentage(editor, table);\n }\n removeDataStyle(table);\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOr(null);\n };\n var insertTableWithDataValidation = function (editor, rows, columns, options, errorMsg) {\n if (options === void 0) {\n options = {};\n }\n var checkInput = function (val) {\n return isNumber(val) && val > 0;\n };\n if (checkInput(rows) && checkInput(columns)) {\n var headerRows = options.headerRows || 0;\n var headerColumns = options.headerColumns || 0;\n return insert$1(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error(errorMsg);\n return null;\n }\n };\n\n var getClipboardElements = function (getClipboard) {\n return function () {\n return getClipboard().fold(function () {\n return [];\n }, function (elems) {\n return map(elems, function (e) {\n return e.dom;\n });\n });\n };\n };\n var setClipboardElements = function (setClipboard) {\n return function (elems) {\n var elmsOpt = elems.length > 0 ? Optional.some(fromDom$1(elems)) : Optional.none();\n setClipboard(elmsOpt);\n };\n };\n var insertTable = function (editor) {\n return function (columns, rows, options) {\n if (options === void 0) {\n options = {};\n }\n var table = insertTableWithDataValidation(editor, rows, columns, options, 'Invalid values for insertTable - rows and columns values are required to insert a table.');\n editor.undoManager.add();\n return table;\n };\n };\n var getApi = function (editor, clipboard, resizeHandler, selectionTargets) {\n return {\n insertTable: insertTable(editor),\n setClipboardRows: setClipboardElements(clipboard.setRows),\n getClipboardRows: getClipboardElements(clipboard.getRows),\n setClipboardCols: setClipboardElements(clipboard.setColumns),\n getClipboardCols: getClipboardElements(clipboard.getColumns),\n resizeHandler: resizeHandler,\n selectionTargets: selectionTargets\n };\n };\n\n var constrainSpan = function (element, property, value) {\n var currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove(element, property);\n } else {\n set(element, property, Math.min(value, currentColspan));\n }\n };\n var generateColGroup = function (house, minColRange, maxColRange) {\n if (Warehouse.hasColumns(house)) {\n var colsToCopy = filter(Warehouse.justColumns(house), function (col) {\n return col.column >= minColRange && col.column < maxColRange;\n });\n var copiedCols = map(colsToCopy, function (c) {\n var clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n var fakeColgroup = SugarElement.fromTag('colgroup');\n append$1(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n var generateRows = function (house, minColRange, maxColRange) {\n return map(house.all, function (row) {\n var cellsToCopy = filter(row.cells, function (cell) {\n return cell.column >= minColRange && cell.column < maxColRange;\n });\n var copiedCells = map(cellsToCopy, function (cell) {\n var clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n var fakeTR = SugarElement.fromTag('tr');\n append$1(fakeTR, copiedCells);\n return fakeTR;\n });\n };\n var copyCols = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onUnlockedCells(house, target);\n return details.map(function (selectedCells) {\n var lastSelectedCell = selectedCells[selectedCells.length - 1];\n var minColRange = selectedCells[0].column;\n var maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n var fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n var fakeRows = generateRows(house, minColRange, maxColRange);\n return __spreadArrays(fakeColGroups, fakeRows);\n });\n };\n\n var copyRows = function (table, target, generators) {\n var warehouse = Warehouse.fromTable(table);\n var details = onCells(warehouse, target);\n return details.bind(function (selectedCells) {\n var grid = toGrid(warehouse, generators, false);\n var rows = extractGridDetails(grid).rows;\n var slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n var filteredGrid = bind(slicedGrid, function (row) {\n var newCells = filter(row.cells, function (cell) {\n return !cell.isLocked;\n });\n return newCells.length > 0 ? [__assign(__assign({}, row), { cells: newCells })] : [];\n });\n var slicedDetails = toDetailList(filteredGrid, generators);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(function (slicedDetails) {\n return copy$2(slicedDetails);\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n return checkChildren(firstChildStyle, cells);\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n\n var isListGroup = function (item) {\n return hasNonNullableKey(item, 'menu');\n };\n var buildListItems = function (inputList, startItems) {\n var appendItems = function (values, acc) {\n return acc.concat(map(values, function (item) {\n var text = item.text || item.title;\n if (isListGroup(item)) {\n return {\n text: text,\n items: buildListItems(item.menu)\n };\n } else {\n return {\n text: text,\n value: item.value\n };\n }\n }));\n };\n return appendItems(inputList, startItems || []);\n };\n var rgbToHex = function (dom) {\n return function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n };\n var extractAdvancedStyles = function (dom, elm) {\n var 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(dom)).getOr(''),\n backgroundcolor: getRaw(element, 'background-color').map(rgbToHex(dom)).getOr('')\n };\n };\n var getSharedValues = function (data) {\n var baseData = data[0];\n var comparisonData = data.slice(1);\n each(comparisonData, function (items) {\n each(keys(baseData), function (key) {\n each$1(items, function (itemValue, itemKey) {\n var 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 var getAdvancedTab = function (dialogName) {\n var advTabItems = [\n {\n name: 'borderstyle',\n type: 'listbox',\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 name: 'bordercolor',\n type: 'colorinput',\n label: 'Border color'\n },\n {\n name: 'backgroundcolor',\n type: 'colorinput',\n label: 'Background color'\n }\n ];\n var borderWidth = {\n name: 'borderwidth',\n type: 'input',\n label: 'Border width'\n };\n var items = dialogName === 'cell' ? [borderWidth].concat(advTabItems) : advTabItems;\n return {\n title: 'Advanced',\n name: 'advanced',\n items: items\n };\n };\n var getAlignment = function (formats, formatName, editor, elm) {\n return find(formats, function (name) {\n return editor.formatter.matchNode(elm, formatName + name);\n }).getOr('');\n };\n var getHAlignment = curry(getAlignment, [\n 'left',\n 'center',\n 'right'\n ], 'align');\n var getVAlignment = curry(getAlignment, [\n 'top',\n 'middle',\n 'bottom'\n ], 'valign');\n var extractDataFromSettings = function (editor, hasAdvTableTab) {\n var style = getDefaultStyles(editor);\n var attrs = getDefaultAttributes(editor);\n var extractAdvancedStyleData = function (dom) {\n return {\n borderstyle: get$1(style, 'border-style').getOr(''),\n bordercolor: rgbToHex(dom)(get$1(style, 'border-color').getOr('')),\n backgroundcolor: rgbToHex(dom)(get$1(style, 'background-color').getOr(''))\n };\n };\n var defaultData = {\n height: '',\n width: '100%',\n cellspacing: '',\n cellpadding: '',\n caption: false,\n class: '',\n align: '',\n border: ''\n };\n var getBorder = function () {\n var borderWidth = style['border-width'];\n if (shouldStyleWithCss(editor) && borderWidth) {\n return { border: borderWidth };\n }\n return get$1(attrs, 'border').fold(function () {\n return {};\n }, function (border) {\n return { border: border };\n });\n };\n var advStyle = hasAdvTableTab ? extractAdvancedStyleData(editor.dom) : {};\n var getCellPaddingCellSpacing = function () {\n var spacing = get$1(style, 'border-spacing').or(get$1(attrs, 'cellspacing')).fold(function () {\n return {};\n }, function (cellspacing) {\n return { cellspacing: cellspacing };\n });\n var padding = get$1(style, 'border-padding').or(get$1(attrs, 'cellpadding')).fold(function () {\n return {};\n }, function (cellpadding) {\n return { cellpadding: cellpadding };\n });\n return __assign(__assign({}, spacing), padding);\n };\n var data = __assign(__assign(__assign(__assign(__assign(__assign({}, defaultData), style), attrs), advStyle), getBorder()), getCellPaddingCellSpacing());\n return data;\n };\n var extractDataFromTableElement = function (editor, elm, hasAdvTableTab) {\n var getBorder = function (dom, elm) {\n var 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 var dom = editor.dom;\n return __assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n cellspacing: dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing'),\n cellpadding: dom.getAttrib(elm, 'cellpadding') || getTDTHOverallStyle(editor.dom, elm, 'padding'),\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(dom, elm) : {});\n };\n var extractDataFromRowElement = function (editor, elm, hasAdvancedRowTab) {\n var dom = editor.dom;\n return __assign({\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n class: dom.getAttrib(elm, 'class', ''),\n type: getRowType(editor, elm),\n align: getHAlignment(editor, elm)\n }, hasAdvancedRowTab ? extractAdvancedStyles(dom, elm) : {});\n };\n var extractDataFromCellElement = function (editor, cell, hasAdvancedCellTab, column) {\n var dom = editor.dom;\n var colElm = column.getOr(cell);\n var getStyle = function (element, style) {\n return dom.getStyle(element, style) || dom.getAttrib(element, style);\n };\n return __assign({\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(dom, cell) : {});\n };\n\n var getClassList = function (editor) {\n var 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 var children$3 = [\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: 'H 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: 'V Align',\n items: [\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 ];\n var getItems = function (editor) {\n return children$3.concat(getClassList(editor).toArray());\n };\n\n var modifiers = function (testTruthy) {\n return function (editor, node) {\n var dom = editor.dom;\n var setAttrib = function (attr, value) {\n if (!testTruthy || value) {\n dom.setAttrib(node, attr, value);\n }\n };\n var setStyle = function (prop, value) {\n if (!testTruthy || value) {\n dom.setStyle(node, prop, value);\n }\n };\n var setFormat = function (formatName, value) {\n if (!testTruthy || value) {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, node, true);\n } else {\n editor.formatter.apply(formatName, { value: value }, node);\n }\n }\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle,\n setFormat: setFormat\n };\n };\n };\n var DomModifier = {\n normal: modifiers(false),\n ifTruthy: modifiers(true)\n };\n\n var getSelectedCells = function (cells) {\n return table(cells[0]).map(function (table) {\n var warehouse = Warehouse.fromTable(table);\n var allCells = Warehouse.justCells(warehouse);\n var filtered = filter(allCells, function (cellA) {\n return exists(cells, function (cellB) {\n return eq$1(cellA.element, cellB);\n });\n });\n return map(filtered, function (cell) {\n return {\n element: cell.element.dom,\n column: Warehouse.getColumnAt(warehouse, cell.column).map(function (col) {\n return col.element.dom;\n })\n };\n });\n });\n };\n var updateSimpleProps = function (modifier, colModifier, data) {\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addPxSuffix(data.height));\n colModifier.setStyle('width', addPxSuffix(data.width));\n };\n var updateAdvancedProps = function (modifier, data) {\n modifier.setFormat('tablecellbackgroundcolor', data.backgroundcolor);\n modifier.setFormat('tablecellbordercolor', data.bordercolor);\n modifier.setFormat('tablecellborderstyle', data.borderstyle);\n modifier.setFormat('tablecellborderwidth', addPxSuffix(data.borderwidth));\n };\n var applyCellData = function (editor, cells, oldData, data) {\n var isSingleCell = cells.length === 1;\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n if (size(modifiedData) > 0 && cells.length >= 1) {\n var tableOpt = table(cells[0]);\n getSelectedCells(cells).each(function (selectedCells) {\n each(selectedCells, function (item) {\n var cellElm = switchCellType(editor, item.element, data.celltype);\n var modifier = isSingleCell ? DomModifier.normal(editor, cellElm) : DomModifier.ifTruthy(editor, cellElm);\n var colModifier = item.column.map(function (col) {\n return isSingleCell ? DomModifier.normal(editor, col) : DomModifier.ifTruthy(editor, col);\n }).getOr(modifier);\n updateSimpleProps(modifier, colModifier, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifier, data);\n }\n if (isSingleCell) {\n unApplyAlign(editor, cellElm);\n unApplyVAlign(editor, cellElm);\n }\n if (data.halign) {\n applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n applyVAlign(editor, cellElm, data.valign);\n }\n });\n });\n var styleModified_1 = size(filter$1(modifiedData, function (_value, key) {\n return key !== 'scope' && key !== 'celltype';\n })) > 0;\n tableOpt.each(function (table) {\n return fireTableModified(editor, table.dom, {\n structure: has(modifiedData, 'celltype'),\n style: styleModified_1\n });\n });\n }\n };\n var onSubmitCellForm = function (editor, cells, oldData, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyCellData(editor, cells, oldData, data);\n editor.focus();\n });\n };\n var getData = function (editor, cells) {\n var cellsData = getSelectedCells(cells).map(function (selectedCells) {\n return map(selectedCells, function (item) {\n return extractDataFromCellElement(editor, item.element, hasAdvancedCellTab(editor), item.column);\n });\n });\n return getSharedValues(cellsData.getOrDie());\n };\n var open = function (editor, selections) {\n var cells = getCellsFromSelection(getSelectionStart(editor), selections);\n if (cells.length === 0) {\n return;\n }\n var data = getData(editor, cells);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems(editor)\n },\n getAdvancedTab('cell')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems(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 var getClassList$1 = function (editor) {\n var 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 var 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 var getItems$1 = function (editor) {\n return formChildren.concat(getClassList$1(editor).toArray());\n };\n\n var updateSimpleProps$1 = function (modifier, data) {\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addPxSuffix(data.height));\n };\n var updateAdvancedProps$1 = function (modifier, data) {\n modifier.setStyle('background-color', data.backgroundcolor);\n modifier.setStyle('border-color', data.bordercolor);\n modifier.setStyle('border-style', data.borderstyle);\n };\n var applyRowData = function (editor, rows, oldData, data) {\n var isSingleRow = rows.length === 1;\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n if (size(modifiedData) > 0) {\n each(rows, function (rowElm) {\n if (data.type !== getNodeName(rowElm.parentNode)) {\n switchSectionType(editor, rowElm, data.type);\n }\n var modifier = isSingleRow ? DomModifier.normal(editor, rowElm) : DomModifier.ifTruthy(editor, rowElm);\n updateSimpleProps$1(modifier, data);\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps$1(modifier, data);\n }\n if (data.align !== oldData.align) {\n unApplyAlign(editor, rowElm);\n applyAlign(editor, rowElm, data.align);\n }\n });\n var typeModified_1 = has(modifiedData, 'type');\n var styleModified_1 = typeModified_1 ? size(modifiedData) > 1 : true;\n table(SugarElement.fromDom(rows[0])).each(function (table) {\n return fireTableModified(editor, table.dom, {\n structure: typeModified_1,\n style: styleModified_1\n });\n });\n }\n };\n var onSubmitRowForm = function (editor, rows, oldData, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyRowData(editor, rows, oldData, data);\n editor.focus();\n });\n };\n var open$1 = function (editor) {\n var rows = getRowsFromSelection(getSelectionStart(editor), ephemera.selected);\n if (rows.length === 0) {\n return;\n }\n var rowsData = map(rows, function (rowElm) {\n return extractDataFromRowElement(editor, rowElm.dom, hasAdvancedRowTab(editor));\n });\n var data = getSharedValues(rowsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$1(editor)\n },\n getAdvancedTab('row')\n ]\n };\n var 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, function (r) {\n return r.dom;\n }), data)\n });\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getItems$2 = function (editor, classes, insertNewTable) {\n var 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 var 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 var 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 var 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 var 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 var styleTDTH = function (dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n if (isString(name)) {\n dom.setStyle(elm, name, value);\n } else {\n dom.setStyle(elm, name);\n }\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addPxSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addPxSuffix(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 (var 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 styles['background-color'] = data.backgroundcolor;\n styles['border-color'] = data.bordercolor;\n styles['border-style'] = data.borderstyle;\n }\n attrs.style = dom.serializeStyle(__assign(__assign({}, getDefaultStyles(editor)), styles));\n dom.setAttribs(tableElm, __assign(__assign({}, getDefaultAttributes(editor)), attrs));\n };\n var onSubmitTableForm = function (editor, tableElm, oldData, api) {\n var dom = editor.dom;\n var captionElm;\n var data = api.getData();\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n api.close();\n if (data.class === '') {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n var cols = parseInt(data.cols, 10) || 1;\n var rows = parseInt(data.rows, 10) || 1;\n tableElm = insert$1(editor, cols, rows, 0, 0);\n }\n if (size(modifiedData) > 0) {\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
' : nbsp;\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n if (data.align === '') {\n unApplyAlign(editor, tableElm);\n } else {\n applyAlign(editor, tableElm, data.align);\n }\n }\n editor.focus();\n editor.addVisual();\n if (size(modifiedData) > 0) {\n var captionModified = has(modifiedData, 'caption');\n var styleModified = captionModified ? size(modifiedData) > 1 : true;\n fireTableModified(editor, tableElm, {\n structure: captionModified,\n style: styleModified\n });\n }\n });\n };\n var open$2 = function (editor, insertNewTable) {\n var dom = editor.dom;\n var tableElm;\n var data = extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable === false) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\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 } else {\n data.cols = '1';\n data.rows = '1';\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n var 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 var generalPanel = {\n type: 'grid',\n columns: 2,\n items: getItems$2(editor, classes, insertNewTable)\n };\n var nonAdvancedForm = function () {\n return {\n type: 'panel',\n items: [generalPanel]\n };\n };\n var advancedForm = function () {\n return {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: [generalPanel]\n },\n getAdvancedTab('table')\n ]\n };\n };\n var 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 var getSelectionStartCellOrCaption$1 = function (editor) {\n return getSelectionStartCellOrCaption(getSelectionStart(editor));\n };\n var getSelectionStartCell$1 = function (editor) {\n return getSelectionStartCell(getSelectionStart(editor));\n };\n var registerCommands = function (editor, actions, cellSelection, selections, clipboard) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n return getSelectionStartCellOrCaption$1(editor).each(function (cellOrCaption) {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(function (table) {\n var cursor = SugarElement.fromText('');\n after(table, cursor);\n remove$2(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n var 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 };\n var setSizingMode = function (sizing) {\n return getSelectionStartCellOrCaption$1(editor).each(function (cellOrCaption) {\n var isForcedSizing = isResponsiveForced(editor) || isPixelsForced(editor) || isPercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(function (table) {\n if (sizing === 'relative' && !isPercentSizing$1(table)) {\n enforcePercentage(editor, table);\n } else if (sizing === 'fixed' && !isPixelSizing$1(table)) {\n enforcePixels(editor, table);\n } else if (sizing === 'responsive' && !isNoneSizing$1(table)) {\n enforceNone(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n };\n var getTableFromCell = function (cell) {\n return table(cell, isRoot);\n };\n var postExecute = function (table) {\n return function (data) {\n editor.selection.setRng(data.rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n fireTableModified(editor, table.dom, data.effect);\n };\n };\n var actOnSelection = function (execute) {\n return getSelectionStartCell$1(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = forMenu(selections, table, cell);\n execute(table, targets).each(postExecute(table));\n });\n });\n };\n var copyRowSelection = function () {\n return getSelectionStartCell$1(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var targets = forMenu(selections, table, cell);\n var generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n });\n };\n var copyColSelection = function () {\n return getSelectionStartCell$1(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var targets = forMenu(selections, table, cell);\n return copyCols(table, targets);\n });\n });\n };\n var pasteOnSelection = function (execute, getRows) {\n return getRows().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell$1(editor).each(function (cell) {\n return getTableFromCell(cell).each(function (table) {\n var generators = paste(SugarElement.fromDom(editor.getDoc()));\n var targets = pasteRows(selections, cell, clonedRows, generators);\n execute(table, targets).each(postExecute(table));\n });\n });\n });\n };\n each$1({\n mceTableSplitCells: function () {\n return actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n return actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n return actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n return actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n return actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n return actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n return actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n return actOnSelection(actions.deleteRow);\n },\n mceTableCutCol: function (_grid) {\n return copyColSelection().each(function (selection) {\n clipboard.setColumns(selection);\n actOnSelection(actions.deleteColumn);\n });\n },\n mceTableCutRow: function (_grid) {\n return copyRowSelection().each(function (selection) {\n clipboard.setRows(selection);\n actOnSelection(actions.deleteRow);\n });\n },\n mceTableCopyCol: function (_grid) {\n return copyColSelection().each(function (selection) {\n return clipboard.setColumns(selection);\n });\n },\n mceTableCopyRow: function (_grid) {\n return copyRowSelection().each(function (selection) {\n return clipboard.setRows(selection);\n });\n },\n mceTablePasteColBefore: function (_grid) {\n return pasteOnSelection(actions.pasteColsBefore, clipboard.getColumns);\n },\n mceTablePasteColAfter: function (_grid) {\n return pasteOnSelection(actions.pasteColsAfter, clipboard.getColumns);\n },\n mceTablePasteRowBefore: function (_grid) {\n return pasteOnSelection(actions.pasteRowsBefore, clipboard.getRows);\n },\n mceTablePasteRowAfter: function (_grid) {\n return pasteOnSelection(actions.pasteRowsAfter, clipboard.getRows);\n },\n mceTableDelete: eraseTable,\n mceTableSizingMode: function (ui, sizing) {\n return setSizingMode(sizing);\n }\n }, function (func, name) {\n return editor.addCommand(name, func);\n });\n var fireTableModifiedForSelection = function (editor, tableOpt) {\n tableOpt.each(function (table) {\n fireTableModified(editor, table.dom, structureModified);\n });\n };\n each$1({\n mceTableCellType: function (_ui, args) {\n var tableOpt = table(getSelectionStart(editor), isRoot);\n actions.setTableCellType(editor, args);\n fireTableModifiedForSelection(editor, tableOpt);\n },\n mceTableRowType: function (_ui, args) {\n var tableOpt = table(getSelectionStart(editor), isRoot);\n actions.setTableRowType(editor, args);\n fireTableModifiedForSelection(editor, tableOpt);\n }\n }, function (func, name) {\n return editor.addCommand(name, func);\n });\n editor.addCommand('mceTableColType', function (_ui, args) {\n return get$1(args, 'type').each(function (type) {\n return actOnSelection(type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader);\n });\n });\n each$1({\n mceTableProps: curry(open$2, editor, false),\n mceTableRowProps: curry(open$1, editor),\n mceTableCellProps: curry(open, editor, selections)\n }, function (func, name) {\n return editor.addCommand(name, function () {\n return func();\n });\n });\n editor.addCommand('mceInsertTable', function (_ui, args) {\n if (isObject(args) && keys(args).length > 0) {\n insertTableWithDataValidation(editor, args.rows, args.columns, args.options, 'Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n } else {\n open$2(editor, true);\n }\n });\n editor.addCommand('mceTableApplyCellStyle', function (_ui, args) {\n var getFormatName = function (style) {\n return 'tablecell' + style.toLowerCase().replace('-', '');\n };\n if (!isObject(args)) {\n return;\n }\n var cells = getCellsFromSelection(getSelectionStart(editor), selections);\n if (cells.length === 0) {\n return;\n }\n var validArgs = filter$1(args, function (value, style) {\n return editor.formatter.has(getFormatName(style)) && isString(value);\n });\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, function (value, style) {\n each(cells, function (cell) {\n DomModifier.normal(editor, cell.dom).setFormat(getFormatName(style), value);\n });\n });\n getTableFromCell(cells[0]).each(function (table) {\n return fireTableModified(editor, table.dom, styleModified);\n });\n });\n };\n\n var registerQueryCommands = function (editor, actions, selections) {\n var isRoot = getIsRoot(editor);\n var getTableFromCell = function (cell) {\n return table(cell, isRoot);\n };\n each$1({\n mceTableRowType: function () {\n return actions.getTableRowType(editor);\n },\n mceTableCellType: function () {\n return actions.getTableCellType(editor);\n },\n mceTableColType: function () {\n return getSelectionStartCell(getSelectionStart(editor)).bind(function (cell) {\n return getTableFromCell(cell).map(function (table) {\n var targets = forMenu(selections, table, cell);\n return actions.getTableColType(table, targets);\n });\n }).getOr('');\n }\n }, function (func, name) {\n return editor.addQueryValueHandler(name, func);\n });\n };\n\n var Clipboard = function () {\n var rows = Cell(Optional.none());\n var cols = Cell(Optional.none());\n var clearClipboard = function (clipboard) {\n clipboard.set(Optional.none());\n };\n return {\n getRows: rows.get,\n setRows: function (r) {\n rows.set(r);\n clearClipboard(cols);\n },\n clearRows: function () {\n return clearClipboard(rows);\n },\n getColumns: cols.get,\n setColumns: function (c) {\n cols.set(c);\n clearClipboard(rows);\n },\n clearColumns: function () {\n return clearClipboard(cols);\n }\n };\n };\n\n var cellFormats = {\n tablecellbackgroundcolor: {\n selector: 'td,th',\n styles: { backgroundColor: '%value' },\n remove_similar: true\n },\n tablecellbordercolor: {\n selector: 'td,th',\n styles: { borderColor: '%value' },\n remove_similar: true\n },\n tablecellborderstyle: {\n selector: 'td,th',\n styles: { borderStyle: '%value' },\n remove_similar: true\n },\n tablecellborderwidth: {\n selector: 'td,th',\n styles: { borderWidth: '%value' },\n remove_similar: true\n }\n };\n var registerFormats = function (editor) {\n editor.formatter.register(cellFormats);\n };\n\n var adt$2 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$2 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$2.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$2), { none: none$2 });\n\n var detect$5 = function (current, isRoot) {\n return table(current, isRoot).bind(function (table) {\n var all = cells(table);\n var index = findIndex(all, function (x) {\n return eq$1(current, x);\n });\n return index.map(function (index) {\n return {\n index: index,\n all: all\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$5(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index + 1 < info.all.length ? CellLocation.middle(current, info.all[info.index + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$5(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index - 1 >= 0 ? CellLocation.middle(current, info.all[info.index - 1]) : CellLocation.first(current);\n });\n };\n\n var create$2 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$2 };\n\n var adt$3 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$3.before;\n var on = adt$3.on;\n var after$2 = adt$3.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$4 = 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 var exactFromRange = function (simRange) {\n return adt$4.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$4.domRange;\n var relative = adt$4.relative;\n var exact = adt$4.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n return rng.selectNodeContents(element.dom);\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom);\n }, function (e, o) {\n rng.setStart(e.dom, o);\n }, function (e) {\n rng.setStartAfter(e.dom);\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom);\n }, function (e, o) {\n rng.setEnd(e.dom, o);\n }, function (e) {\n rng.setEndAfter(e.dom);\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\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 };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var 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 var adt$5 = 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 var fromRange = function (win, type, range) {\n return type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Optional.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Optional.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$5.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$5.ltr, rng);\n });\n } else {\n return fromRange(win, adt$5.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n var ltr$1 = adt$5.ltr;\n var rtl$1 = adt$5.rtl;\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom.createRange();\n r.setStart(textnode.dom, o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$4(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n r.selectNode(node.dom);\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Optional.some(rect) : Optional.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom);\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Optional.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n r.selectNode(node.dom);\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom.createRange();\n r.selectNode(target.dom);\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom.createRange();\n cursorRange.selectNode(node.dom);\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Optional.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Optional.from(doc.dom.caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n var r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Optional.from(doc.dom.caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n r.selectNode(node.dom);\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return SugarElement.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = function () {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return searchFromPoint;\n }\n }();\n var fromPoint$1 = function (win, x, y) {\n var doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\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 var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = SugarElement.fromDom(rng.startContainer);\n var finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var getNativeSelection = function (win) {\n return Optional.from(win.getSelection());\n };\n var doSetNativeRange = function (win, rng) {\n getNativeSelection(win).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n getNativeSelection(win).each(function (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 };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = SimSelection.getWin(selection).dom;\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var 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 var doGetExact = function (selection) {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n var anchor = SugarElement.fromDom(selection.anchorNode);\n var focus_1 = SugarElement.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus_1, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus_1, selection.focusOffset)) : readRange(selection);\n }\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return getNativeSelection(win).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$c = function (win) {\n return getExact(win).map(function (range) {\n return SimSelection.exact(range.start, range.soffset, range.finish, range.foffset);\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n getNativeSelection(win).each(function (selection) {\n return selection.removeAllRanges();\n });\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, actions) {\n return go(editor, isRoot, next(cell), actions);\n };\n var backward = function (editor, isRoot, cell, actions) {\n return go(editor, isRoot, prev(cell), actions);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = SimSelection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions) {\n return cell.fold(Optional.none, Optional.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return table(current, isRoot).bind(function (table) {\n var targets = noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq$1(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = SugarElement.fromDom(rng.startContainer);\n cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n\n var create$3 = function (selection, kill) {\n return {\n selection: selection,\n kill: kill\n };\n };\n var Response = { create: create$3 };\n\n var create$4 = function (start, soffset, finish, foffset) {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n var Situs = { create: create$4 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$6(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n var detect$6 = function (container, isRoot, start, finish, selectRange) {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 0) {\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 var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (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 var traverse = function (item, mode) {\n return {\n item: item,\n mode: mode\n };\n };\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var 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 var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (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 var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$3 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$3, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$3, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$3, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$3, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var adt$6 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne$1(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$6.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$6.none('in same cell');\n }\n });\n }).getOr(adt$6.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$6), {\n verify: verify,\n cata: cata$2\n });\n\n var inParent = function (parent, children, element, index) {\n return {\n parent: parent,\n children: children,\n element: element,\n index: index\n };\n };\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq$1, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$4(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (_message) {\n return Optional.none();\n }, function () {\n return Optional.none();\n }, function (cell) {\n return Optional.some(point(cell, 0));\n }, function (cell) {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n var moveDown = function (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 var moveUp = function (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 var translate = function (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 var getTop$1 = function (caret) {\n return caret.top;\n };\n var getBottom = function (caret) {\n return caret.bottom;\n };\n\n var getPartialBox = function (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 var toCaret = function (rect) {\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n };\n };\n var getElemBox = function (bridge, element) {\n return Optional.some(bridge.getRect(element));\n };\n var getBoxAt = function (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 var getEntireBox = function (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 var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$7 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, isBlock$1).fold(never, function (cell) {\n return getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$7.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$7.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$7.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$7.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$7.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$7.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$7.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$7.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$7.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$7.none();\n }\n };\n var upMovement = {\n point: getTop$1,\n adjuster: adjustUp,\n move: moveUp,\n gather: before$4\n };\n var downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (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(function (guess) {\n return guess.start.fold(Optional.none, function (element) {\n return getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left, caret.bottom + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left, caret.top - JUMP_SIZE);\n };\n var checkScroll = function (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 var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(function () {\n return Optional.some(point(sel.finish, sel.foffset));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n var scan$1 = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Optional.none();\n }, function () {\n return Optional.some(situs);\n }, function (cell) {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan$1(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan$1(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n var browser = detect$3().browser;\n if (browser.isChrome() || browser.isSafari() || browser.isFirefox() || browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan$1(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq$1(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$2(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish, 'td,th', isRoot).map(function (finish) {\n return {\n start: start,\n finish: finish,\n range: range\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detect$3().browser.isIE()) {\n return Optional.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var 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 var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (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 var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return detect$6(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n var value$1 = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n var MouseSelection = function (bridge, container, isRoot, annotations) {\n var cursor = value$1();\n var clearstate = cursor.clear;\n var applySelection = function (event) {\n cursor.on(function (start) {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(function (finish) {\n identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq$1(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mousedown = function (event) {\n annotations.clear(container);\n findCell(event.target, isRoot).each(cursor.set);\n };\n var mouseover = function (event) {\n applySelection(event);\n };\n var mouseup = function (event) {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate: clearstate,\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n };\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var ltr$2 = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n var rtl$2 = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n var get$d = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom.getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel);\n };\n var getSelection = function () {\n return get$c(win).map(function (exactAdt) {\n return convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var collapseSelection = function (toStart) {\n if (toStart === void 0) {\n toStart = false;\n }\n get$c(win).each(function (sel) {\n return sel.fold(function (rng) {\n return rng.collapse(toStart);\n }, function (startSitu, finishSitu) {\n var situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, function (start, soffset, finish, foffset) {\n var node = toStart ? start : finish;\n var offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n });\n });\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$d(SugarElement.fromDom(win.document));\n return pos.top;\n };\n var scrollBy = function (x, y) {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n collapseSelection: collapseSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = function (rows, cols) {\n return {\n rows: rows,\n cols: cols\n };\n };\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var 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 var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Optional.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw;\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = retrieve(container, annotations.selectedSelector).fold(function () {\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 }, function (selected) {\n var update$1 = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(function () {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(function (edges) {\n var 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 }, function (_) {\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 === false) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return retrieve(container, annotations.selectedSelector).fold(function () {\n var realEvent = event.raw;\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\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: keydown,\n keyup: keyup\n };\n };\n var external = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n return function (start, finish) {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(function (cellSel) {\n var 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 var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$3(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected);\n var removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector);\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$3(start, ephemera.firstSelected);\n add$3(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera, onSelection, onClear) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected);\n remove(element, ephemera.firstSelected);\n remove(element, ephemera.lastSelected);\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected, '1');\n };\n var clear = function (container) {\n clearBeforeUpdate(container);\n onClear();\n };\n var clearBeforeUpdate = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector);\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected, '1');\n set(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate: clearBeforeUpdate,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var getUpOrLeftCells = function (grid, selectedCells, generators) {\n var upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n var upDetails = toDetailList(upGrid, generators);\n return bind(upDetails, function (detail) {\n var slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map(slicedCells, function (cell) {\n return cell.element;\n });\n });\n };\n var getDownOrRightCells = function (grid, selectedCells, generators) {\n var downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n var downDetails = toDetailList(downGrid, generators);\n return bind(downDetails, function (detail) {\n var slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map(slicedCells, function (cell) {\n return cell.element;\n });\n });\n };\n var getOtherCells = function (table, target, generators) {\n var warehouse = Warehouse.fromTable(table);\n var details = onCells(warehouse, target);\n return details.map(function (selectedCells) {\n var grid = toGrid(warehouse, generators, false);\n var upOrLeftCells = getUpOrLeftCells(grid, selectedCells, generators);\n var downOrRightCells = getDownOrRightCells(grid, selectedCells, generators);\n return {\n upOrLeftCells: upOrLeftCells,\n downOrRightCells: downOrRightCells\n };\n });\n };\n\n var hasInternalTarget = function (e) {\n return has$1(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection (editor, lazyResize, selectionTargets) {\n var onSelection = function (cells, start, finish) {\n selectionTargets.targets().each(function (targets) {\n var tableOpt = table(start);\n tableOpt.each(function (table) {\n var cloneFormats = getCloneElements(editor);\n var generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n var otherCells = getOtherCells(table, targets, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n });\n };\n var onClear = function () {\n return fireTableSelectionClear(editor);\n };\n var annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', function (_e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = SugarElement.fromDom(sel.getStart());\n var end = SugarElement.fromDom(sel.getEnd());\n var shared = sharedOne$1(table, [\n start,\n end\n ]);\n shared.fold(function () {\n return annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = mouse(win, body, isRoot, annotations);\n var keyHandlers = keyboard(win, body, isRoot, annotations);\n var external$1 = external(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw.shiftKey === true;\n };\n editor.on('TableSelectorChange', function (e) {\n return external$1(e.start, e.finish);\n });\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(function (ns) {\n var relative = SimSelection.relative(ns.start, ns.finish);\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = fromRawEvent$1(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = fromRawEvent$1(event);\n lazyResize().each(function (resize) {\n return resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var end = SugarElement.fromDom(rng.endContainer);\n var direction = onDirection(ltr$2, rtl$2)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n return resize.showBars();\n });\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.browser.isEdge() && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var dragStart = function (_e) {\n mouseHandlers.clearstate();\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent$1(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent$1(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent$1(e));\n }\n };\n var getDoubleTap = function () {\n var lastTarget = Cell(SugarElement.fromDom(body));\n var lastTimeStamp = Cell(0);\n var touchEnd = function (t) {\n var target = SugarElement.fromDom(t.target);\n if (name(target) === 'td' || name(target) === 'th') {\n var lT = lastTarget.get();\n var 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: touchEnd };\n };\n var 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 return { clear: annotations.clear };\n }\n\n var getSelectionTargets = function (editor, selections) {\n var targets = Cell(Optional.none());\n var changeHandlers = Cell([]);\n var selectionDetails = Optional.none();\n var isCaption = isTag('caption');\n var isDisabledForSelection = function (key) {\n return selectionDetails.forall(function (details) {\n return !details[key];\n });\n };\n var findTargets = function () {\n return getSelectionStartCellOrCaption(getSelectionStart(editor)).bind(function (cellOrCaption) {\n var table$1 = table(cellOrCaption);\n return table$1.map(function (table) {\n if (isCaption(cellOrCaption)) {\n return noMenu(cellOrCaption);\n } else {\n return forMenu(selections, table, cellOrCaption);\n }\n });\n });\n };\n var getExtractedDetails = function (targets) {\n var tableOpt = table(targets.element);\n return tableOpt.map(function (table) {\n var warehouse = Warehouse.fromTable(table);\n var selectedCells = onCells(warehouse, targets).getOr([]);\n var locked = foldl(selectedCells, function (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: locked\n };\n });\n };\n var resetTargets = function () {\n targets.set(cached(findTargets)());\n selectionDetails = targets.get().bind(getExtractedDetails);\n each(changeHandlers.get(), function (handler) {\n return handler();\n });\n };\n var onSetup = function (api, isDisabled) {\n var handler = function () {\n return targets.get().fold(function () {\n api.setDisabled(true);\n }, function (targets) {\n api.setDisabled(isDisabled(targets));\n });\n };\n handler();\n changeHandlers.set(changeHandlers.get().concat([handler]));\n return function () {\n changeHandlers.set(filter(changeHandlers.get(), function (h) {\n return h !== handler;\n }));\n };\n };\n var isDisabledFromLocked = function (lockedDisable) {\n return selectionDetails.exists(function (details) {\n return details.locked[lockedDisable];\n });\n };\n var onSetupTable = function (api) {\n return onSetup(api, function (_) {\n return false;\n });\n };\n var onSetupCellOrRow = function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element);\n });\n };\n var onSetupColumn = function (lockedDisable) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || isDisabledFromLocked(lockedDisable);\n });\n };\n };\n var onSetupPasteable = function (getClipboardData) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || getClipboardData().isNone();\n });\n };\n };\n var onSetupPasteableColumn = function (getClipboardData, lockedDisable) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || getClipboardData().isNone() || isDisabledFromLocked(lockedDisable);\n });\n };\n };\n var onSetupMergeable = function (api) {\n return onSetup(api, function (_targets) {\n return isDisabledForSelection('mergeable');\n });\n };\n var onSetupUnmergeable = function (api) {\n return onSetup(api, function (_targets) {\n return isDisabledForSelection('unmergeable');\n });\n };\n editor.on('NodeChange ExecCommand TableSelectorChange', resetTargets);\n return {\n onSetupTable: onSetupTable,\n onSetupCellOrRow: onSetupCellOrRow,\n onSetupColumn: onSetupColumn,\n onSetupPasteable: onSetupPasteable,\n onSetupPasteableColumn: onSetupPasteableColumn,\n onSetupMergeable: onSetupMergeable,\n onSetupUnmergeable: onSetupUnmergeable,\n resetTargets: resetTargets,\n targets: function () {\n return targets.get();\n }\n };\n };\n\n var addButtons = function (editor, selectionTargets, clipboard) {\n editor.ui.registry.addMenuButton('table', {\n tooltip: 'Table',\n icon: 'table',\n fetch: function (callback) {\n return callback('inserttable | cell row column | advtablesort | tableprops deletetable');\n }\n });\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n editor.ui.registry.addButton('tableprops', {\n tooltip: 'Table properties',\n onAction: cmd('mceTableProps'),\n icon: 'table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tabledelete', {\n tooltip: 'Delete table',\n onAction: cmd('mceTableDelete'),\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tablecellprops', {\n tooltip: 'Cell properties',\n onAction: cmd('mceTableCellProps'),\n icon: 'table-cell-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablemergecells', {\n tooltip: 'Merge cells',\n onAction: cmd('mceTableMergeCells'),\n icon: 'table-merge-cells',\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addButton('tablesplitcells', {\n tooltip: 'Split cell',\n onAction: cmd('mceTableSplitCells'),\n icon: 'table-split-cells',\n onSetup: selectionTargets.onSetupUnmergeable\n });\n editor.ui.registry.addButton('tableinsertrowbefore', {\n tooltip: 'Insert row before',\n onAction: cmd('mceTableInsertRowBefore'),\n icon: 'table-insert-row-above',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertrowafter', {\n tooltip: 'Insert row after',\n onAction: cmd('mceTableInsertRowAfter'),\n icon: 'table-insert-row-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeleterow', {\n tooltip: 'Delete row',\n onAction: cmd('mceTableDeleteRow'),\n icon: 'table-delete-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablerowprops', {\n tooltip: 'Row properties',\n onAction: cmd('mceTableRowProps'),\n icon: 'table-row-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertcolbefore', {\n tooltip: 'Insert column before',\n onAction: cmd('mceTableInsertColBefore'),\n icon: 'table-insert-column-before',\n onSetup: selectionTargets.onSetupColumn('onFirst')\n });\n editor.ui.registry.addButton('tableinsertcolafter', {\n tooltip: 'Insert column after',\n onAction: cmd('mceTableInsertColAfter'),\n icon: 'table-insert-column-after',\n onSetup: selectionTargets.onSetupColumn('onLast')\n });\n editor.ui.registry.addButton('tabledeletecol', {\n tooltip: 'Delete column',\n onAction: cmd('mceTableDeleteCol'),\n icon: 'table-delete-column',\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablecutrow', {\n tooltip: 'Cut row',\n icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopyrow', {\n tooltip: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowbefore', {\n tooltip: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablepasterowafter', {\n tooltip: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablecutcol', {\n tooltip: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablecopycol', {\n tooltip: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablepastecolbefore', {\n tooltip: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onFirst')\n });\n editor.ui.registry.addButton('tablepastecolafter', {\n tooltip: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onLast')\n });\n editor.ui.registry.addButton('tableinsertdialog', {\n tooltip: 'Insert table',\n onAction: cmd('mceInsertTable'),\n icon: 'table'\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n return editor.dom.is(table, 'table') && editor.getBody().contains(table);\n };\n var 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 var addMenuItems = function (editor, selectionTargets, clipboard) {\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n var insertTableAction = function (data) {\n editor.execCommand('mceInsertTable', false, {\n rows: data.numRows,\n columns: data.numColumns\n });\n };\n var tableProperties = {\n text: 'Table properties',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableDelete')\n };\n editor.ui.registry.addMenuItem('tableinsertrowbefore', {\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n onAction: cmd('mceTableInsertRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tableinsertrowafter', {\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n onAction: cmd('mceTableInsertRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tabledeleterow', {\n text: 'Delete row',\n icon: 'table-delete-row',\n onAction: cmd('mceTableDeleteRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablerowprops', {\n text: 'Row properties',\n icon: 'table-row-properties',\n onAction: cmd('mceTableRowProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecutrow', {\n text: 'Cut row',\n icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecopyrow', {\n text: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablepasterowbefore', {\n text: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addMenuItem('tablepasterowafter', {\n text: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n var row = {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: function () {\n return 'tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter';\n }\n };\n editor.ui.registry.addMenuItem('tableinsertcolumnbefore', {\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n onAction: cmd('mceTableInsertColBefore'),\n onSetup: selectionTargets.onSetupColumn('onFirst')\n });\n editor.ui.registry.addMenuItem('tableinsertcolumnafter', {\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n onAction: cmd('mceTableInsertColAfter'),\n onSetup: selectionTargets.onSetupColumn('onLast')\n });\n editor.ui.registry.addMenuItem('tabledeletecolumn', {\n text: 'Delete column',\n icon: 'table-delete-column',\n onAction: cmd('mceTableDeleteCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablecutcolumn', {\n text: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablecopycolumn', {\n text: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablepastecolumnbefore', {\n text: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onFirst')\n });\n editor.ui.registry.addMenuItem('tablepastecolumnafter', {\n text: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onLast')\n });\n var column = {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: function () {\n return 'tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter';\n }\n };\n editor.ui.registry.addMenuItem('tablecellprops', {\n text: 'Cell properties',\n icon: 'table-cell-properties',\n onAction: cmd('mceTableCellProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablemergecells', {\n text: 'Merge cells',\n icon: 'table-merge-cells',\n onAction: cmd('mceTableMergeCells'),\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addMenuItem('tablesplitcells', {\n text: 'Split cell',\n icon: 'table-split-cells',\n onAction: cmd('mceTableSplitCells'),\n onSetup: selectionTargets.onSetupUnmergeable\n });\n var cell = {\n type: 'nestedmenuitem',\n text: 'Cell',\n getSubmenuItems: function () {\n return 'tablecellprops tablemergecells tablesplitcells';\n }\n };\n if (hasTableGrid(editor) === false) {\n editor.ui.registry.addMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n } else {\n editor.ui.registry.addNestedMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'inserttable',\n onAction: insertTableAction\n }];\n }\n });\n }\n editor.ui.registry.addMenuItem('inserttabledialog', {\n text: 'Insert table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n editor.ui.registry.addMenuItem('tableprops', tableProperties);\n editor.ui.registry.addMenuItem('deletetable', deleteTable);\n editor.ui.registry.addNestedMenuItem('row', row);\n editor.ui.registry.addNestedMenuItem('column', column);\n editor.ui.registry.addNestedMenuItem('cell', cell);\n editor.ui.registry.addContextMenu('table', {\n update: function () {\n selectionTargets.resetTargets();\n return selectionTargets.targets().fold(function () {\n return '';\n }, function (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 };\n\n var Plugin = function (editor) {\n var selections = Selections(function () {\n return getBody$1(editor);\n }, function () {\n return getSelectionStartCellOrCaption(getSelectionStart(editor));\n }, ephemera.selectedSelector);\n var selectionTargets = getSelectionTargets(editor, selections);\n var resizeHandler = getResizeHandler(editor);\n var cellSelection = CellSelection(editor, resizeHandler.lazyResize, selectionTargets);\n var actions = TableActions(editor, resizeHandler.lazyWire, selections);\n var clipboard = Clipboard();\n registerCommands(editor, actions, cellSelection, selections, clipboard);\n registerQueryCommands(editor, actions, selections);\n registerEvents(editor, selections, actions, cellSelection);\n addMenuItems(editor, selectionTargets, clipboard);\n addButtons(editor, selectionTargets, clipboard);\n addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n registerFormats(editor);\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n handle$1(e, editor, actions);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n });\n return getApi(editor, clipboard, resizeHandler, selectionTargets);\n };\n function Plugin$1 () {\n global.add('table', Plugin);\n }\n\n Plugin$1();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getDateFormat = function (editor) {\n return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d'));\n };\n var getTimeFormat = function (editor) {\n return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S'));\n };\n var getFormats = function (editor) {\n return editor.getParam('insertdatetime_formats', [\n '%H:%M:%S',\n '%Y-%m-%d',\n '%I:%M:%S %p',\n '%D'\n ]);\n };\n var getDefaultDateTime = function (editor) {\n var formats = getFormats(editor);\n return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n };\n var shouldInsertTimeElement = function (editor) {\n return editor.getParam('insertdatetime_element', false);\n };\n\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n date = 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 var updateElement = function (editor, timeElm, computerTime, userTime) {\n var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n timeElm.parentNode.insertBefore(newTimeElm, timeElm);\n editor.dom.remove(timeElm);\n editor.selection.select(newTimeElm, true);\n editor.selection.collapse(false);\n };\n var insertDateTime = function (editor, format) {\n if (shouldInsertTimeElement(editor)) {\n var userTime = getDateTime(editor, format);\n var computerTime = void 0;\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 var 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 var register = function (editor) {\n editor.addCommand('mceInsertDate', function () {\n insertDateTime(editor, getDateFormat(editor));\n });\n editor.addCommand('mceInsertTime', function () {\n insertDateTime(editor, getTimeFormat(editor));\n });\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var register$1 = function (editor) {\n var formats = getFormats(editor);\n var defaultFormat = Cell(getDefaultDateTime(editor));\n editor.ui.registry.addSplitButton('insertdatetime', {\n icon: 'insert-time',\n tooltip: 'Insert date/time',\n select: function (value) {\n return value === defaultFormat.get();\n },\n fetch: function (done) {\n done(global$1.map(formats, function (format) {\n return {\n type: 'choiceitem',\n text: getDateTime(editor, format),\n value: format\n };\n }));\n },\n onAction: function (_api) {\n insertDateTime(editor, defaultFormat.get());\n },\n onItemAction: function (_api, value) {\n defaultFormat.set(value);\n insertDateTime(editor, value);\n }\n });\n var makeMenuItemHandler = function (format) {\n return function () {\n defaultFormat.set(format);\n insertDateTime(editor, format);\n };\n };\n editor.ui.registry.addNestedMenuItem('insertdatetime', {\n icon: 'insert-time',\n text: 'Date/time',\n getSubmenuItems: function () {\n return global$1.map(formats, function (format) {\n return {\n type: 'menuitem',\n text: getDateTime(editor, format),\n onAction: makeMenuItemHandler(format)\n };\n });\n }\n });\n };\n\n function Plugin () {\n global.add('insertdatetime', function (editor) {\n register(editor);\n register$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n","/**\n * cssfilter\n *\n * @author 老雷\n */\n\nvar _ = require('./util');\n\n\n/**\n * 解析style\n *\n * @param {String} css\n * @param {Function} onAttr 处理属性的函数\n * 参数格式: function (sourcePosition, position, name, value, source)\n * @return {String}\n */\nfunction parseStyle (css, onAttr) {\n css = _.trimRight(css);\n if (css[css.length - 1] !== ';') css += ';';\n var cssLength = css.length;\n var isParenthesisOpen = false;\n var lastPos = 0;\n var i = 0;\n var retCSS = '';\n\n function addNewAttr () {\n // 如果没有正常的闭合圆括号,则直接忽略当前属性\n if (!isParenthesisOpen) {\n var source = _.trim(css.slice(lastPos, i));\n var j = source.indexOf(':');\n if (j !== -1) {\n var name = _.trim(source.slice(0, j));\n var value = _.trim(source.slice(j + 1));\n // 必须有属性名称\n if (name) {\n var ret = onAttr(lastPos, retCSS.length, name, value, source);\n if (ret) retCSS += ret + '; ';\n }\n }\n }\n lastPos = i + 1;\n }\n\n for (; i < cssLength; i++) {\n var c = css[i];\n if (c === '/' && css[i + 1] === '*') {\n // 备注开始\n var j = css.indexOf('*/', i + 2);\n // 如果没有正常的备注结束,则后面的部分全部跳过\n if (j === -1) break;\n // 直接将当前位置调到备注结尾,并且初始化状态\n i = j + 1;\n lastPos = i + 1;\n isParenthesisOpen = false;\n } else if (c === '(') {\n isParenthesisOpen = true;\n } else if (c === ')') {\n isParenthesisOpen = false;\n } else if (c === ';') {\n if (isParenthesisOpen) {\n // 在圆括号里面,忽略\n } else {\n addNewAttr();\n }\n } else if (c === '\\n') {\n addNewAttr();\n }\n }\n\n return _.trim(retCSS);\n}\n\nmodule.exports = parseStyle;\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n\n var getAutoResizeMinHeight = function (editor) {\n return editor.getParam('min_height', editor.getElement().offsetHeight, 'number');\n };\n var getAutoResizeMaxHeight = function (editor) {\n return editor.getParam('max_height', 0, 'number');\n };\n var getAutoResizeOverflowPadding = function (editor) {\n return editor.getParam('autoresize_overflow_padding', 1, 'number');\n };\n var getAutoResizeBottomMargin = function (editor) {\n return editor.getParam('autoresize_bottom_margin', 50, 'number');\n };\n var shouldAutoResizeOnInit = function (editor) {\n return editor.getParam('autoresize_on_init', true, 'boolean');\n };\n\n var isFullscreen = function (editor) {\n return editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n };\n var wait = function (editor, oldSize, times, interval, callback) {\n global$2.setEditorTimeout(editor, function () {\n resize(editor, oldSize);\n if (times--) {\n wait(editor, oldSize, times, interval, callback);\n } else if (callback) {\n callback();\n }\n }, interval);\n };\n var toggleScrolling = function (editor, state) {\n var body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n var parseCssValueToInt = function (dom, elm, name, computed) {\n var value = parseInt(dom.getStyle(elm, name, computed), 10);\n return isNaN(value) ? 0 : value;\n };\n var resize = function (editor, oldSize) {\n var dom = editor.dom;\n var doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n var docEle = doc.documentElement;\n var resizeBottomMargin = getAutoResizeBottomMargin(editor);\n var resizeHeight = getAutoResizeMinHeight(editor);\n var marginTop = parseCssValueToInt(dom, docEle, 'margin-top', true);\n var marginBottom = parseCssValueToInt(dom, docEle, 'margin-bottom', true);\n var contentHeight = docEle.offsetHeight + marginTop + marginBottom + resizeBottomMargin;\n if (contentHeight < 0) {\n contentHeight = 0;\n }\n var containerHeight = editor.getContainer().offsetHeight;\n var contentAreaHeight = editor.getContentAreaContainer().offsetHeight;\n var chromeHeight = containerHeight - contentAreaHeight;\n if (contentHeight + chromeHeight > getAutoResizeMinHeight(editor)) {\n resizeHeight = contentHeight + chromeHeight;\n }\n var maxHeight = getAutoResizeMaxHeight(editor);\n if (maxHeight && resizeHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n if (resizeHeight !== oldSize.get()) {\n var deltaSize = resizeHeight - oldSize.get();\n dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px');\n oldSize.set(resizeHeight);\n fireResizeEditor(editor);\n if (global$1.browser.isSafari() && global$1.mac) {\n var win = editor.getWin();\n win.scrollTo(win.pageXOffset, win.pageYOffset);\n }\n if (editor.hasFocus()) {\n editor.selection.scrollIntoView(editor.selection.getNode());\n }\n if (global$1.webkit && deltaSize < 0) {\n resize(editor, oldSize);\n }\n }\n };\n var setup = function (editor, oldSize) {\n editor.on('init', function () {\n var overflowPadding = getAutoResizeOverflowPadding(editor);\n var dom = editor.dom;\n dom.setStyles(editor.getDoc().documentElement, { height: 'auto' });\n dom.setStyles(editor.getBody(), {\n 'paddingLeft': overflowPadding,\n 'paddingRight': overflowPadding,\n 'min-height': 0\n });\n });\n editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', function () {\n resize(editor, oldSize);\n });\n if (shouldAutoResizeOnInit(editor)) {\n editor.on('init', function () {\n wait(editor, oldSize, 20, 100, function () {\n wait(editor, oldSize, 5, 1000);\n });\n });\n }\n };\n\n var register = function (editor, oldSize) {\n editor.addCommand('mceAutoResize', function () {\n resize(editor, oldSize);\n });\n };\n\n function Plugin () {\n global.add('autoresize', function (editor) {\n if (!editor.settings.hasOwnProperty('resize')) {\n editor.settings.resize = false;\n }\n if (!editor.inline) {\n var oldSize = Cell(0);\n register(editor, oldSize);\n setup(editor, oldSize);\n }\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"paste\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/paste')\n// ES2015:\n// import 'tinymce/plugins/paste'\nrequire('./plugin.js');","/**\n * cssfilter\n *\n * @author 老雷\n */\n\nvar DEFAULT = require('./default');\nvar parseStyle = require('./parser');\nvar _ = require('./util');\n\n\n/**\n * 返回值是否为空\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull (obj) {\n return (obj === undefined || obj === null);\n}\n\n/**\n * 浅拷贝对象\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject (obj) {\n var ret = {};\n for (var i in obj) {\n ret[i] = obj[i];\n }\n return ret;\n}\n\n/**\n * 创建CSS过滤器\n *\n * @param {Object} options\n * - {Object} whiteList\n * - {Function} onAttr\n * - {Function} onIgnoreAttr\n * - {Function} safeAttrValue\n */\nfunction FilterCSS (options) {\n options = shallowCopyObject(options || {});\n options.whiteList = options.whiteList || DEFAULT.whiteList;\n options.onAttr = options.onAttr || DEFAULT.onAttr;\n options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n this.options = options;\n}\n\nFilterCSS.prototype.process = function (css) {\n // 兼容各种奇葩输入\n css = css || '';\n css = css.toString();\n if (!css) return '';\n\n var me = this;\n var options = me.options;\n var whiteList = options.whiteList;\n var onAttr = options.onAttr;\n var onIgnoreAttr = options.onIgnoreAttr;\n var safeAttrValue = options.safeAttrValue;\n\n var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n var check = whiteList[name];\n var isWhite = false;\n if (check === true) isWhite = check;\n else if (typeof check === 'function') isWhite = check(value);\n else if (check instanceof RegExp) isWhite = check.test(value);\n if (isWhite !== true) isWhite = false;\n\n // 如果过滤后 value 为空则直接忽略\n value = safeAttrValue(name, value);\n if (!value) return;\n\n var opts = {\n position: position,\n sourcePosition: sourcePosition,\n source: source,\n isWhite: isWhite\n };\n\n if (isWhite) {\n\n var ret = onAttr(name, value, opts);\n if (isNull(ret)) {\n return name + ':' + value;\n } else {\n return ret;\n }\n\n } else {\n\n var ret = onIgnoreAttr(name, value, opts);\n if (!isNull(ret)) {\n return ret;\n }\n\n }\n });\n\n return retCSS;\n};\n\n\nmodule.exports = FilterCSS;\n","/**\n * default settings\n *\n * @author Zongmin Lei\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar getDefaultCSSWhiteList = require(\"cssfilter\").getDefaultWhiteList;\nvar _ = require(\"./util\");\n\nfunction getDefaultWhiteList() {\n return {\n a: [\"target\", \"href\", \"title\"],\n abbr: [\"title\"],\n address: [],\n area: [\"shape\", \"coords\", \"href\", \"alt\"],\n article: [],\n aside: [],\n audio: [\"autoplay\", \"controls\", \"loop\", \"preload\", \"src\"],\n b: [],\n bdi: [\"dir\"],\n bdo: [\"dir\"],\n big: [],\n blockquote: [\"cite\"],\n br: [],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: [\"align\", \"valign\", \"span\", \"width\"],\n colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n dd: [],\n del: [\"datetime\"],\n details: [\"open\"],\n div: [],\n dl: [],\n dt: [],\n em: [],\n font: [\"color\", \"size\", \"face\"],\n footer: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n header: [],\n hr: [],\n i: [],\n img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n ins: [\"datetime\"],\n li: [],\n mark: [],\n nav: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n table: [\"width\", \"border\", \"align\", \"valign\"],\n tbody: [\"align\", \"valign\"],\n td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n tfoot: [\"align\", \"valign\"],\n th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n thead: [\"align\", \"valign\"],\n tr: [\"rowspan\", \"align\", \"valign\"],\n tt: [],\n u: [],\n ul: [],\n video: [\"autoplay\", \"controls\", \"loop\", \"preload\", \"src\", \"height\", \"width\"]\n };\n}\n\nvar defaultCSSFilter = new FilterCSS();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n return html.replace(REGEXP_LT, \"<\").replace(REGEXP_GT, \">\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n // unescape attribute value firstly\n value = friendlyAttrValue(value);\n\n if (name === \"href\" || name === \"src\") {\n // filter `href` and `src` attribute\n // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n value = _.trim(value);\n if (value === \"#\") return \"#\";\n if (\n !(\n value.substr(0, 7) === \"http://\" ||\n value.substr(0, 8) === \"https://\" ||\n value.substr(0, 7) === \"mailto:\" ||\n value.substr(0, 4) === \"tel:\" ||\n value.substr(0, 11) === \"data:image/\" ||\n value.substr(0, 6) === \"ftp://\" ||\n value.substr(0, 2) === \"./\" ||\n value.substr(0, 3) === \"../\" ||\n value[0] === \"#\" ||\n value[0] === \"/\"\n )\n ) {\n return \"\";\n }\n } else if (name === \"background\") {\n // filter `background` attribute (maybe no use)\n // `javascript:`\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n } else if (name === \"style\") {\n // `expression()`\n REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n return \"\";\n }\n // `url()`\n REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n }\n if (cssFilter !== false) {\n cssFilter = cssFilter || defaultCSSFilter;\n value = cssFilter.process(value);\n }\n }\n\n // escape `<>\"` before returns\n value = escapeAttrValue(value);\n return value;\n}\n\n// RegExp list\nvar REGEXP_LT = //g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /"/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /:?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a)\\:/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 = /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape doube quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n return str.replace(REGEXP_QUOTE, \""\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n return code[0] === \"x\" || code[0] === \"X\"\n ? String.fromCharCode(parseInt(code.substr(1), 16))\n : String.fromCharCode(parseInt(code, 10));\n });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n return str\n .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n var str2 = \"\";\n for (var i = 0, len = str.length; i < len; i++) {\n str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n }\n return _.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n str = unescapeQuote(str);\n str = escapeHtmlEntities(str);\n str = escapeDangerHtml5Entities(str);\n str = clearNonPrintableCharacter(str);\n return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n str = escapeQuote(str);\n str = escapeHtml(str);\n return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n if (typeof next !== \"function\") {\n next = function() {};\n }\n\n var isRemoveAllTag = !Array.isArray(tags);\n function isRemoveTag(tag) {\n if (isRemoveAllTag) return true;\n return _.indexOf(tags, tag) !== -1;\n }\n\n var removeList = [];\n var posStart = false;\n\n return {\n onIgnoreTag: function(tag, html, options) {\n if (isRemoveTag(tag)) {\n if (options.isClosing) {\n var ret = \"[/removed]\";\n var end = options.position + ret.length;\n removeList.push([\n posStart !== false ? posStart : options.position,\n end\n ]);\n posStart = false;\n return ret;\n } else {\n if (!posStart) {\n posStart = options.position;\n }\n return \"[removed]\";\n }\n } else {\n return next(tag, html, options);\n }\n },\n remove: function(html) {\n var rethtml = \"\";\n var lastPos = 0;\n _.forEach(removeList, function(pos) {\n rethtml += html.slice(lastPos, pos[0]);\n lastPos = pos[1];\n });\n rethtml += html.slice(lastPos);\n return rethtml;\n }\n };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n return html.replace(STRIP_COMMENT_TAG_REGEXP, \"\");\n}\nvar STRIP_COMMENT_TAG_REGEXP = //g;\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n var chars = html.split(\"\");\n chars = chars.filter(function(char) {\n var c = char.charCodeAt(0);\n if (c === 127) return false;\n if (c <= 31) {\n if (c === 10 || c === 13) return true;\n return false;\n }\n return true;\n });\n return chars.join(\"\");\n}\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onTag = onTag;\nexports.onIgnoreTag = onIgnoreTag;\nexports.onTagAttr = onTagAttr;\nexports.onIgnoreTagAttr = onIgnoreTagAttr;\nexports.safeAttrValue = safeAttrValue;\nexports.escapeHtml = escapeHtml;\nexports.escapeQuote = escapeQuote;\nexports.unescapeQuote = unescapeQuote;\nexports.escapeHtmlEntities = escapeHtmlEntities;\nexports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\nexports.clearNonPrintableCharacter = clearNonPrintableCharacter;\nexports.friendlyAttrValue = friendlyAttrValue;\nexports.escapeAttrValue = escapeAttrValue;\nexports.onIgnoreTagStripAll = onIgnoreTagStripAll;\nexports.StripTagBody = StripTagBody;\nexports.stripCommentTag = stripCommentTag;\nexports.stripBlankChar = stripBlankChar;\nexports.cssFilter = defaultCSSFilter;\nexports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isNull = eq(null);\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n\n var assumeExternalTargets = function (editor) {\n var externalTargets = editor.getParam('link_assume_external_targets', false);\n if (isBoolean(externalTargets) && externalTargets) {\n return 1;\n } else if (isString(externalTargets) && (externalTargets === 'http' || externalTargets === 'https')) {\n return externalTargets;\n }\n return 0;\n };\n var hasContextToolbar = function (editor) {\n return editor.getParam('link_context_toolbar', false, 'boolean');\n };\n var getLinkList = function (editor) {\n return editor.getParam('link_list');\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target');\n };\n var getTargetList = function (editor) {\n return editor.getParam('target_list', true);\n };\n var getRelList = function (editor) {\n return editor.getParam('rel_list', [], 'array');\n };\n var getLinkClassList = function (editor) {\n return editor.getParam('link_class_list', [], 'array');\n };\n var shouldShowLinkTitle = function (editor) {\n return editor.getParam('link_title', true, 'boolean');\n };\n var allowUnsafeLinkTarget = function (editor) {\n return editor.getParam('allow_unsafe_link_target', false, 'boolean');\n };\n var useQuickLink = function (editor) {\n return editor.getParam('link_quicklink', false, 'boolean');\n };\n var getDefaultLinkProtocol = function (editor) {\n return editor.getParam('link_default_protocol', 'http', 'string');\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getValue = function (item) {\n return isString(item.value) ? item.value : '';\n };\n var getText = function (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 var sanitizeList = function (list, extractValue) {\n var out = [];\n global$2.each(list, function (item) {\n var text = getText(item);\n if (item.menu !== undefined) {\n var items = sanitizeList(item.menu, extractValue);\n out.push({\n text: text,\n items: items\n });\n } else {\n var value = extractValue(item);\n out.push({\n text: text,\n value: value\n });\n }\n });\n return out;\n };\n var sanitizeWith = function (extracter) {\n if (extracter === void 0) {\n extracter = getValue;\n }\n return function (list) {\n return Optional.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n };\n };\n var sanitize = function (list) {\n return sanitizeWith(getValue)(list);\n };\n var createUi = function (name, label) {\n return function (items) {\n return {\n name: name,\n type: 'listbox',\n label: label,\n items: items\n };\n };\n };\n var ListOptions = {\n sanitize: sanitize,\n sanitizeWith: sanitizeWith,\n createUi: createUi,\n getValue: getValue\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var isAnchor = function (elm) {\n return elm && elm.nodeName.toLowerCase() === 'a';\n };\n var isLink = function (elm) {\n return isAnchor(elm) && !!getHref(elm);\n };\n var collectNodesInRange = function (rng, predicate) {\n if (rng.collapsed) {\n return [];\n } else {\n var contents = rng.cloneContents();\n var walker = new global$3(contents.firstChild, contents);\n var elements = [];\n var current = contents.firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n var hasProtocol = function (url) {\n return /^\\w+:/i.test(url);\n };\n var getHref = function (elm) {\n var href = elm.getAttribute('data-mce-href');\n return href ? href : elm.getAttribute('href');\n };\n var applyRelTargetRules = function (rel, isUnsafe) {\n var rules = ['noopener'];\n var rels = rel ? rel.split(/\\s+/) : [];\n var toString = function (rels) {\n return global$2.trim(rels.sort().join(' '));\n };\n var addTargetRules = function (rels) {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n var removeTargetRules = function (rels) {\n return rels.filter(function (val) {\n return global$2.inArray(rules, val) === -1;\n });\n };\n var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n var trimCaretContainers = function (text) {\n return text.replace(/\\uFEFF/g, '');\n };\n var getAnchorElement = function (editor, selectedElm) {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return editor.dom.select('a[href]', selectedElm)[0];\n } else {\n return editor.dom.getParent(selectedElm, 'a[href]');\n }\n };\n var getAnchorText = function (selection, anchorElm) {\n var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\n return trimCaretContainers(text);\n };\n var hasLinks = function (elements) {\n return global$2.grep(elements, isLink).length > 0;\n };\n var hasLinksInSelection = function (rng) {\n return collectNodesInRange(rng, isLink).length > 0;\n };\n var isOnlyTextSelected = function (editor) {\n var inlineTextElements = editor.schema.getTextInlineElements();\n var isElement = function (elm) {\n return elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n };\n var elements = collectNodesInRange(editor.selection.getRng(), isElement);\n return elements.length === 0;\n };\n var isImageFigure = function (elm) {\n return elm && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n };\n var getLinkAttrs = function (data) {\n return foldl([\n 'title',\n 'rel',\n 'class',\n 'target'\n ], function (acc, key) {\n data[key].each(function (value) {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n var handleExternalTargets = function (href, assumeExternalTargets) {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n var applyLinkOverrides = function (editor, linkAttrs) {\n var newLinkAttrs = __assign({}, linkAttrs);\n if (!(getRelList(editor).length > 0) && allowUnsafeLinkTarget(editor) === false) {\n var 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 var updateLink = function (editor, anchorElm, text, linkAttrs) {\n text.each(function (text) {\n if (anchorElm.hasOwnProperty('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 var createLink = function (editor, selectedElm, text, linkAttrs) {\n if (isImageFigure(selectedElm)) {\n linkImageFigure(editor, selectedElm, linkAttrs);\n } else {\n text.fold(function () {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }, function (text) {\n editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(text)));\n });\n }\n };\n var linkDomMutation = function (editor, attachState, data) {\n var selectedElm = editor.selection.getNode();\n var anchorElm = getAnchorElement(editor, selectedElm);\n var linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n editor.undoManager.transact(function () {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n if (anchorElm) {\n editor.focus();\n updateLink(editor, anchorElm, data.text, linkAttrs);\n } else {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }\n });\n };\n var unlinkSelection = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var bookmark = selection.getBookmark();\n var rng = selection.getRng().cloneRange();\n var startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n var 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 var unlinkDomMutation = function (editor) {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n var unwrapOptions = function (data) {\n var cls = data.class, href = data.href, rel = data.rel, target = data.target, text = data.text, title = data.title;\n return filter({\n class: cls.getOrNull(),\n href: href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, function (v, _k) {\n return isNull(v) === false;\n });\n };\n var link = function (editor, attachState, data) {\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(data)) : linkDomMutation(editor, attachState, data);\n };\n var unlink = function (editor) {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n var unlinkImageFigure = function (editor, fig) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n a.parentNode.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n var linkImageFigure = function (editor, fig, attrs) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.create('a', attrs);\n img.parentNode.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n var isListGroup = function (item) {\n return hasNonNullableKey(item, 'items');\n };\n var findTextByValue = function (value, catalog) {\n return findMap(catalog, function (item) {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n };\n var getDelta = function (persistentText, fieldName, catalog, data) {\n var value = data[fieldName];\n var hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(function (i) {\n return {\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 };\n }) : Optional.none();\n };\n var findCatalog = function (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 var init = function (initialData, linkCatalog) {\n var persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n var getTitleFromUrlChange = function (url) {\n return someIf(persistentData.title.length <= 0, Optional.from(url.meta.title).getOr(''));\n };\n var getTextFromUrlChange = function (url) {\n return someIf(persistentData.text.length <= 0, Optional.from(url.meta.text).getOr(url.value));\n };\n var onUrlChange = function (data) {\n var text = getTextFromUrlChange(data.url);\n var title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some(__assign(__assign({}, text.map(function (text) {\n return { text: text };\n }).getOr({})), title.map(function (title) {\n return { title: title };\n }).getOr({})));\n } else {\n return Optional.none();\n }\n };\n var onCatalogChange = function (data, change) {\n var catalog = findCatalog(linkCatalog, change.name).getOr([]);\n return getDelta(persistentData.text, change.name, catalog, data);\n };\n var onChange = function (getData, change) {\n var 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(), change);\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: onChange };\n };\n var DialogChanges = {\n init: init,\n getDelta: getDelta\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var delayedConfirm = function (editor, message, callback) {\n var rng = editor.selection.getRng();\n global$4.setEditorTimeout(editor, function () {\n editor.windowManager.confirm(message, function (state) {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n var tryEmailTransform = function (data) {\n var url = data.href;\n var 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: function (oldData) {\n return __assign(__assign({}, oldData), { href: 'mailto:' + url });\n }\n }) : Optional.none();\n };\n var tryProtocolTransform = function (assumeExternalTargets, defaultLinkProtocol) {\n return function (data) {\n var url = data.href;\n var 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: function (oldData) {\n return __assign(__assign({}, oldData), { href: defaultLinkProtocol + '://' + url });\n }\n }) : Optional.none();\n };\n };\n var preprocess = function (editor, data) {\n return findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], function (f) {\n return f(data);\n }).fold(function () {\n return global$5.resolve(data);\n }, function (transform) {\n return new global$5(function (callback) {\n delayedConfirm(editor, transform.message, function (state) {\n callback(state ? transform.preprocess(data) : data);\n });\n });\n });\n };\n var DialogConfirms = { preprocess: preprocess };\n\n var getAnchors = function (editor) {\n var anchorNodes = editor.dom.select('a:not([href])');\n var anchors = bind(anchorNodes, function (anchor) {\n var 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 var AnchorListOptions = { getAnchors: getAnchors };\n\n var getClasses = function (editor) {\n var list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n var ClassListOptions = { getClasses: getClasses };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseJson = function (text) {\n try {\n return Optional.some(JSON.parse(text));\n } catch (err) {\n return Optional.none();\n }\n };\n var getLinks = function (editor) {\n var extractor = function (item) {\n return editor.convertURL(item.value || item.url, 'href');\n };\n var linkList = getLinkList(editor);\n return new global$5(function (callback) {\n if (isString(linkList)) {\n global$6.send({\n url: linkList,\n success: function (text) {\n return callback(parseJson(text));\n },\n error: function (_) {\n return callback(Optional.none());\n }\n });\n } else if (isFunction(linkList)) {\n linkList(function (output) {\n return callback(Optional.some(output));\n });\n } else {\n callback(Optional.from(linkList));\n }\n }).then(function (optItems) {\n return optItems.bind(ListOptions.sanitizeWith(extractor)).map(function (items) {\n if (items.length > 0) {\n var noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n });\n });\n };\n var LinkListOptions = { getLinks: getLinks };\n\n var getRels = function (editor, initialTarget) {\n var list = getRelList(editor);\n if (list.length > 0) {\n var isTargetBlank_1 = initialTarget.is('_blank');\n var enforceSafe = allowUnsafeLinkTarget(editor) === false;\n var safeRelExtractor = function (item) {\n return applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1);\n };\n var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n var RelOptions = { getRels: getRels };\n\n var fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n var getTargets = function (editor) {\n var list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(function () {\n return Optional.some(fallbacks);\n });\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n var TargetOptions = { getTargets: getTargets };\n\n var nonEmptyAttr = function (dom, elem, name) {\n var val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n var extractFromAnchor = function (editor, anchor) {\n var dom = editor.dom;\n var onlyText = isOnlyTextSelected(editor);\n var text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n var url = anchor ? Optional.some(dom.getAttrib(anchor, 'href')) : Optional.none();\n var target = anchor ? Optional.from(dom.getAttrib(anchor, 'target')) : Optional.none();\n var rel = nonEmptyAttr(dom, anchor, 'rel');\n var linkClass = nonEmptyAttr(dom, anchor, 'class');\n var title = nonEmptyAttr(dom, anchor, 'title');\n return {\n url: url,\n text: text,\n title: title,\n target: target,\n rel: rel,\n linkClass: linkClass\n };\n };\n var collect = function (editor, linkNode) {\n return LinkListOptions.getLinks(editor).then(function (links) {\n var anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor: 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: Optional.from(linkNode),\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n };\n var DialogInfo = { collect: collect };\n\n var handleSubmit = function (editor, info) {\n return function (api) {\n var data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n var getChangedValue = function (key) {\n return Optional.from(data[key]).filter(function (value) {\n return !info.anchor[key].is(value);\n });\n };\n var 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 var 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(function (pData) {\n link(editor, attachState, pData);\n });\n api.close();\n };\n };\n var collectData = function (editor) {\n var anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n var getInitialData = function (info, defaultTarget) {\n var anchor = info.anchor;\n var 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 var makeDialog = function (settings, onSubmit, editor) {\n var urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL'\n }];\n var displayText = settings.anchor.text.map(function () {\n return {\n name: 'text',\n type: 'input',\n label: 'Text to display'\n };\n }).toArray();\n var titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n var defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n var initialData = getInitialData(settings, defaultTarget);\n var catalogs = settings.catalogs;\n var dialogDelta = DialogChanges.init(initialData, catalogs);\n var 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: 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: initialData,\n onChange: function (api, _a) {\n var name = _a.name;\n dialogDelta.onChange(api.getData, { name: name }).each(function (newData) {\n api.setData(newData);\n });\n },\n onSubmit: onSubmit\n };\n };\n var open = function (editor) {\n var data = collectData(editor);\n data.then(function (info) {\n var onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n\n var appendClickRemove = function (link, evt) {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n var open$1 = function (url) {\n var link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var 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 var getLink = function (editor, elm) {\n return editor.dom.getParent(elm, 'a[href]');\n };\n var getSelectedLink = function (editor) {\n return getLink(editor, editor.selection.getStart());\n };\n var hasOnlyAltModifier = function (e) {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n var gotoLink = function (editor, a) {\n if (a) {\n var href = getHref(a);\n if (/^#/.test(href)) {\n var targetEl = editor.$(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n open$1(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n open(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$1.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', function (e) {\n var link = getSelectedLink(editor);\n if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n };\n var toggleState = function (editor, toggler) {\n editor.on('NodeChange', toggler);\n return function () {\n return editor.off('NodeChange', toggler);\n };\n };\n var toggleActiveState = function (editor) {\n return function (api) {\n return toggleState(editor, function () {\n api.setActive(!editor.mode.isReadOnly() && getAnchorElement(editor, editor.selection.getNode()) !== null);\n });\n };\n };\n var toggleEnabledState = function (editor) {\n return function (api) {\n var updateState = function () {\n return api.setDisabled(getAnchorElement(editor, editor.selection.getNode()) === null);\n };\n updateState();\n return toggleState(editor, updateState);\n };\n };\n var toggleUnlinkState = function (editor) {\n return function (api) {\n var hasLinks$1 = function (parents) {\n return hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n };\n var parents = editor.dom.getParents(editor.selection.getStart());\n api.setDisabled(!hasLinks$1(parents));\n return toggleState(editor, function (e) {\n return api.setDisabled(!hasLinks$1(e.parents));\n });\n };\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', function () {\n if (useQuickLink(editor)) {\n editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' });\n } else {\n openDialog(editor)();\n }\n });\n };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', function () {\n editor.execCommand('mceLink');\n });\n };\n\n var setupButtons = function (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: function () {\n return unlink(editor);\n },\n onSetup: toggleUnlinkState(editor)\n });\n };\n var setupMenuItems = function (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: function () {\n return unlink(editor);\n },\n onSetup: toggleUnlinkState(editor)\n });\n };\n var setupContextMenu = function (editor) {\n var inLink = 'link unlink openlink';\n var noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: function (element) {\n return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n var setupContextToolbars = function (editor) {\n var collapseSelectionToEnd = function (editor) {\n editor.selection.collapse(false);\n };\n var onSetupLink = function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setDisabled(!getAnchorElement(editor, node));\n return noop;\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: function (node) {\n return !!getAnchorElement(editor, node) && hasContextToolbar(editor);\n },\n initValue: function () {\n var elm = getAnchorElement(editor);\n return !!elm ? getHref(elm) : '';\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setActive(!!getAnchorElement(editor, node));\n return toggleActiveState(editor)(buttonApi);\n },\n onAction: function (formApi) {\n var anchor = getAnchorElement(editor);\n var value = formApi.getValue();\n if (!anchor) {\n var attachState = {\n href: value,\n attach: noop\n };\n var onlyText = isOnlyTextSelected(editor);\n var text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)).filter(function (t) {\n return t.length > 0;\n }).or(Optional.from(value)) : Optional.none();\n link(editor, attachState, {\n href: value,\n text: text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.none(),\n class: Optional.none()\n });\n formApi.hide();\n } else {\n editor.undoManager.transact(function () {\n editor.dom.setAttrib(anchor, 'href', value);\n collapseSelectionToEnd(editor);\n formApi.hide();\n });\n }\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: function (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: function (formApi) {\n gotoSelectedLink(editor)();\n formApi.hide();\n }\n }\n ]\n });\n };\n\n function Plugin () {\n global.add('link', function (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","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getKeyboardSpaces = function (editor) {\n var spaces = editor.getParam('nonbreaking_force_tab', 0);\n if (typeof spaces === 'boolean') {\n return spaces === true ? 3 : 0;\n } else {\n return spaces;\n }\n };\n var wrapNbsps = function (editor) {\n return editor.getParam('nonbreaking_wrap', true, 'boolean');\n };\n\n var stringRepeat = function (string, repeats) {\n var str = '';\n for (var index = 0; index < repeats; index++) {\n str += string;\n }\n return str;\n };\n var isVisualCharsEnabled = function (editor) {\n return editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;\n };\n var insertNbsp = function (editor, times) {\n var classes = function () {\n return isVisualCharsEnabled(editor) ? 'mce-nbsp-wrap mce-nbsp' : 'mce-nbsp-wrap';\n };\n var nbspSpan = function () {\n return '' + stringRepeat(' ', times) + '';\n };\n var shouldWrap = wrapNbsps(editor);\n var html = shouldWrap || editor.plugins.visualchars ? nbspSpan() : stringRepeat(' ', times);\n editor.undoManager.transact(function () {\n return editor.insertContent(html);\n });\n };\n\n var register = function (editor) {\n editor.addCommand('mceNonBreaking', function () {\n insertNbsp(editor, 1);\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var setup = function (editor) {\n var spaces = getKeyboardSpaces(editor);\n if (spaces > 0) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$1.TAB && !e.isDefaultPrevented()) {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n insertNbsp(editor, spaces);\n }\n });\n }\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('nonbreaking', {\n icon: 'non-breaking',\n tooltip: 'Nonbreaking space',\n onAction: function () {\n return editor.execCommand('mceNonBreaking');\n }\n });\n editor.ui.registry.addMenuItem('nonbreaking', {\n icon: 'non-breaking',\n text: 'Nonbreaking space',\n onAction: function () {\n return editor.execCommand('mceNonBreaking');\n }\n });\n };\n\n function Plugin () {\n global.add('nonbreaking', function (editor) {\n register(editor);\n register$1(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) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = eq(null);\n var isBoolean = isSimpleType('boolean');\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isNumber = isSimpleType('number');\n\n var nativePush = Array.prototype.push;\n var flatten = function (xs) {\n var r = [];\n for (var 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 var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var remove = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var hasDimensions = function (editor) {\n return editor.getParam('image_dimensions', true, 'boolean');\n };\n var hasAdvTab = function (editor) {\n return editor.getParam('image_advtab', false, 'boolean');\n };\n var hasUploadTab = function (editor) {\n return editor.getParam('image_uploadtab', true, 'boolean');\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '', 'string');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.getParam('image_description', true, 'boolean');\n };\n var hasImageTitle = function (editor) {\n return editor.getParam('image_title', false, 'boolean');\n };\n var hasImageCaption = function (editor) {\n return editor.getParam('image_caption', false, 'boolean');\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return isNonNullable(editor.getParam('images_upload_url'));\n };\n var hasUploadHandler = function (editor) {\n return isNonNullable(editor.getParam('images_upload_handler'));\n };\n var showAccessibilityOptions = function (editor) {\n return editor.getParam('a11y_advanced_options', false, 'boolean');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url) {\n return new global$2(function (callback) {\n var img = document.createElement('img');\n var done = function (dimensions) {\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback(dimensions);\n };\n img.onload = function () {\n var width = parseIntAndGetMax(img.width, img.clientWidth);\n var height = parseIntAndGetMax(img.height, img.clientHeight);\n var dimensions = {\n width: width,\n height: height\n };\n done(global$2.resolve(dimensions));\n };\n img.onerror = function () {\n done(global$2.reject('Failed to get image dimensions for: ' + url));\n };\n var 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 };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var 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 var createImageList = function (editor, callback) {\n var imageList = getImageList(editor);\n if (typeof imageList === 'string') {\n global$3.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n var selectImage = function () {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n };\n imgElm.onload = function () {\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 var blobToDataUri = function (blob) {\n return new global$2(function (resolve, reject) {\n var reader = new FileReader();\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n var isPlaceholderImage = function (imgElm) {\n return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));\n };\n\n var DOM = global$1.DOM;\n var getHspace = function (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 var getVspace = function (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 var getBorder = function (image) {\n if (image.style.borderWidth) {\n return removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var updateAttrib = function (image, name, value) {\n if (value === '') {\n image.removeAttribute(name);\n } else {\n image.setAttribute(name, value);\n }\n };\n var wrapInFigure = function (image) {\n var 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 var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var 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 var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n updateAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var isImage = function (elm) {\n return elm.nodeName === 'IMG';\n };\n var getIsDecorative = function (image) {\n return DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation';\n };\n var getAlt = function (image) {\n if (getIsDecorative(image)) {\n return '';\n } else {\n return getAttrib(image, 'alt');\n }\n };\n var defaultData = function () {\n return {\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 };\n var getStyleValue = function (normalizeCss, data) {\n var 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(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data) {\n var image = document.createElement('img');\n write(normalizeCss, __assign(__assign({}, data), { caption: false }), image);\n setAlt(image, data.alt, data.isDecorative);\n if (data.caption) {\n var 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 var read = function (normalizeCss, image) {\n return {\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: getStyle(image, 'borderStyle'),\n isDecorative: getIsDecorative(image)\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var setAlt = function (image, alt, isDecorative) {\n if (isDecorative) {\n DOM.setAttrib(image, 'role', 'presentation');\n var sugarImage = SugarElement.fromDom(image);\n set(sugarImage, 'alt', '');\n } else {\n if (isNull(alt)) {\n var sugarImage = SugarElement.fromDom(image);\n remove(sugarImage, 'alt');\n } else {\n var 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 var updateAlt = function (image, oldData, newData) {\n if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n setAlt(image, newData.alt, newData.isDecorative);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\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(function (image, value) {\n return updateAttrib(image, 'style', value);\n }, 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 var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var 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 var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlockElements = filter(editor.schema.getTextBlockElements(), function (_, parentElm) {\n return !editor.schema.isValidChild(parentElm, 'figure');\n });\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return hasNonNullableKey(textBlockElements, node.nodeName);\n }, editor.getBody());\n if (textBlock) {\n return dom.split(textBlock, figure);\n } else {\n return figure;\n }\n };\n var readImageDataFromSelection = function (editor) {\n var image = getSelectedImage(editor);\n return image ? read(function (css) {\n return normalizeCss(editor, css);\n }, image) : defaultData();\n };\n var insertImageAtCaret = function (editor, data) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var 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 var writeImageDataToSelection = function (editor, data) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var 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 var insertOrUpdateImage = function (editor, partialData) {\n var image = getSelectedImage(editor);\n if (image) {\n var selectedImageData = read(function (css) {\n return normalizeCss(editor, css);\n }, image);\n var data = __assign(__assign({}, selectedImageData), partialData);\n if (data.src) {\n writeImageDataToSelection(editor, data);\n } else {\n deleteImage(editor, image);\n }\n } else if (partialData.src) {\n insertImageAtCaret(editor, __assign(__assign({}, defaultData()), partialData));\n }\n };\n\n var hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$1.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var deepMerge = baseMerge(deep);\n\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.ImageUploader');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getValue = function (item) {\n return isString(item.value) ? item.value : '';\n };\n var getText = function (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 var sanitizeList = function (list, extractValue) {\n var out = [];\n global$5.each(list, function (item) {\n var text = getText(item);\n if (item.menu !== undefined) {\n var items = sanitizeList(item.menu, extractValue);\n out.push({\n text: text,\n items: items\n });\n } else {\n var value = extractValue(item);\n out.push({\n text: text,\n value: value\n });\n }\n });\n return out;\n };\n var sanitizer = function (extracter) {\n if (extracter === void 0) {\n extracter = getValue;\n }\n return function (list) {\n if (list) {\n return Optional.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n } else {\n return Optional.none();\n }\n };\n };\n var sanitize = function (list) {\n return sanitizer(getValue)(list);\n };\n var isGroup = function (item) {\n return Object.prototype.hasOwnProperty.call(item, 'items');\n };\n var findEntryDelegate = function (list, value) {\n return findMap(list, function (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 };\n var findEntry = function (optList, value) {\n return optList.bind(function (list) {\n return findEntryDelegate(list, value);\n });\n };\n var ListUtils = {\n sanitizer: sanitizer,\n sanitize: sanitize,\n findEntry: findEntry\n };\n\n var makeTab = function (_info) {\n return {\n title: 'Advanced',\n name: 'advanced',\n items: [\n {\n type: 'input',\n label: 'Style',\n name: 'style'\n },\n {\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 };\n };\n var AdvTab = { makeTab: makeTab };\n\n var collect = function (editor) {\n var urlListSanitizer = ListUtils.sanitizer(function (item) {\n return editor.convertURL(item.value || item.url, 'src');\n });\n var futureImageList = new global$2(function (completer) {\n createImageList(editor, function (imageList) {\n completer(urlListSanitizer(imageList).map(function (items) {\n return flatten([\n [{\n text: 'None',\n value: ''\n }],\n items\n ]);\n }));\n });\n });\n var classList = ListUtils.sanitize(getClassList(editor));\n var hasAdvTab$1 = hasAdvTab(editor);\n var hasUploadTab$1 = hasUploadTab(editor);\n var hasUploadUrl$1 = hasUploadUrl(editor);\n var hasUploadHandler$1 = hasUploadHandler(editor);\n var image = readImageDataFromSelection(editor);\n var hasDescription$1 = hasDescription(editor);\n var hasImageTitle$1 = hasImageTitle(editor);\n var hasDimensions$1 = hasDimensions(editor);\n var hasImageCaption$1 = hasImageCaption(editor);\n var hasAccessibilityOptions = showAccessibilityOptions(editor);\n var automaticUploads = isAutomaticUploadsEnabled(editor);\n var prependURL = Optional.some(getPrependUrl(editor)).filter(function (preUrl) {\n return isString(preUrl) && preUrl.length > 0;\n });\n return futureImageList.then(function (imageList) {\n return {\n image: image,\n imageList: imageList,\n classList: 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: prependURL,\n hasAccessibilityOptions: hasAccessibilityOptions,\n automaticUploads: automaticUploads\n };\n });\n };\n\n var makeItems = function (info) {\n var imageUrl = {\n name: 'src',\n type: 'urlinput',\n filetype: 'image',\n label: 'Source'\n };\n var imageList = info.imageList.map(function (items) {\n return {\n name: 'images',\n type: 'listbox',\n label: 'Image list',\n items: items\n };\n });\n var imageDescription = {\n name: 'alt',\n type: 'input',\n label: 'Alternative description',\n disabled: info.hasAccessibilityOptions && info.image.isDecorative\n };\n var imageTitle = {\n name: 'title',\n type: 'input',\n label: 'Image title'\n };\n var imageDimensions = {\n name: 'dimensions',\n type: 'sizeinput'\n };\n var isDecorative = {\n type: 'label',\n label: 'Accessibility',\n items: [{\n name: 'isDecorative',\n type: 'checkbox',\n label: 'Image is decorative'\n }]\n };\n var classList = info.classList.map(function (items) {\n return {\n name: 'classes',\n type: 'listbox',\n label: 'Class',\n items: items\n };\n });\n var caption = {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n };\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 type: 'grid',\n columns: 2,\n items: flatten([\n classList.toArray(),\n info.hasImageCaption ? [caption] : []\n ])\n }]\n ]);\n };\n var makeTab$1 = function (info) {\n return {\n title: 'General',\n name: 'general',\n items: makeItems(info)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n makeItems: makeItems\n };\n\n var makeTab$2 = function (_info) {\n var items = [{\n type: 'dropzone',\n name: 'fileinput'\n }];\n return {\n title: 'Upload',\n name: 'upload',\n items: items\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n var createState = function (info) {\n return {\n prevImage: ListUtils.findEntry(info.imageList, info.image.src),\n prevAlt: info.image.alt,\n open: true\n };\n };\n var fromImageData = function (image) {\n return {\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 };\n var toImageData = function (data, removeEmptyAlt) {\n return {\n src: data.src.value,\n alt: 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 };\n var addPrependUrl2 = function (info, srcURL) {\n if (!/^(?:[a-zA-Z]+:)?\\/\\//.test(srcURL)) {\n return info.prependURL.bind(function (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 var addPrependUrl = function (info, api) {\n var data = api.getData();\n addPrependUrl2(info, data.src.value).each(function (srcURL) {\n api.setData({\n src: {\n value: srcURL,\n meta: data.src.meta\n }\n });\n });\n };\n var formFillFromMeta2 = function (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(function (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 var formFillFromMeta = function (info, api) {\n var data = api.getData();\n var meta = data.src.meta;\n if (meta !== undefined) {\n var newData = deepMerge({}, data);\n formFillFromMeta2(info, newData, meta);\n api.setData(newData);\n }\n };\n var calculateImageSize = function (helpers, info, state, api) {\n var data = api.getData();\n var url = data.src.value;\n var meta = data.src.meta || {};\n if (!meta.width && !meta.height && info.hasDimensions) {\n if (isNotEmpty(url)) {\n helpers.imageSize(url).then(function (size) {\n if (state.open) {\n api.setData({ dimensions: size });\n }\n }).catch(function (e) {\n return console.error(e);\n });\n } else {\n api.setData({\n dimensions: {\n width: '',\n height: ''\n }\n });\n }\n }\n };\n var updateImagesDropdown = function (info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.src.value);\n state.prevImage = image;\n api.setData({\n images: image.map(function (entry) {\n return entry.value;\n }).getOr('')\n });\n };\n var changeSrc = function (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 var changeImages = function (helpers, info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.images);\n image.each(function (img) {\n var updateAlt = data.alt === '' || state.prevImage.map(function (image) {\n return image.text === data.alt;\n }).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 var calcVSpace = function (css) {\n var matchingTopBottom = css['margin-top'] && css['margin-bottom'] && css['margin-top'] === css['margin-bottom'];\n return matchingTopBottom ? removePixelSuffix(String(css['margin-top'])) : '';\n };\n var calcHSpace = function (css) {\n var matchingLeftRight = css['margin-right'] && css['margin-left'] && css['margin-right'] === css['margin-left'];\n return matchingLeftRight ? removePixelSuffix(String(css['margin-right'])) : '';\n };\n var calcBorderWidth = function (css) {\n return css['border-width'] ? removePixelSuffix(String(css['border-width'])) : '';\n };\n var calcBorderStyle = function (css) {\n return css['border-style'] ? String(css['border-style']) : '';\n };\n var calcStyle = function (parseStyle, serializeStyle, css) {\n return serializeStyle(parseStyle(serializeStyle(css)));\n };\n var changeStyle2 = function (parseStyle, serializeStyle, data) {\n var css = mergeMargins(parseStyle(data.style));\n var dataCopy = deepMerge({}, data);\n dataCopy.vspace = calcVSpace(css);\n dataCopy.hspace = calcHSpace(css);\n dataCopy.border = calcBorderWidth(css);\n dataCopy.borderstyle = calcBorderStyle(css);\n dataCopy.style = calcStyle(parseStyle, serializeStyle, css);\n return dataCopy;\n };\n var changeStyle = function (helpers, api) {\n var data = api.getData();\n var newData = changeStyle2(helpers.parseStyle, helpers.serializeStyle, data);\n api.setData(newData);\n };\n var changeAStyle = function (helpers, info, api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n var style = getStyleValue(helpers.normalizeCss, toImageData(data, false));\n api.setData({ style: style });\n };\n var changeFileInput = function (helpers, info, state, api) {\n var data = api.getData();\n api.block('Uploading image');\n head(data.fileinput).fold(function () {\n api.unblock();\n }, function (file) {\n var blobUri = URL.createObjectURL(file);\n var finalize = function () {\n api.unblock();\n URL.revokeObjectURL(blobUri);\n };\n var updateSrcAndSwitchTab = function (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(function (dataUrl) {\n var blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);\n if (info.automaticUploads) {\n helpers.uploadImage(blobInfo).then(function (result) {\n updateSrcAndSwitchTab(result.url);\n finalize();\n }).catch(function (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 var changeHandler = function (helpers, info, state) {\n return function (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 === 'style') {\n changeStyle(helpers, api);\n } else if (evt.name === 'vspace' || evt.name === 'hspace' || evt.name === 'border' || evt.name === 'borderstyle') {\n changeAStyle(helpers, info, api);\n } else if (evt.name === 'fileinput') {\n changeFileInput(helpers, info, state, api);\n } else if (evt.name === 'isDecorative') {\n if (api.getData().isDecorative) {\n api.disable('alt');\n } else {\n api.enable('alt');\n }\n }\n };\n };\n var closeHandler = function (state) {\n return function () {\n state.open = false;\n };\n };\n var makeDialogBody = function (info) {\n if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {\n var 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 var panel = {\n type: 'panel',\n items: MainTab.makeItems(info)\n };\n return panel;\n }\n };\n var makeDialog = function (helpers) {\n return function (info) {\n var 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: helpers.onSubmit(info),\n onChange: changeHandler(helpers, info, state),\n onClose: closeHandler(state)\n };\n };\n };\n var submitHandler = function (editor) {\n return function (info) {\n return function (api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n editor.execCommand('mceUpdateImage', false, toImageData(data, info.hasAccessibilityOptions));\n editor.editorUpload.uploadImagesAuto();\n api.close();\n };\n };\n };\n var imageSize = function (editor) {\n return function (url) {\n return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(function (dimensions) {\n return {\n width: String(dimensions.width),\n height: String(dimensions.height)\n };\n });\n };\n };\n var createBlobCache = function (editor) {\n return function (file, blobUri, dataUrl) {\n return editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n filename: file.name,\n base64: dataUrl.split(',')[1]\n });\n };\n };\n var addToBlobCache = function (editor) {\n return function (blobInfo) {\n editor.editorUpload.blobCache.add(blobInfo);\n };\n };\n var alertErr = function (editor) {\n return function (message) {\n editor.windowManager.alert(message);\n };\n };\n var normalizeCss$1 = function (editor) {\n return function (cssText) {\n return normalizeCss(editor, cssText);\n };\n };\n var parseStyle = function (editor) {\n return function (cssText) {\n return editor.dom.parseStyle(cssText);\n };\n };\n var serializeStyle = function (editor) {\n return function (stylesArg, name) {\n return editor.dom.serializeStyle(stylesArg, name);\n };\n };\n var uploadImage = function (editor) {\n return function (blobInfo) {\n return global$4(editor).upload([blobInfo], false).then(function (results) {\n if (results.length === 0) {\n return global$2.reject('Failed to upload image');\n } else if (results[0].status === false) {\n return global$2.reject(results[0].error);\n } else {\n return results[0];\n }\n });\n };\n };\n var Dialog = function (editor) {\n var helpers = {\n onSubmit: submitHandler(editor),\n imageSize: imageSize(editor),\n addToBlobCache: addToBlobCache(editor),\n createBlobCache: createBlobCache(editor),\n alertErr: alertErr(editor),\n normalizeCss: normalizeCss$1(editor),\n parseStyle: parseStyle(editor),\n serializeStyle: serializeStyle(editor),\n uploadImage: uploadImage(editor)\n };\n var open = function () {\n collect(editor).then(makeDialog(helpers)).then(editor.windowManager.open);\n };\n return { open: open };\n };\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n editor.addCommand('mceUpdateImage', function (_ui, data) {\n editor.undoManager.transact(function () {\n return insertOrUpdateImage(editor, data);\n });\n });\n };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n var node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$5.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onAction: Dialog(editor).open,\n onSetup: function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[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', {\n update: function (element) {\n return isFigure(element) || isImage(element) && !isPlaceholderImage(element) ? ['image'] : [];\n }\n });\n };\n\n function Plugin () {\n global.add('image', function (editor) {\n setup(editor);\n register$1(editor);\n register(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (toggleState) {\n var isEnabled = function () {\n return toggleState.get();\n };\n return { isEnabled: isEnabled };\n };\n\n var fireVisualChars = function (editor, state) {\n return editor.fire('VisualChars', { state: state });\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isBoolean = isSimpleType('boolean');\n var isNumber = isSimpleType('number');\n\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var TEXT = 3;\n\n var type = function (element) {\n return element.dom.nodeType;\n };\n var value = function (element) {\n return element.dom.nodeValue;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isText = isType$1(TEXT);\n\n var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var get$1 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var remove = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var read = function (element, attr) {\n var value = get$1(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$1 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$2 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$2 = function (element, clazz) {\n return remove$1(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$2(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$3 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$2(element, clazz);\n }\n cleanClass(element);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var charMap = {\n '\\xA0': 'nbsp',\n '\\xAD': 'shy'\n };\n var charMapToRegExp = function (charMap, global) {\n var regExp = '';\n each$1(charMap, function (_value, key) {\n regExp += key;\n });\n return new RegExp('[' + regExp + ']', global ? 'g' : '');\n };\n var charMapToSelector = function (charMap) {\n var selector = '';\n each$1(charMap, function (value) {\n if (selector) {\n selector += ',';\n }\n selector += 'span.mce-' + value;\n });\n return selector;\n };\n var regExp = charMapToRegExp(charMap);\n var regExpGlobal = charMapToRegExp(charMap, true);\n var selector = charMapToSelector(charMap);\n var nbspClass = 'mce-nbsp';\n\n var wrapCharWithSpan = function (value) {\n return '' + value + '';\n };\n\n var isMatch = function (n) {\n var value$1 = value(n);\n return isText(n) && value$1 !== undefined && regExp.test(value$1);\n };\n var filterDescendants = function (scope, predicate) {\n var result = [];\n var dom = scope.dom;\n var children = map(dom.childNodes, SugarElement.fromDom);\n each(children, function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(filterDescendants(x, predicate));\n });\n return result;\n };\n var findParentElm = function (elm, rootElm) {\n while (elm.parentNode) {\n if (elm.parentNode === rootElm) {\n return elm;\n }\n elm = elm.parentNode;\n }\n };\n var replaceWithSpans = function (text) {\n return text.replace(regExpGlobal, wrapCharWithSpan);\n };\n\n var isWrappedNbsp = function (node) {\n return node.nodeName.toLowerCase() === 'span' && node.classList.contains('mce-nbsp-wrap');\n };\n var show = function (editor, rootElm) {\n var nodeList = filterDescendants(SugarElement.fromDom(rootElm), isMatch);\n each(nodeList, function (n) {\n var parent = n.dom.parentNode;\n if (isWrappedNbsp(parent)) {\n add$2(SugarElement.fromDom(parent), nbspClass);\n } else {\n var withSpans = replaceWithSpans(editor.dom.encode(value(n)));\n var div = editor.dom.create('div', null, withSpans);\n var node = void 0;\n while (node = div.lastChild) {\n editor.dom.insertAfter(node, n.dom);\n }\n editor.dom.remove(n.dom);\n }\n });\n };\n var hide = function (editor, rootElm) {\n var nodeList = editor.dom.select(selector, rootElm);\n each(nodeList, function (node) {\n if (isWrappedNbsp(node)) {\n remove$3(SugarElement.fromDom(node), nbspClass);\n } else {\n editor.dom.remove(node, true);\n }\n });\n };\n var toggle = function (editor) {\n var body = editor.getBody();\n var bookmark = editor.selection.getBookmark();\n var parentNode = findParentElm(editor.selection.getNode(), body);\n parentNode = parentNode !== undefined ? parentNode : body;\n hide(editor, parentNode);\n show(editor, parentNode);\n editor.selection.moveToBookmark(bookmark);\n };\n\n var applyVisualChars = function (editor, toggleState) {\n fireVisualChars(editor, toggleState.get());\n var body = editor.getBody();\n if (toggleState.get() === true) {\n show(editor, body);\n } else {\n hide(editor, body);\n }\n };\n var toggleVisualChars = function (editor, toggleState) {\n toggleState.set(!toggleState.get());\n var bookmark = editor.selection.getBookmark();\n applyVisualChars(editor, toggleState);\n editor.selection.moveToBookmark(bookmark);\n };\n\n var register = function (editor, toggleState) {\n editor.addCommand('mceVisualChars', function () {\n toggleVisualChars(editor, toggleState);\n });\n };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualchars_default_state', false);\n };\n var hasForcedRootBlock = function (editor) {\n return editor.getParam('forced_root_block') !== false;\n };\n\n var setup = function (editor, toggleState) {\n editor.on('init', function () {\n applyVisualChars(editor, toggleState);\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var setup$1 = function (editor, toggleState) {\n var debouncedToggle = global$1.debounce(function () {\n toggle(editor);\n }, 300);\n if (hasForcedRootBlock(editor)) {\n editor.on('keydown', function (e) {\n if (toggleState.get() === true) {\n e.keyCode === 13 ? toggle(editor) : debouncedToggle();\n }\n });\n }\n editor.on('remove', debouncedToggle.stop);\n };\n\n var toggleActiveState = function (editor, enabledStated) {\n return function (api) {\n api.setActive(enabledStated.get());\n var editorEventCallback = function (e) {\n return api.setActive(e.state);\n };\n editor.on('VisualChars', editorEventCallback);\n return function () {\n return editor.off('VisualChars', editorEventCallback);\n };\n };\n };\n var register$1 = function (editor, toggleState) {\n editor.ui.registry.addToggleButton('visualchars', {\n tooltip: 'Show invisible characters',\n icon: 'visualchars',\n onAction: function () {\n return editor.execCommand('mceVisualChars');\n },\n onSetup: toggleActiveState(editor, toggleState)\n });\n editor.ui.registry.addToggleMenuItem('visualchars', {\n text: 'Show invisible characters',\n icon: 'visualchars',\n onAction: function () {\n return editor.execCommand('mceVisualChars');\n },\n onSetup: toggleActiveState(editor, toggleState)\n });\n };\n\n function Plugin () {\n global.add('visualchars', function (editor) {\n var toggleState = Cell(isEnabledByDefault(editor));\n register(editor, toggleState);\n register$1(editor, toggleState);\n setup$1(editor, toggleState);\n setup(editor, toggleState);\n return get(toggleState);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var DEFAULT_ID = 'tinymce.plugins.emoticons';\n var getEmoticonDatabase = function (editor) {\n return editor.getParam('emoticons_database', 'emojis', 'string');\n };\n var getEmoticonDatabaseUrl = function (editor, pluginUrl) {\n var database = getEmoticonDatabase(editor);\n return editor.getParam('emoticons_database_url', pluginUrl + '/js/' + database + editor.suffix + '.js', 'string');\n };\n var getEmoticonDatabaseId = function (editor) {\n return editor.getParam('emoticons_database_id', DEFAULT_ID, 'string');\n };\n var getAppendedEmoticons = function (editor) {\n return editor.getParam('emoticons_append', {}, 'object');\n };\n var getEmotionsImageUrl = function (editor) {\n return editor.getParam('emoticons_images_url', 'https://twemoji.maxcdn.com/v/13.0.1/72x72/', 'string');\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var has = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var ALL_CATEGORY = 'All';\n var categoryNameMap = {\n symbols: 'Symbols',\n people: 'People',\n animals_and_nature: 'Animals and Nature',\n food_and_drink: 'Food and Drink',\n activity: 'Activity',\n travel_and_places: 'Travel and Places',\n objects: 'Objects',\n flags: 'Flags',\n user: 'User Defined'\n };\n var translateCategory = function (categories, name) {\n return has(categories, name) ? categories[name] : name;\n };\n var getUserDefinedEmoticons = function (editor) {\n var userDefinedEmoticons = getAppendedEmoticons(editor);\n return map(userDefinedEmoticons, function (value) {\n return __assign({\n keywords: [],\n category: 'user'\n }, value);\n });\n };\n var initDatabase = function (editor, databaseUrl, databaseId) {\n var categories = Cell(Optional.none());\n var all = Cell(Optional.none());\n var emojiImagesUrl = getEmotionsImageUrl(editor);\n var getEmoji = function (lib) {\n if (startsWith(lib.char, '= max;\n };\n });\n for (var i = 0; i < list.length; i++) {\n if (pattern.length === 0 || emojiMatches(list[i], lowerCasePattern)) {\n matches.push({\n value: list[i].char,\n text: list[i].title,\n icon: list[i].char\n });\n if (reachedLimit(matches.length)) {\n break;\n }\n }\n }\n return matches;\n };\n\n var init = function (editor, database) {\n editor.ui.registry.addAutocompleter('emoticons', {\n ch: ':',\n columns: 'auto',\n minChars: 2,\n fetch: function (pattern, maxResults) {\n return database.waitForLoad().then(function () {\n var candidates = database.listAll();\n return emojisFrom(candidates, pattern, Optional.some(maxResults));\n });\n },\n onAction: function (autocompleteApi, rng, value) {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var insertEmoticon = function (editor, ch) {\n editor.insertContent(ch);\n };\n\n var patternName = 'pattern';\n var open = function (editor, database) {\n var initialState = {\n pattern: '',\n results: emojisFrom(database.listAll(), '', Optional.some(300))\n };\n var currentTab = Cell(ALL_CATEGORY);\n var scan = function (dialogApi) {\n var dialogData = dialogApi.getData();\n var category = currentTab.get();\n var candidates = database.listCategory(category);\n var results = emojisFrom(candidates, dialogData[patternName], category === ALL_CATEGORY ? Optional.some(300) : Optional.none());\n dialogApi.setData({ results: results });\n };\n var updateFilter = last(function (dialogApi) {\n scan(dialogApi);\n }, 200);\n var searchField = {\n label: 'Search',\n type: 'input',\n name: patternName\n };\n var resultsField = {\n type: 'collection',\n name: 'results'\n };\n var getInitialState = function () {\n var body = {\n type: 'tabpanel',\n tabs: map$1(database.listCategories(), function (cat) {\n return {\n title: cat,\n name: cat,\n items: [\n searchField,\n resultsField\n ]\n };\n })\n };\n return {\n title: 'Emoticons',\n size: 'normal',\n body: body,\n initialData: initialState,\n onTabChange: function (dialogApi, details) {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: updateFilter.throttle,\n onAction: function (dialogApi, actionData) {\n if (actionData.name === 'results') {\n insertEmoticon(editor, actionData.value);\n dialogApi.close();\n }\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }]\n };\n };\n var dialogApi = editor.windowManager.open(getInitialState());\n dialogApi.focus(patternName);\n if (!database.hasLoaded()) {\n dialogApi.block('Loading emoticons...');\n database.waitForLoad().then(function () {\n dialogApi.redial(getInitialState());\n updateFilter.throttle(dialogApi);\n dialogApi.focus(patternName);\n dialogApi.unblock();\n }).catch(function (_err) {\n dialogApi.redial({\n title: 'Emoticons',\n body: {\n type: 'panel',\n items: [{\n type: 'alertbanner',\n level: 'error',\n icon: 'warning',\n text: '

Could not load emoticons

'\n }]\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }],\n initialData: {\n pattern: '',\n results: []\n }\n });\n dialogApi.focus(patternName);\n dialogApi.unblock();\n });\n }\n };\n\n var register = function (editor, database) {\n var onAction = function () {\n return open(editor, database);\n };\n editor.ui.registry.addButton('emoticons', {\n tooltip: 'Emoticons',\n icon: 'emoji',\n onAction: onAction\n });\n editor.ui.registry.addMenuItem('emoticons', {\n text: 'Emoticons...',\n icon: 'emoji',\n onAction: onAction\n });\n };\n\n function Plugin () {\n global.add('emoticons', function (editor, pluginUrl) {\n var databaseUrl = getEmoticonDatabaseUrl(editor, pluginUrl);\n var databaseId = getEmoticonDatabaseId(editor);\n var database = initDatabase(editor, databaseUrl, databaseId);\n register(editor, database);\n init(editor, database);\n setup(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 * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var register = function (editor) {\n editor.addCommand('InsertHorizontalRule', function () {\n editor.execCommand('mceInsertContent', false, '
');\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('hr', {\n icon: 'horizontal-rule',\n tooltip: 'Horizontal line',\n onAction: function () {\n return editor.execCommand('InsertHorizontalRule');\n }\n });\n editor.ui.registry.addMenuItem('hr', {\n icon: 'horizontal-rule',\n text: 'Horizontal line',\n onAction: function () {\n return editor.execCommand('InsertHorizontalRule');\n }\n });\n };\n\n function Plugin () {\n global.add('hr', function (editor) {\n register(editor);\n register$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var setDir = function (editor, dir) {\n var dom = editor.dom;\n var curDir;\n var blocks = editor.selection.getSelectedBlocks();\n if (blocks.length) {\n curDir = dom.getAttrib(blocks[0], 'dir');\n global$1.each(blocks, function (block) {\n if (!dom.getParent(block.parentNode, '*[dir=\"' + dir + '\"]', dom.getRoot())) {\n dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);\n }\n });\n editor.nodeChanged();\n }\n };\n\n var register = function (editor) {\n editor.addCommand('mceDirectionLTR', function () {\n setDir(editor, 'ltr');\n });\n editor.addCommand('mceDirectionRTL', function () {\n setDir(editor, 'rtl');\n });\n };\n\n var noop = function () {\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var TEXT = 3;\n\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isText = isType(TEXT);\n var isDocument = isType(DOCUMENT);\n var isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n\n var get = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n\n var getDirection = function (element) {\n return get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var getNodeChangeHandler = function (editor, dir) {\n return function (api) {\n var nodeChangeHandler = function (e) {\n var element = SugarElement.fromDom(e.element);\n api.setActive(getDirection(element) === dir);\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('ltr', {\n tooltip: 'Left to right',\n icon: 'ltr',\n onAction: function () {\n return editor.execCommand('mceDirectionLTR');\n },\n onSetup: getNodeChangeHandler(editor, 'ltr')\n });\n editor.ui.registry.addToggleButton('rtl', {\n tooltip: 'Right to left',\n icon: 'rtl',\n onAction: function () {\n return editor.execCommand('mceDirectionRTL');\n },\n onSetup: getNodeChangeHandler(editor, 'rtl')\n });\n };\n\n function Plugin () {\n global.add('directionality', function (editor) {\n register(editor);\n register$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var typeOf = 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 = 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(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq = function (f) {\n return { eq: f };\n };\n var tripleEq = eq(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq(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(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq(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(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf(x);\n var ty = typeOf(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 var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var apply = function (f) {\n return f();\n };\n var call = function (f) {\n f();\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf$1 = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf$1(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter(a1, function (x) {\n return !contains(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort$1 = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get(xs, 0);\n };\n var last = function (xs) {\n return get(xs, xs.length - 1);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t: t,\n f: f\n };\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var get$1 = function (obj, key) {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n var equal = function (a1, a2, eq) {\n if (eq === void 0) {\n eq = eqAny;\n }\n return eqRecord(eq).eq(a1, a2);\n };\n\n var isArray$1 = Array.isArray;\n var toArray = function (obj) {\n if (!isArray$1(obj)) {\n var array = [];\n for (var 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 var each$2 = function (o, cb, s) {\n var n, l;\n if (!o) {\n return false;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (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 (n in o) {\n if (o.hasOwnProperty(n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n }\n }\n return true;\n };\n var map$2 = function (array, callback) {\n var out = [];\n each$2(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$2 = function (a, f) {\n var o = [];\n each$2(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$1 = function (a, v) {\n if (a) {\n for (var i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (var i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (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 var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n var lTrim = blank(/^\\s+/g);\n var rTrim = blank(/\\s+$/g);\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (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: function (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: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (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: 'OSX',\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 var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var userAgent = navigator.userAgent;\n var platform$1 = detect$3();\n var browser = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser.isEdge();\n var fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;\n var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n var Env = {\n opera: browser.isOpera(),\n webkit: webkit,\n ie: browser.isIE() || browser.isEdge() ? browser.version.major : false,\n gecko: browser.isFirefox(),\n mac: os.isOSX() || os.isiOS(),\n iOS: deviceType.isiPad() || deviceType.isiPhone(),\n android: os.isAndroid(),\n contentEditable: true,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: true,\n range: window.getSelection && 'Range' in window,\n documentMode: browser.isIE() ? document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser.current,\n version: browser.version,\n isChrome: browser.isChrome,\n isEdge: browser.isEdge,\n isFirefox: browser.isFirefox,\n isIE: browser.isIE,\n isOpera: browser.isOpera,\n isSafari: browser.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 isOSX: os.isOSX,\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 var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray$1(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty$1 = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var create = function (s, p, root) {\n var self = this;\n var sp, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n var cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n var ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = noop;\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend = function (obj) {\n var exts = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n exts[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < exts.length; i++) {\n var ext = exts[i];\n for (var name_1 in ext) {\n if (ext.hasOwnProperty(name_1)) {\n var value = ext[name_1];\n if (value !== undefined) {\n obj[name_1] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$2(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve = function (n, o) {\n var i, l;\n o = o || window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode = function (s, d) {\n if (!s || is(s, 'array')) {\n return s;\n }\n return map$2(s.split(d || ','), trim$1);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim$1,\n isArray: isArray$1,\n is: is,\n toArray: toArray,\n makeMap: makeMap,\n each: each$2,\n map: map$2,\n grep: filter$2,\n inArray: indexOf$1,\n hasOwn: hasOwnProperty$1,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var toArray$1 = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is$1 = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq$2 = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var 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 var siblings = function (element) {\n var filterSelf = function (elements) {\n return filter(elements, function (x) {\n return !eq$2(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var prevSibling = function (element) {\n return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(toArray$1(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return toArray$1(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom.childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom.childNodes.length;\n };\n\n var getHead = function (doc) {\n var 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 var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getStyleContainer = function (dos) {\n return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each(children(element), function (rogue) {\n remove(rogue);\n });\n };\n var remove = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove(wrapper);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var 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 var get$2 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n var intoView = function (element, alignToTop) {\n var isSafari = detect$3().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 var get$3 = function (_win) {\n var win = _win === undefined ? window : _win;\n return Optional.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$2(SugarElement.fromDom(doc));\n return get$3(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n });\n };\n\n var isNodeType = function (type) {\n return function (node) {\n return !!node && node.nodeType === type;\n };\n };\n var isRestrictedNode = function (node) {\n return !!node && !Object.getPrototypeOf(node);\n };\n var isElement$1 = isNodeType(1);\n var matchNodeNames = function (names) {\n var lowercasedNames = names.map(function (s) {\n return s.toLowerCase();\n });\n return function (node) {\n if (node && node.nodeName) {\n var nodeName = node.nodeName.toLowerCase();\n return contains(lowercasedNames, nodeName);\n }\n return false;\n };\n };\n var matchStyleValues = function (name, values) {\n var items = values.toLowerCase().split(' ');\n return function (node) {\n var i, cssValue;\n if (isElement$1(node)) {\n for (i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var hasAttribute = function (attrName) {\n return function (node) {\n return isElement$1(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus = function (node) {\n return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll = function (node) {\n return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable = function (node) {\n return isElement$1(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$1(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 var isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n var isText$1 = isNodeType(3);\n var isComment$1 = isNodeType(8);\n var isDocument$1 = isNodeType(9);\n var isDocumentFragment$1 = isNodeType(11);\n var isBr = matchNodeNames(['br']);\n var isImg = matchNodeNames(['img']);\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var isTableCell = matchNodeNames([\n 'td',\n 'th'\n ]);\n var isMedia = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n\n var isSupported$1 = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom;\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$4 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$4(element, key));\n };\n var has$1 = function (element, key) {\n var dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove$1 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom.attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var internalSet = function (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 var setAll$1 = function (element, css) {\n var dom = element.dom;\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$5 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported$1(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n var reflow = function (e) {\n return e.dom.offsetWidth;\n };\n\n var browser$1 = detect$3().browser;\n var firstElement = function (nodes) {\n return find(nodes, isElement);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$1.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(function (elm) {\n return name(elm) === 'caption';\n }).bind(function (caption) {\n return firstElement(nextSiblings(caption)).map(function (body) {\n var bodyTop = body.dom.offsetTop;\n var captionTop = caption.dom.offsetTop;\n var captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n var hasChild = function (elm, child) {\n return elm.children && contains(elm.children, child);\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0, offsetParent;\n var doc = body.ownerDocument;\n var pos;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$5(SugarElement.fromDom(body), 'position') === 'static') {\n 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: x,\n y: y\n };\n }\n offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.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: x,\n y: y\n };\n };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module$1, undefined));\n var Promise = module$1.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$4 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$4,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (_opt) {\n return value(o);\n };\n var orThunk = function (_f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (_f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (_f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var generate = function (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 var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate };\n\n var comparison = 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 var unite = function (result) {\n return result.fold(identity, identity);\n };\n\n function 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 var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var 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 var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var sibling = function (scope, predicate) {\n var element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child$1(SugarElement.fromDom(element.parentNode), function (x) {\n return !eq$2(scope, x) && predicate(x);\n });\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is$1(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n var is = function (element, selector) {\n return is$1(element, selector);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var promise = function () {\n var bind = function (fn, thisArg) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n fn.apply(thisArg, args);\n };\n };\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n return setTimeout(fn, 1);\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var i = 0, len = this._deferreds.length; i < len; i++) {\n handle.call(this, this._deferreds[i]);\n }\n this._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n var doResolve = function (fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n };\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n var res = function (i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n };\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var requestAnimationFrameFunc = window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (cb) {\n window.setTimeout(cb, 0);\n };\n for (var i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer;\n var func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var StyleSheetLoader = function (documentOrShadowRoot, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var edos = SugarElement.fromDom(documentOrShadowRoot);\n var doc = documentOrOwner(edos);\n var maxLoadTime = settings.maxLoadTime || 5000;\n var _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\n var addStyle = function (element) {\n append(getStyleContainer(edos), element);\n };\n var removeStyle = function (id) {\n var styleContainer = getStyleContainer(edos);\n descendant(styleContainer, '#' + id).each(remove);\n };\n var getOrCreateState = function (url) {\n return get$1(loadedStates, url).getOrThunk(function () {\n return {\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n };\n });\n };\n var load = function (url, success, failure) {\n var link;\n var urlWithSuffix = Tools._addCacheSuffix(url);\n var state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n var resolve = function (callbacks, status) {\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\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 var passed = function () {\n return resolve(state.passed, 2);\n };\n var failed = function () {\n return resolve(state.failed, 3);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (Date.now() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = documentOrShadowRoot.styleSheets;\n var i = styleSheets.length;\n while (i--) {\n var styleSheet = styleSheets[i];\n var owner = styleSheet.ownerNode;\n if (owner && 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 var linkElem = SugarElement.fromTag('link', doc.dom);\n setAll(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n var startTime = Date.now();\n if (settings.contentCssCors) {\n set(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n addStyle(linkElem);\n set(linkElem, 'href', urlWithSuffix);\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var loadAll = function (urls, success, failure) {\n par$1(map(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unite));\n } else {\n success(parts.pass.map(unite));\n }\n });\n };\n var unload = function (url) {\n var urlWithSuffix = Tools._addCacheSuffix(url);\n get$1(loadedStates, urlWithSuffix).each(function (state) {\n var count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n var unloadAll = function (urls) {\n each(urls, function (url) {\n unload(url);\n });\n };\n return {\n load: load,\n loadAll: loadAll,\n unload: unload,\n unloadAll: unloadAll,\n _setReferrerPolicy: _setReferrerPolicy\n };\n };\n\n var create$1 = function () {\n var map = new WeakMap();\n var forElement = function (referenceElement, settings) {\n var root = getRootNode(referenceElement);\n var rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(function () {\n var sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement: forElement };\n };\n var instance = create$1();\n\n var DomTreeWalker = function () {\n function DomTreeWalker(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 DomTreeWalker.prototype.current = function () {\n return this.node;\n };\n DomTreeWalker.prototype.next = function (shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev = function (shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev2 = function (shallow) {\n this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (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 };\n DomTreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n };\n return DomTreeWalker;\n }();\n\n var 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 var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var 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 var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, always);\n return lookup.hasOwnProperty(name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock = lazyLookup(blocks);\n var isTable$1 = function (node) {\n return name(node) === 'table';\n };\n var isInline = function (node) {\n return isElement(node) && !isBlock(node);\n };\n var isBr$1 = function (node) {\n return isElement(node) && name(node) === 'br';\n };\n var isTextBlock = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell$1 = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, selector, isRoot).isSome();\n };\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n var isZwsp = function (char) {\n return char === zeroWidth;\n };\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var ZWSP = zeroWidth;\n var isZwsp$1 = isZwsp;\n var trim$2 = removeZwsp;\n\n var isElement$2 = isElement$1;\n var isText$2 = isText$1;\n var isCaretContainerBlock = function (node) {\n if (isText$2(node)) {\n node = node.parentNode;\n }\n return isElement$2(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$2(node) && isZwsp$1(node.data);\n };\n var isCaretContainer = function (node) {\n return isCaretContainerBlock(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var sibling;\n var doc = node.ownerDocument;\n var textNode = doc.createTextNode(ZWSP);\n var parentNode = node.parentNode;\n if (!before) {\n sibling = node.nextSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n sibling = node.previousSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!isText$1(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!isText$1(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock = function (blockName, node, before) {\n var doc = node.ownerDocument;\n var blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n var parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[0] === ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (isBogus(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (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('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock(range.startContainer);\n };\n\n var isContentEditableTrue$1 = isContentEditableTrue;\n var isContentEditableFalse$1 = isContentEditableFalse;\n var isBr$2 = isBr;\n var isText$3 = isText$1;\n var isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n var isTable$2 = matchNodeNames(['table']);\n var isCaretContainer$1 = isCaretContainer;\n var isCaretCandidate = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$3(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$2(node) || isTable$2(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return isElement$1(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$1(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$1(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$1(elm);\n }, false) !== true;\n };\n var isAtomic = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate = function (node, root) {\n return isCaretCandidate(node) && isInEditable(node, root);\n };\n\n var whiteSpaceRegExp$1 = /^[ \\t\\r\\n]*$/;\n var isWhitespaceText = function (text) {\n return whiteSpaceRegExp$1.test(text);\n };\n\n var hasWhitespacePreserveParent = function (node, rootNode) {\n var rootElement = SugarElement.fromDom(rootNode);\n var startNode = SugarElement.fromDom(node);\n return ancestor$2(startNode, 'pre,code', curry(eq$2, rootElement));\n };\n var isWhitespace = function (node, rootNode) {\n return isText$1(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false;\n };\n var isNamedAnchor = function (node) {\n return isElement$1(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n var isContent = function (node, rootNode) {\n return isCaretCandidate(node) && isWhitespace(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = hasAttribute('data-mce-bookmark');\n var isBogus$1 = hasAttribute('data-mce-bogus');\n var isBogusAll$1 = hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode, skipBogus) {\n var node, brCount = 0;\n if (isContent(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n var walker = new DomTreeWalker(node, targetNode);\n do {\n if (skipBogus) {\n if (isBogusAll$1(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(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent(node, targetNode)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom, skipBogus);\n };\n\n var isSpan = function (node) {\n return node.nodeName.toLowerCase() === 'span';\n };\n var isInlineContent = function (node, root) {\n return isNonNullable(node) && (isContent(node, root) || isInline(SugarElement.fromDom(node)));\n };\n var surroundedByInlineContent = function (node, root) {\n var prev = new DomTreeWalker(node, root).prev(false);\n var next = new DomTreeWalker(node, root).next(false);\n var prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n var nextIsInline = isUndefined(next) || isInlineContent(next, root);\n return prevIsInline && nextIsInline;\n };\n var isBookmarkNode = function (node) {\n return isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var isKeepTextNode = function (node, root) {\n return isText$1(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n };\n var isKeepElement = function (node) {\n return isElement$1(node) ? node.childNodes.length > 0 : false;\n };\n var isDocument$2 = function (node) {\n return isDocumentFragment$1(node) || isDocument$1(node);\n };\n var trimNode = function (dom, node, root) {\n var rootNode = root || node;\n if (isElement$1(node) && isBookmarkNode(node)) {\n return node;\n }\n var children = node.childNodes;\n for (var i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], rootNode);\n }\n if (isElement$1(node)) {\n var currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode(currentChildren[0])) {\n node.parentNode.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument$2(node) && !isContent(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n dom.remove(node);\n }\n return node;\n };\n\n var makeMap$1 = Tools.makeMap;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var 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 var baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n var reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n var 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 var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (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 };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (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 };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$1(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 var decode = function (text) {\n return text.replace(entityRegExp, function (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 };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$3 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray = Tools.inArray;\n var split = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split(children);\n }\n var names = split(name);\n ni = names.length;\n while (ni--) {\n attributesOrder = split([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[names[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n var names = split(name);\n ni = names.length;\n var attrs = split(attributes);\n while (ni--) {\n schemaItem = schema[names[ni]];\n for (i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[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 html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$3(split(html4PhrasingContent), function (name) {\n add(name, '', phrasingContent);\n });\n html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$3(split(html4BlockContent), function (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 allowfullscreen loading');\n }\n each$3(split('a form meter progress dfn'), function (name) {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n mapCache[type] = schema;\n return schema;\n };\n var compileElementMap = function (value, mode) {\n var styles;\n if (value) {\n styles = {};\n if (typeof value === 'string') {\n value = { '*': value };\n }\n each$3(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\n });\n }\n return styles;\n };\n var Schema = function (settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$1(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n var schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n var validStyles = compileElementMap(settings.valid_styles);\n var invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n var validClasses = compileElementMap(settings.valid_classes, 'map');\n var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n var nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n var nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', shortEndedElementsMap);\n var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', shortEndedElementsMap);\n var 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 var 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 var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$3((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n var validElementsArr = split(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElementsArr.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElementsArr[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: 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$1(globalAttributes, function (value, key) {\n attributes[key] = value;\n });\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n 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 (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\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 element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$3(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$3(split(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$1({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$3(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$1({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var 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 mapCache[settings.schema] = null;\n if (validChildren) {\n each$3(split(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$3(split(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$3(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$3(split('strong/b em/i'), function (item) {\n var items = split(item, '/');\n elements[items[1]].outputName = items[0];\n });\n }\n each$3(split('ol ul sub sup blockquote span font a table tbody strong em b i'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$3(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$3(split('span'), function (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$3({\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 }, function (parents, item) {\n if (elements[item]) {\n elements[item].parentsRequired = split(parents);\n }\n });\n if (settings.invalid_elements) {\n each$3(explode$1(settings.invalid_elements), function (item) {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n var getValidStyles = function () {\n return validStyles;\n };\n var getInvalidStyles = function () {\n return invalidStyles;\n };\n var getValidClasses = function () {\n return validClasses;\n };\n var getBoolAttrs = function () {\n return boolAttrMap;\n };\n var getBlockElements = function () {\n return blockElementsMap;\n };\n var getTextBlockElements = function () {\n return textBlockElementsMap;\n };\n var getTextInlineElements = function () {\n return textInlineElementsMap;\n };\n var getShortEndedElements = function () {\n return shortEndedElementsMap;\n };\n var getSelfClosingElements = function () {\n return selfClosingElementsMap;\n };\n var getNonEmptyElements = function () {\n return nonEmptyElementsMap;\n };\n var getMoveCaretBeforeOnEnterElements = function () {\n return moveCaretBeforeOnEnterElementsMap;\n };\n var getWhiteSpaceElements = function () {\n return whiteSpaceElementsMap;\n };\n var getSpecialElements = function () {\n return specialElements;\n };\n var isValidChild = function (name, child) {\n var parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n var isValid = function (name, attr) {\n var attrPatterns, i;\n var rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(name)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n var getCustomElements = function () {\n return customElementsMap;\n };\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n };\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var Styles = function (settings, schema) {\n var _this = this;\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var validStyles;\n var invalidStyles;\n var invisibleChar = zeroWidth;\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n var encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || _this;\n var compress = function (prefix, suffix, noJoin) {\n var top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n var right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n var bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n var left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n 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 var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (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 var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (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 var 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, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n 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(rgbRegExp, toHex);\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: function (styles, elementName) {\n var css = '';\n var serializeStyles = function (name) {\n var value;\n var styleList = validStyles[name];\n if (styleList) {\n for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) {\n name = styleList[i_1];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n each$1(styles, function (value, name) {\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var deprecated = {\n keyLocation: 1,\n layerX: 1,\n layerY: 1,\n returnValue: 1,\n webkitMovementX: 1,\n webkitMovementY: 1,\n keyIdentifier: 1,\n mozPressure: 1\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n };\n var returnFalse = never;\n var returnTrue = always;\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var isMouseEvent = function (event) {\n return mouseEventRe.test(event.type);\n };\n var fix = function (originalEvent, data) {\n var name;\n var event = data || {};\n for (name in originalEvent) {\n if (!deprecated[name]) {\n event[name] = originalEvent[name];\n }\n }\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n if (event.composedPath) {\n event.composedPath = function () {\n return originalEvent.composedPath();\n };\n }\n if (originalEvent && isMouseEvent(originalEvent) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n var eventDoc = event.target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n event.preventDefault = function () {\n event.defaultPrevented = true;\n event.isDefaultPrevented = returnTrue;\n if (originalEvent) {\n if (originalEvent.preventDefault) {\n originalEvent.preventDefault();\n } else {\n originalEvent.returnValue = false;\n }\n }\n };\n event.stopPropagation = function () {\n event.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n if (originalEvent) {\n if (originalEvent.stopPropagation) {\n originalEvent.stopPropagation();\n } else {\n originalEvent.cancelBubble = true;\n }\n }\n };\n event.stopImmediatePropagation = function () {\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n if (hasIsDefaultPrevented(event) === false) {\n event.isDefaultPrevented = event.defaultPrevented === true ? returnTrue : returnFalse;\n event.isPropagationStopped = event.cancelBubble === true ? returnTrue : returnFalse;\n event.isImmediatePropagationStopped = returnFalse;\n }\n if (typeof event.metaKey === 'undefined') {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\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 var EventUtils = function () {\n function EventUtils() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasMouseEnterLeave = 'onmouseenter' in document.documentElement;\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n EventUtils.prototype.bind = function (target, names, callback, scope) {\n var self = this;\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = window;\n var defaultNativeHandler = function (evt) {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\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 var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = 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.hasMouseEnterLeave) {\n fakeName = self.mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current = evt.currentTarget;\n var related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n self.executeHandlers(evt, id);\n }\n };\n }\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(evt, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope: 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: scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n };\n EventUtils.prototype.unbind = function (target, names, callback) {\n var callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var id = target[this.expando];\n if (id) {\n eventMap = this.events[id];\n if (names) {\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\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$1(eventMap, function (callbackList, name) {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (name in eventMap) {\n if (has(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 EventUtils.prototype.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var event = fix(null, args);\n event.type = name;\n event.target = target;\n do {\n 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 EventUtils.prototype.clean = function (target) {\n var i, children;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\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 children = target.getElementsByTagName('*');\n 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 EventUtils.prototype.destroy = function () {\n this.events = {};\n };\n EventUtils.prototype.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n EventUtils.prototype.executeHandlers = function (evt, id) {\n var container = this.events[id];\n var callbackList = container && container[evt.type];\n if (callbackList) {\n for (var i = 0, l = callbackList.length; i < l; i++) {\n var 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 EventUtils.Event = new EventUtils();\n return EventUtils;\n }();\n\n var support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$3, expando = 'sizzle' + -new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$2 = arr.indexOf || function (elem) {\n var i = 0, len = this.length;\n for (; i < len; i++) {\n if (this[i] === elem) {\n return i;\n }\n }\n return -1;\n }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n var high = '0x' + escaped - 65536;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n };\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document$1) {\n setDocument(context);\n }\n context = context || document$1;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr.exec(selector)) {\n if (m = match[1]) {\n if (nodeType === 9) {\n elem = context.getElementById(m);\n if (elem && elem.parentNode) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$3(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n nid = old = expando;\n newContext = context;\n newSelector = nodeType === 9 && selector;\n if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n groups = tokenize(selector);\n if (old = context.getAttribute('id')) {\n nid = old.replace(rescape, '\\\\$&');\n } else {\n context.setAttribute('id', nid);\n }\n nid = '[id=\\'' + nid + '\\'] ';\n i = groups.length;\n while (i--) {\n groups[i] = nid + toSelector(groups[i]);\n }\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n newSelector = groups.join(',');\n }\n if (newSelector) {\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n } finally {\n if (!old) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n return select(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document$1 || doc.nodeType !== 9 || !doc.documentElement) {\n return document$1;\n }\n document$1 = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains$3 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === doc || a.ownerDocument === preferredDoc && contains$3(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains$3(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf$2.call(sortInput, a) - indexOf$2.call(sortInput, b) : 0;\n }\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n if (!aup || !bup) {\n return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$2.call(sortInput, a) - indexOf$2.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document$1, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document$1) {\n setDocument(context);\n }\n return contains$3(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf$2.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n input[0] = null;\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document$1.activeElement && (!document$1.hasFocus || document$1.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n each([\n 'radio',\n 'checkbox',\n 'file',\n 'password',\n 'image'\n ], function (i) {\n Expr.pseudos[i] = createInputPseudo(i);\n });\n each([\n 'submit',\n 'reset'\n ], function (i) {\n Expr.pseudos[i] = createButtonPseudo(i);\n });\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if (!Expr.filter.hasOwnProperty(type)) {\n continue;\n }\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$2.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf$2.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n checkContext = null;\n return ret;\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n if (outermost) {\n outermostContext = context !== document$1 && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push.apply(results, setMatched);\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n return unmatched;\n };\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n compile = Sizzle.compile = function (selector, match) {\n var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n cached.selector = selector;\n }\n return cached;\n };\n select = Sizzle.select = function (selector, context, results, seed) {\n var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || [];\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n selector = selector.slice(tokens.shift().value.length);\n }\n i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var doc = document;\n var push$1 = Array.prototype.push;\n var slice$1 = Array.prototype.slice;\n var rquickExpr$1 = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event = EventUtils.Event;\n var skipUniques = Tools.makeMap('children,contents,next,prev');\n var isDefined = function (obj) {\n return typeof obj !== 'undefined';\n };\n var isString$1 = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment = function (html, fragDoc) {\n fragDoc = fragDoc || doc;\n var container = fragDoc.createElement('div');\n var frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n var node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString$1(sourceItem)) {\n sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap$1 = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQueryConstructor = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray$1 = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp$2 = /^\\s*|\\s*$/g;\n var trim$3 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, '');\n };\n var each$4 = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep = function (array, callback) {\n var out = [];\n each$4(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n constructor: DomQueryConstructor,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = document;\n }\n if (isString$1(selector)) {\n self.selector = selector;\n if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n match = [\n null,\n selector,\n null\n ];\n } else {\n match = rquickExpr$1.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment(selector, getElementDocument(context)).firstChild;\n while (node) {\n push$1.call(self, node);\n node = node.nextSibling;\n }\n } else {\n node = getElementDocument(context).getElementById(match[2]);\n if (!node) {\n return self;\n }\n if (node.id !== match[2]) {\n return self.find(selector);\n }\n self.length = 1;\n self[0] = node;\n }\n } else {\n return DomQuery(context).find(selector);\n }\n } else {\n this.add(selector, false);\n }\n return self;\n },\n toArray: function () {\n return Tools.toArray(this);\n },\n add: function (items, sort) {\n var self = this;\n var nodes, i;\n if (isString$1(items)) {\n return self.add(DomQuery(items));\n }\n if (sort !== false) {\n nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n self.length = nodes.length;\n for (i = 0; i < nodes.length; i++) {\n self[i] = nodes[i];\n }\n } else {\n push$1.apply(self, DomQuery.makeArray(items));\n }\n return self;\n },\n attr: function (name, value) {\n var self = this;\n var hook;\n if (typeof name === 'object') {\n each$4(name, function (name, value) {\n self.attr(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n var hook;\n if (this.nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n if (value === null) {\n this.removeAttribute(name, 2);\n } else {\n this.setAttribute(name, value, 2);\n }\n }\n });\n } else {\n if (self[0] && self[0].nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n return hook.get(self[0], name);\n }\n if (booleanMap[name]) {\n return self.prop(name) ? name : undefined;\n }\n value = self[0].getAttribute(name, 2);\n if (value === null) {\n value = undefined;\n }\n }\n return value;\n }\n return self;\n },\n removeAttr: function (name) {\n return this.attr(name, null);\n },\n prop: function (name, value) {\n var self = this;\n name = propFix[name] || name;\n if (typeof name === 'object') {\n each$4(name, function (name, value) {\n self.prop(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n if (this.nodeType === 1) {\n this[name] = value;\n }\n });\n } else {\n if (self[0] && self[0].nodeType && name in self[0]) {\n return self[0][name];\n }\n return value;\n }\n return self;\n },\n css: function (name, value) {\n var self = this;\n var elm, hook;\n var camel = function (name) {\n return name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n };\n var dashed = function (name) {\n return name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n };\n if (typeof name === 'object') {\n each$4(name, function (name, value) {\n self.css(name, value);\n });\n } else {\n if (isDefined(value)) {\n name = camel(name);\n if (typeof value === 'number' && !numericCssMap[name]) {\n value = value.toString() + 'px';\n }\n self.each(function () {\n var style = this.style;\n hook = cssHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n try {\n this.style[cssFix[name] || name] = value;\n } catch (ex) {\n }\n if (value === null || value === '') {\n if (style.removeProperty) {\n style.removeProperty(dashed(name));\n } else {\n style.removeAttribute(name);\n }\n }\n });\n } else {\n elm = self[0];\n hook = cssHooks[name];\n if (hook && hook.get) {\n return hook.get(elm);\n }\n if (elm.ownerDocument.defaultView) {\n try {\n return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n } catch (ex) {\n return undefined;\n }\n } else if (elm.currentStyle) {\n return elm.currentStyle[camel(name)];\n } else {\n return '';\n }\n }\n }\n return self;\n },\n remove: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n Event.clean(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n return this;\n },\n empty: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n }\n return this;\n },\n html: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n try {\n while (i--) {\n self[i].innerHTML = value;\n }\n } catch (ex) {\n DomQuery(self[i]).empty().append(value);\n }\n return self;\n }\n return self[0] ? self[0].innerHTML : '';\n },\n text: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n while (i--) {\n if ('innerText' in self[i]) {\n self[i].innerText = value;\n } else {\n self[0].textContent = value;\n }\n }\n return self;\n }\n return self[0] ? self[0].innerText || self[0].textContent : '';\n },\n append: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.appendChild(node);\n }\n });\n },\n prepend: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.insertBefore(node, this.firstChild);\n }\n }, true);\n },\n before: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this);\n });\n }\n return self;\n },\n after: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this.nextSibling);\n }, true);\n }\n return self;\n },\n appendTo: function (val) {\n DomQuery(val).append(this);\n return this;\n },\n prependTo: function (val) {\n DomQuery(val).prepend(this);\n return this;\n },\n replaceWith: function (content) {\n return this.before(content).remove();\n },\n wrap: function (content) {\n return wrap$1(this, content);\n },\n wrapAll: function (content) {\n return wrap$1(this, content, true);\n },\n wrapInner: function (content) {\n this.each(function () {\n DomQuery(this).contents().wrapAll(content);\n });\n return this;\n },\n unwrap: function () {\n return this.parent().each(function () {\n DomQuery(this).replaceWith(this.childNodes);\n });\n },\n clone: function () {\n var result = [];\n this.each(function () {\n result.push(this.cloneNode(true));\n });\n return DomQuery(result);\n },\n addClass: function (className) {\n return this.toggleClass(className, true);\n },\n removeClass: function (className) {\n return this.toggleClass(className, false);\n },\n toggleClass: function (className, state) {\n var self = this;\n if (typeof className !== 'string') {\n return self;\n }\n if (className.indexOf(' ') !== -1) {\n each$4(className.split(' '), function () {\n self.toggleClass(this, state);\n });\n } else {\n self.each(function (index, node) {\n var classState = hasClass(node, className);\n if (classState !== state) {\n var existingClassName = node.className;\n if (classState) {\n node.className = trim$3((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n } else {\n node.className += existingClassName ? ' ' + className : className;\n }\n }\n });\n }\n return self;\n },\n hasClass: function (className) {\n return hasClass(this[0], className);\n },\n each: function (callback) {\n return each$4(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event.fire(this, name.type, name);\n } else {\n Event.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return DomQuery(slice$1.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n find: function (selector) {\n var i, l;\n var ret = [];\n for (i = 0, l = this.length; i < l; i++) {\n DomQuery.find(selector, this[i], ret);\n }\n return DomQuery(ret);\n },\n filter: function (selector) {\n if (typeof selector === 'function') {\n return DomQuery(grep(this.toArray(), function (item, i) {\n return selector(i, item);\n }));\n }\n return DomQuery(DomQuery.filter(selector, this.toArray()));\n },\n closest: function (selector) {\n var result = [];\n if (selector instanceof DomQuery) {\n selector = selector[0];\n }\n this.each(function (i, node) {\n while (node) {\n if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n result.push(node);\n break;\n } else if (node === selector) {\n result.push(node);\n break;\n }\n node = node.parentNode;\n }\n });\n return DomQuery(result);\n },\n offset: function (offset) {\n var elm, doc, docElm;\n var x = 0, y = 0, pos;\n if (!offset) {\n elm = this[0];\n if (elm) {\n doc = elm.ownerDocument;\n docElm = doc.documentElement;\n if (elm.getBoundingClientRect) {\n pos = elm.getBoundingClientRect();\n x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n }\n }\n return {\n left: x,\n top: y\n };\n }\n return this.css(offset);\n },\n push: push$1,\n sort: Array.prototype.sort,\n splice: Array.prototype.splice\n };\n Tools.extend(DomQueryConstructor, {\n extend: Tools.extend,\n makeArray: function (object) {\n if (isWindow(object) || object.nodeType) {\n return [object];\n }\n return Tools.toArray(object);\n },\n inArray: inArray$1,\n isArray: Tools.isArray,\n each: each$4,\n trim: trim$3,\n grep: grep,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling$1 = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$4({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling$1(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (selector) {\n return wrappedResult.filter(selector);\n }\n return wrappedResult;\n };\n });\n each$4({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling$1(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling$1(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (filter) {\n return wrappedResult.filter(filter);\n }\n return wrappedResult;\n };\n });\n DomQueryConstructor.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn;\n DomQueryConstructor.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n DomQueryConstructor.attrHooks = attrHooks;\n DomQueryConstructor.cssHooks = cssHooks;\n var DomQuery = DomQueryConstructor;\n\n var each$5 = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var setupAttrHooks = function (styles, settings, getContext) {\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n var attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n if (value !== null && typeof value === 'string') {\n $elm.removeAttr('style');\n $elm.css(styles.parse(value));\n } else {\n $elm.attr('style', value);\n }\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n var DOMUtils = function (doc, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var addedStyles = {};\n var win = window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n return elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n };\n var $$ = function (elm) {\n return $(typeof elm === 'string' ? get(elm) : elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n var originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n var hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n } else {\n var clone_1 = doc.createElement(node.nodeName);\n each$5(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n var getPos$1 = function (elm, rootElm) {\n return getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = isString(name) ? $$(elm).css(name, value) : $$(elm).css(name);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (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 var getRect = function (elm) {\n elm = get(elm);\n var pos = getPos$1(elm);\n var size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment$1(node)) {\n break;\n }\n if (!selector || typeof selector === 'function' && 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 var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$5(node, function (elm, i) {\n if (elm) {\n result.push(func.call(scope, typeof elm === 'string' ? get(elm) : elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$5(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\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 var loadCSS = function (urls) {\n if (!urls) {\n urls = '';\n }\n each(urls.split(','), function (url) {\n files[url] = true;\n styleSheetLoader.load(url, noop);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return isElement$1(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent = referenceNode.parentNode;\n var nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$5(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$5(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n 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 }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isNonEmptyElement = function (node) {\n if (isElement$1(node)) {\n var 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 var isEmpty = function (node, elements) {\n var type, name, brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n node = node.firstChild;\n if (node) {\n var walker = new DomTreeWalker(node, node.parentNode);\n var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n do {\n type = node.nodeType;\n if (isElement$1(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var range = createRng();\n var beforeFragment;\n var afterFragment;\n var parentNode;\n if (parentElm && splitElm) {\n range.setStart(parentElm.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(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode = parentElm.parentNode;\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 }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n var output = events.bind(target, name, func, scope || self);\n return output;\n };\n var unbind = function (target, name, func) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var 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 var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && isElement$1(node)) {\n var 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 var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents.length > 0) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n each$1(files, function (_, url) {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos$1,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n var attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n var DOM = DOMUtils.DOM;\n var each$6 = Tools.each, grep$2 = Tools.grep;\n var QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var ScriptLoader = function () {\n function ScriptLoader(settings) {\n if (settings === void 0) {\n settings = {};\n }\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = 0;\n this.settings = settings;\n }\n ScriptLoader.prototype._setReferrerPolicy = function (referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n };\n ScriptLoader.prototype.loadScript = function (url, success, failure) {\n var dom = DOM;\n var elm;\n var cleanup = function () {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n var done = function () {\n cleanup();\n success();\n };\n var error = function () {\n cleanup();\n if (isFunction(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n var 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 ScriptLoader.prototype.isDone = function (url) {\n return this.states[url] === LOADED;\n };\n ScriptLoader.prototype.markDone = function (url) {\n this.states[url] = LOADED;\n };\n ScriptLoader.prototype.add = function (url, success, scope, failure) {\n var state = this.states[url];\n this.queue.push(url);\n if (state === undefined) {\n this.states[url] = QUEUED;\n }\n if (success) {\n if (!this.scriptLoadedCallbacks[url]) {\n this.scriptLoadedCallbacks[url] = [];\n }\n this.scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n ScriptLoader.prototype.load = function (url, success, scope, failure) {\n return this.add(url, success, scope, failure);\n };\n ScriptLoader.prototype.remove = function (url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n };\n ScriptLoader.prototype.loadQueue = function (success, scope, failure) {\n this.loadScripts(this.queue, success, scope, failure);\n };\n ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) {\n var self = this;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$6(self.scriptLoadedCallbacks[url], function (callback) {\n if (isFunction(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n self.scriptLoadedCallbacks[url] = undefined;\n };\n self.queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n var loadScripts = function () {\n var loadingScripts = grep$2(scripts);\n scripts.length = 0;\n each$6(loadingScripts, function (url) {\n if (self.states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (self.states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (self.states[url] !== LOADING) {\n self.states[url] = LOADING;\n self.loading++;\n self.loadScript(url, function () {\n self.states[url] = LOADED;\n self.loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n self.states[url] = FAILED;\n self.loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!self.loading) {\n var notifyCallbacks = self.queueLoadedCallbacks.slice(0);\n self.queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n return ScriptLoader;\n }();\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var isRaw = function (str) {\n return isObject(str) && has(str, 'raw');\n };\n var isTokenised = function (str) {\n return isArray(str) && str.length > 1;\n };\n var data = {};\n var currentCode = Cell('en');\n var getLanguageData = function () {\n return get$1(data, currentCode.get());\n };\n var getData = function () {\n return map$1(data, function (value) {\n return __assign({}, value);\n });\n };\n var setCode = function (newCode) {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n var getCode = function () {\n return currentCode.get();\n };\n var add = function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$1(items, function (translation, name) {\n langData[name.toLowerCase()] = translation;\n });\n };\n var translate = function (text) {\n var langData = getLanguageData().getOr({});\n var toString = function (obj) {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || text === undefined;\n };\n var getLangData = function (text) {\n var textstr = toString(text);\n return get$1(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n var removeContext = function (str) {\n return str.replace(/{context:\\w+}$/, '');\n };\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n var values_1 = text.slice(1);\n var substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return has(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n var isRtl = function () {\n return getLanguageData().bind(function (items) {\n return get$1(items, '_dir');\n }).exists(function (dir) {\n return dir === 'rtl';\n });\n };\n var hasCode = function (code) {\n return has(data, code);\n };\n var I18n = {\n getData: getData,\n setCode: setCode,\n getCode: getCode,\n add: add,\n translate: translate,\n isRtl: isRtl,\n hasCode: hasCode\n };\n\n var AddOnManager = function () {\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var runListeners = function (name, state) {\n var matchedListeners = filter(_listeners, function (listener) {\n return listener.name === name && listener.state === state;\n });\n each(matchedListeners, function (listener) {\n return listener.callback();\n });\n };\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n if (AddOnManager.languageLoad !== false) {\n waitFor(name, function () {\n var language = I18n.getCode();\n var wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }, 'loaded');\n }\n };\n var add = function (id, addOn, dependencies) {\n var addOnConstructor = addOn;\n items.push(addOnConstructor);\n lookup[id] = {\n instance: addOnConstructor,\n dependencies: dependencies\n };\n runListeners(id, 'added');\n return addOnConstructor;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = urls[pluginName];\n each(scripts, function (script) {\n ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n });\n };\n var loadDependencies = function (name, addOnUrl, success, scope) {\n var deps = dependencies(name);\n each(deps, function (dep) {\n var newUrl = createUrl(addOnUrl, dep);\n load(newUrl.resource, newUrl, undefined, undefined);\n });\n if (success) {\n if (scope) {\n success.call(scope);\n } else {\n success.call(ScriptLoader);\n }\n }\n };\n var load = function (name, addOnUrl, success, scope, failure) {\n if (urls[name]) {\n return;\n }\n var urlString = typeof addOnUrl === 'string' ? 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 var done = function () {\n runListeners(name, 'loaded');\n loadDependencies(name, addOnUrl, success, scope);\n };\n if (lookup[name]) {\n done();\n } else {\n ScriptLoader.ScriptLoader.add(urlString, done, scope, failure);\n }\n };\n var waitFor = function (name, callback, state) {\n if (state === void 0) {\n state = 'added';\n }\n if (has(lookup, name) && state === 'added') {\n callback();\n } else if (has(urls, name) && state === 'loaded') {\n callback();\n } else {\n _listeners.push({\n name: name,\n state: state,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer === null) {\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var read = function (element, attr) {\n var value = get$4(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$1 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove$1(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$1(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$3 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$2(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$6(element);\n if (classList.length === 0) {\n remove$1(element, 'class');\n }\n };\n var remove$4 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has$2 = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var root = SugarElement.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child(start, rng.startOffset).getOr(start);\n var closest = closest$1(newStart, selector, function (n) {\n return eq$2(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Optional.some(get$4(c, property));\n } else {\n return Optional.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement(elem) && has$2(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = SugarElement.fromDom(editor.getBody());\n return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = SugarElement.fromDom(editor.getBody());\n var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each(markers, function (m) {\n var uid = get$4(m, dataAnnotationId());\n var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup = function (editor, _registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: Cell(Optional.none())\n };\n };\n var withCallbacks = function (name, f) {\n updateCallbacks(name, function (data) {\n f(data);\n return data;\n });\n };\n var updateCallbacks = function (name, f) {\n var callbackMap = changeCallbacks.get();\n var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\n var outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n var fireCallbacks = function (name, uid, elements) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map(elements, function (elem) {\n return elem.dom;\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last$2(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort$1(keys(callbackMap));\n each(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.set(Optional.none());\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!prev.is(uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(Optional.some(uid));\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', function () {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', function () {\n onNodeChange.throttle();\n });\n var addListener = function (name, f) {\n updateCallbacks(name, function (data) {\n return {\n previous: data.previous,\n listeners: data.listeners.concat([f])\n };\n });\n };\n return { addListener: addListener };\n };\n\n var setup$1 = function (editor, registry) {\n var identifyParserNode = function (span) {\n return Optional.from(span.attr(dataAnnotation())).bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each(spans, function (span) {\n identifyParserNode(span).each(function (settings) {\n if (settings.persistent === false) {\n span.unwrap();\n }\n });\n });\n });\n });\n };\n\n var create$2 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return annotations.hasOwnProperty(name) ? Optional.from(annotations[name]).map(function (a) {\n return a.settings;\n }) : Optional.none();\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var unique = 0;\n var generate$1 = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add$4 = function (element, classes) {\n each(classes, function (x) {\n add$3(element, x);\n });\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n var get$7 = function (element) {\n return element.dom.innerHTML;\n };\n var set$1 = function (element, content) {\n var owner$1 = owner(element);\n var docDom = owner$1.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append(element, fragment);\n };\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n\n var TextWalker = function (startNode, rootNode, isBoundary) {\n if (isBoundary === void 0) {\n isBoundary = never;\n }\n var walker = new DomTreeWalker(startNode, rootNode);\n var walk = function (direction) {\n var next;\n do {\n next = walker[direction]();\n } while (next && !isText$1(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$1);\n };\n return {\n current: function () {\n return Optional.from(walker.current()).filter(isText$1);\n },\n next: function () {\n return walk('next');\n },\n prev: function () {\n return walk('prev');\n },\n prev2: function () {\n return walk('prev2');\n }\n };\n };\n\n var TextSeeker = function (dom, isBoundary) {\n var isBlockBoundary = isBoundary ? isBoundary : function (node) {\n return dom.isBlock(node) || isBr(node) || isContentEditableFalse(node);\n };\n var walk = function (node, offset, walker, process) {\n if (isText$1(node)) {\n var 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(function (next) {\n return walk(next.container, next.offset, walker, process);\n });\n };\n var backwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.prev().map(function (prev) {\n return {\n container: prev,\n offset: prev.length\n };\n });\n }, process).getOrNull();\n };\n var forwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.next().map(function (next) {\n return {\n container: next,\n offset: 0\n };\n });\n }, process).getOrNull();\n };\n return {\n backwards: backwards,\n forwards: forwards\n };\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var round = Math.round;\n var clone$2 = function (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(rect.left),\n top: round(rect.top),\n bottom: round(rect.bottom),\n right: round(rect.right),\n width: round(rect.width),\n height: round(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone$2(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 var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove = function (rect1, rect2) {\n var 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 var isBelow = function (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 var containsXY = function (rect, clientX, clientY) {\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n };\n\n var getSelectedNode = function (range) {\n var startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n var getNode = function (container, offset) {\n if (container.nodeType === 1 && container.hasChildNodes()) {\n if (offset >= container.childNodes.length) {\n offset = container.childNodes.length - 1;\n }\n container = container.childNodes[offset];\n }\n return container;\n };\n\n var 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 var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n var isElement$3 = isElement$1;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = matchStyleValues('display', 'block table');\n var isFloated = matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = isText$1;\n var isBr$3 = isBr;\n var nodeIndex = DOMUtils.nodeIndex;\n var resolveIndex = getNode;\n var createRange = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils.DOM.createRng();\n };\n var isWhiteSpace = function (chr) {\n return chr && /[\\r\\n\\t ]/.test(chr);\n };\n var isRange = function (rng) {\n return !!rng.setStart && !!rng.setEnd;\n };\n var isHiddenWhiteSpaceRange = function (range) {\n var container = range.startContainer;\n var offset = range.startOffset;\n var text;\n if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && isText$1(container)) {\n text = container.data;\n if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange(doc);\n var nbsp$1 = doc.createTextNode(nbsp);\n var parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n var clientRect = clone$2(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && isText$1(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect = function (item) {\n var clientRect;\n var clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$2(clientRects[0]);\n } else {\n clientRect = clone$2(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 getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var beforeNode, node;\n var addUniqueAndValidRect = function (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 var addCharacterOffset = function (container, offset) {\n var range = createRange(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\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(range), false));\n return clientRects;\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(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(range), true));\n }\n }\n };\n if (isText$4(caretPosition.container())) {\n addCharacterOffset(caretPosition.container(), caretPosition.offset());\n return clientRects;\n }\n if (isElement$3(caretPosition.container())) {\n if (caretPosition.isAtEnd()) {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n }\n } else {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n return clientRects;\n }\n beforeNode = resolveIndex(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(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n }\n }\n }\n return clientRects;\n };\n var CaretPosition = function (container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range = createRange(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n var getClientRects = function () {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n var isVisible = function () {\n return getClientRects().length > 0;\n };\n var isEqual = function (caretPosition) {\n return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n };\n var getNode = function (before) {\n return resolveIndex(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n };\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\n };\n CaretPosition.isAtStart = function (pos) {\n return pos ? pos.isAtStart() : false;\n };\n CaretPosition.isAtEnd = function (pos) {\n return pos ? pos.isAtEnd() : false;\n };\n CaretPosition.isTextPosition = function (pos) {\n return pos ? isText$1(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n\n var trimEmptyTextNode = function (dom, node) {\n if (isText$1(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode(dom, node.previousSibling);\n trimEmptyTextNode(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Optional.from(frag.firstChild);\n var lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (isDocumentFragment$1(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isText$5 = isText$1;\n var isBogus$2 = isBogus;\n var nodeIndex$1 = DOMUtils.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus$2(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, function (result, node) {\n if (isBogus$2(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n var normalizedTextOffset = function (node, offset) {\n while (node = node.previousSibling) {\n if (!isText$5(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal$1 = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal$1(node), node);\n nodes = nodes.slice(0, index + 1);\n var numTextFragments = reduce(nodes, function (result, node, i) {\n if (isText$5(node) && isText$5(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$2(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal$1(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$5(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$3 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$5(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n 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 parents = parentsUntil(root, container);\n parents = filter$2(parents, not(isBogus));\n path = path.concat(map$2(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = filter$2(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = filter$2(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$5(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$5(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$5(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n var resolve$1 = function (root, path) {\n var offset;\n if (!path) {\n return null;\n }\n var parts = path.split(',');\n var paths = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n var container = reduce(paths, function (result, value) {\n var 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$5(container)) {\n if (offset === 'after') {\n offset = nodeIndex$1(container) + 1;\n } else {\n offset = nodeIndex$1(container);\n }\n return CaretPosition(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var isContentEditableFalse$2 = isContentEditableFalse;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && isText$1(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (isText$1(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n 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 (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n return bookmark;\n };\n var findIndex$2 = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (isElement$1(container) && container.nodeName === 'TR') {\n 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 rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint(rng, true);\n moveEndPoint(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (isElement$1(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (isText$1(node) && isCaretContainerBlock(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n }\n };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$2(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex$2(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$3(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$3(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n id: id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: true\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(trim$2, 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 var getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n var DOM$1 = DOMUtils.DOM;\n var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large'));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', always, 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getIconPackName = function (editor) {\n return editor.getParam('icons', '', 'string');\n };\n var getIconsUrl = function (editor) {\n return editor.getParam('icons_url', '', 'string');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getReferrerPolicy = function (editor) {\n return editor.getParam('referrer_policy', '', 'string');\n };\n var getLanguageCode = function (editor) {\n return editor.getParam('language', 'en', 'string');\n };\n var getLanguageUrl = function (editor) {\n return editor.getParam('language_url', '', 'string');\n };\n var shouldIndentUseMargin = function (editor) {\n return editor.getParam('indent_use_margin', false);\n };\n var getIndentation = function (editor) {\n return editor.getParam('indentation', '40px', 'string');\n };\n var getContentCss = function (editor) {\n var contentCss = editor.getParam('content_css');\n if (isString(contentCss)) {\n return map(contentCss.split(','), trim);\n } else if (isArray(contentCss)) {\n return contentCss;\n } else if (contentCss === false || editor.inline) {\n return [];\n } else {\n return ['default'];\n }\n };\n var getFontCss = function (editor) {\n var fontCss = editor.getParam('font_css', []);\n return isArray(fontCss) ? fontCss : map(fontCss.split(','), trim);\n };\n var getDirectionality = function (editor) {\n return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined);\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var getObjectResizing = function (editor) {\n var selector = editor.getParam('object_resizing');\n if (selector === false || Env.iOS) {\n return false;\n } else {\n return isString(selector) ? selector : 'table,img,figure.image,div,video,iframe';\n }\n };\n var getResizeImgProportional = function (editor) {\n return editor.getParam('resize_img_proportional', true, 'boolean');\n };\n var getPlaceholder = function (editor) {\n return editor.getParam('placeholder', DOM$1.getAttrib(editor.getElement(), 'placeholder'), 'string');\n };\n var getEventRoot = function (editor) {\n return editor.getParam('event_root');\n };\n var getServiceMessage = function (editor) {\n return editor.getParam('service_message');\n };\n var getTheme = function (editor) {\n return editor.getParam('theme');\n };\n var shouldValidate = function (editor) {\n return editor.getParam('validate');\n };\n var isInlineBoundariesEnabled = function (editor) {\n return editor.getParam('inline_boundaries') !== false;\n };\n var getFormats = function (editor) {\n return editor.getParam('formats');\n };\n var getPreviewStyles = function (editor) {\n var style = editor.getParam('preview_styles', defaultPreviewStyles);\n if (isString(style)) {\n return style;\n } else {\n return '';\n }\n };\n var canFormatEmptyLines = function (editor) {\n return editor.getParam('format_empty_lines', false, 'boolean');\n };\n var getCustomUiSelector = function (editor) {\n return editor.getParam('custom_ui_selector', '', 'string');\n };\n var getThemeUrl = function (editor) {\n return editor.getParam('theme_url');\n };\n var isInline$1 = function (editor) {\n return editor.getParam('inline');\n };\n var hasHiddenInput = function (editor) {\n return editor.getParam('hidden_input');\n };\n var shouldPatchSubmit = function (editor) {\n return editor.getParam('submit_patch');\n };\n var isEncodingXml = function (editor) {\n return editor.getParam('encoding') === 'xml';\n };\n var shouldAddFormSubmitTrigger = function (editor) {\n return editor.getParam('add_form_submit_trigger');\n };\n var shouldAddUnloadTrigger = function (editor) {\n return editor.getParam('add_unload_trigger');\n };\n var hasForcedRootBlock = function (editor) {\n return getForcedRootBlock(editor) !== '';\n };\n var getCustomUndoRedoLevels = function (editor) {\n return editor.getParam('custom_undo_redo_levels', 0, 'number');\n };\n var shouldDisableNodeChange = function (editor) {\n return editor.getParam('disable_nodechange');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly');\n };\n var hasContentCssCors = function (editor) {\n return editor.getParam('content_css_cors');\n };\n var getPlugins = function (editor) {\n return editor.getParam('plugins', '', 'string');\n };\n var getExternalPlugins = function (editor) {\n return editor.getParam('external_plugins');\n };\n var shouldBlockUnsupportedDrop = function (editor) {\n return editor.getParam('block_unsupported_drop', true, 'boolean');\n };\n var isVisualAidsEnabled = function (editor) {\n return editor.getParam('visual', true, 'boolean');\n };\n var getVisualAidsTableClass = function (editor) {\n return editor.getParam('visual_table_class', 'mce-item-table', 'string');\n };\n var getVisualAidsAnchorClass = function (editor) {\n return editor.getParam('visual_anchor_class', 'mce-item-anchor', 'string');\n };\n\n var isElement$4 = isElement$1;\n var isText$6 = isText$1;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var trimCount = function (text) {\n var trimmedText = trim$2(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var deleteZwspChars = function (caretContainer) {\n var idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$5(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var 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 var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$5(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$5 = function (caretContainerNode) {\n if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode(caretContainerNode);\n }\n }\n if (isText$6(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode(caretContainerNode);\n }\n }\n };\n\n var browser$2 = detect$3().browser;\n var isContentEditableFalse$3 = isContentEditableFalse;\n var isMedia$1 = isMedia;\n var isTableCell$2 = isTableCell;\n var inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var docElm, scrollX, scrollY, margin, rootRect;\n if (root.tagName === 'BODY') {\n docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n 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 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 var trimInlineCaretContainers = function (root) {\n var fakeCaretTargetNodes = descendants$1(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (var i = 0; i < fakeCaretTargetNodes.length; i++) {\n var node = fakeCaretTargetNodes[i].dom;\n var sibling = node.previousSibling;\n if (endsWithCaretContainer(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (editor, root, isBlock, hasFocus) {\n var lastVisualCaret = Cell(Optional.none());\n var cursorInterval, caretContainerNode;\n var rootBlock = getForcedRootBlock(editor);\n var caretBlock = rootBlock.length > 0 ? rootBlock : 'p';\n var show = function (before, element) {\n var clientRect, rng;\n hide();\n if (isTableCell$2(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock(caretBlock, element, before);\n clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
').css(clientRect).appendTo(root)[0];\n lastVisualCaret.set(Optional.some({\n caret: caret,\n element: element,\n before: before\n }));\n lastVisualCaret.get().each(function (caretState) {\n if (before) {\n DomQuery(caretState.caret).addClass('mce-visual-caret-before');\n }\n });\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n caretContainerNode = insertInline(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 var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$5(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Optional.none());\n });\n if (cursorInterval) {\n Delay.clearInterval(cursorInterval);\n cursorInterval = null;\n }\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.get().each(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(__assign({}, clientRect));\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.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 };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isInlineFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || isMedia$1(node);\n };\n var isFakeCaretTarget = function (node) {\n return isInlineFakeCaretTarget(node) || isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = isContentEditableFalse;\n var isMedia$2 = isMedia;\n var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = isElement$1;\n var isCaretCandidate$2 = isCaretCandidate;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock$1(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new DomTreeWalker(node, rootNode);\n var isCefOrCaretContainer = isContentEditableFalse$4(node) || isCaretContainerBlock$1(node);\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock = function (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 var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\n };\n var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n if (!caretPosition) {\n return null;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (!isElement$5(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.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 var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock(node1, root) === getParentBlock(node2, root);\n };\n var lean = function (left, root, node) {\n var sibling, siblingName;\n if (left) {\n siblingName = 'previousSibling';\n } else {\n siblingName = 'nextSibling';\n }\n while (node && node !== root) {\n sibling = node[siblingName];\n if (isCaretContainer$2(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$4(sibling) || isMedia$2(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$2(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$1 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node, container, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n var offset = range.startOffset;\n if (isCaretContainerBlock(container)) {\n if (!isElement$5(container)) {\n container = container.parentNode;\n }\n location = container.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$1(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$1(container)) {\n if (isCaretContainer$2(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$1(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer(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(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(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$1(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Optional.from(pos.getNode()).map(SugarElement.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr(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 var isContentEditableFalse$5 = isContentEditableFalse;\n var isText$7 = isText$1;\n var isElement$6 = isElement$1;\n var isBr$4 = isBr;\n var isCaretCandidate$3 = isCaretCandidate;\n var isAtomic$1 = isAtomic;\n var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n var getParents = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$7(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$7(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$4(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate$3(nextSibling)) {\n if (isText$7(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n var findCaretPosition = function (direction, startPos, root) {\n var node, nextNode, innerNode;\n var caretPosition;\n if (!isElement$6(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$3(root.lastChild) && isElement$6(root.lastChild)) {\n return isBr$4(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$7(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$3(nextNode)) {\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$7(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$3(nextNode)) {\n if (isBr$4(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate$1(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n var rootContentEditableFalseElm = last$1(filter(getParents(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 var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return isBr(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition.isTextPosition(position) && isBr(position.getNode());\n };\n var shouldSkipPosition = function (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 var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (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 };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (isText$1(startNode)) {\n return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate(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 var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var firstPositionIn = curry(positionIn, true);\n var lastPositionIn = curry(positionIn, false);\n\n var CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return isElement$1(node) && node.id === CARET_ID;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isStringPathBookmark = function (bookmark) {\n return isString(bookmark.start);\n };\n var isRangeBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('rng');\n };\n var isIdBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('id');\n };\n var isIndexBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (isElement$1(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var pos;\n var rng = dom.createRng();\n pos = resolve$1(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$1(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty$1 = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return lastPositionIn(node).fold(never, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (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 var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n 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 (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\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 var isValidTextNode = function (node) {\n return isText$1(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (isText$1(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && isText$1(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\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 var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Optional.some(rng);\n } else {\n return Optional.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex$1 = function (dom, bookmark) {\n return Optional.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$2 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Optional.some(resolveCaretPositionBookmark(dom, bookmark));\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex$1(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Optional.some(bookmark.rng);\n }\n }\n return Optional.none();\n };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n resolve$2(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return isElement$1(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n var is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2(nbsp);\n var isWhiteSpace$1 = function (chr) {\n return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n var isContent$1 = function (chr) {\n return !isWhiteSpace$1(chr) && !isNbsp(chr);\n };\n\n var isNode = function (node) {\n return !!node.nodeType;\n };\n var isInlineBlock = function (node) {\n return node && /^(IMG)$/.test(node.nodeName);\n };\n var moveStart = function (dom, selection, rng) {\n var offset = rng.startOffset;\n var container = rng.startContainer, walker, node, nodes;\n if (rng.startContainer === rng.endContainer) {\n if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\n return;\n }\n }\n if (container.nodeType === 1) {\n nodes = container.childNodes;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n var getNonWhiteSpaceSibling = function (node, next, inc) {\n if (node) {\n var nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (isNode(name)) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n var isValid = function (ed, parent, child) {\n return ed.schema.isValidChild(parent, child);\n };\n var isWhiteSpaceNode = function (node, allowSpaces) {\n if (allowSpaces === void 0) {\n allowSpaces = false;\n }\n if (isNonNullable(node) && isText$1(node)) {\n var data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n var isEmptyTextNode = function (node) {\n return isNonNullable(node) && isText$1(node) && node.length === 0;\n };\n var replaceVars = function (value, vars) {\n if (typeof value !== 'string') {\n value = value(vars);\n } else if (vars) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq = function (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 var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$1 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var isVariableFormatName = function (editor, formatName) {\n var hasVariableValues = function (format) {\n var isVariableValue = function (val) {\n return val.length > 1 && val.charAt(0) === '%';\n };\n return exists([\n 'styles',\n 'attributes'\n ], function (key) {\n return get$1(format, key).exists(function (field) {\n var fieldValues = isArray(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n });\n });\n };\n return exists(editor.formatter.get(formatName), hasVariableValues);\n };\n var areSimilarFormats = function (editor, formatName, otherFormatName) {\n var validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n var filterObj = function (format) {\n return filter$1(format, function (_, key) {\n return exists(validKeys, function (validKey) {\n return validKey === key;\n });\n });\n };\n return exists(editor.formatter.get(formatName), function (fmt1) {\n var filteredFmt1 = filterObj(fmt1);\n return exists(editor.formatter.get(otherFormatName), function (fmt2) {\n var filteredFmt2 = filterObj(fmt2);\n return equal(filteredFmt1, filteredFmt2);\n });\n });\n };\n var isBlockFormat = function (format) {\n return hasNonNullableKey(format, 'block');\n };\n var isSelectorFormat = function (format) {\n return hasNonNullableKey(format, 'selector');\n };\n var isInlineFormat = function (format) {\n return hasNonNullableKey(format, 'inline');\n };\n\n var isBookmarkNode$2 = isBookmarkNode$1;\n var getParents$2 = getParents$1;\n var isWhiteSpaceNode$1 = isWhiteSpaceNode;\n var isTextBlock$2 = isTextBlock$1;\n var isBogusBr = function (node) {\n return isBr(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (isElement$1(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var walkText = function (start, node, offset, predicate) {\n var str = node.data;\n for (var 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 var findSpace = function (start, node, offset) {\n return walkText(start, node, offset, function (c) {\n return isNbsp(c) || isWhiteSpace$1(c);\n });\n };\n var findContent = function (start, node, offset) {\n return walkText(start, node, offset, isContent$1);\n };\n var findWordEndPoint = function (dom, body, container, offset, start, includeTrailingSpaces) {\n var lastTextNode;\n var rootNode = dom.getParent(container, dom.isBlock) || body;\n var walk = function (container, offset, pred) {\n var textSeeker = TextSeeker(dom);\n var walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, function (text, textOffset) {\n if (isBookmarkNode$2(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n var spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(function (result) {\n return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result);\n }).orThunk(function () {\n return lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none();\n });\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n if (isText$1(container) && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n var parents = getParents$2(dom, container);\n for (var i = 0; i < parents.length; i++) {\n for (var y = 0; y < format.length; y++) {\n var curFormat = format[y];\n if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, format, container, siblingName) {\n var node;\n var dom = editor.dom;\n var root = dom.getRoot();\n if (!format[0].wrapper) {\n node = dom.getParent(container, format[0].block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(isText$1(container) ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock$2(editor, node);\n }, scopeRoot);\n }\n if (node && format[0].wrapper) {\n node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var isAtBlockBoundary = function (dom, root, container, siblingName) {\n var 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(dom, root, parent, siblingName);\n }\n };\n var findParentContainer = function (dom, format, container, offset, start) {\n var parent = container;\n var sibling;\n var siblingName = start ? 'previousSibling' : 'nextSibling';\n var root = dom.getRoot();\n if (isText$1(container) && !isWhiteSpaceNode$1(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (true) {\n if (!format[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n var allowSpaces = isText$1(sibling) && !isAtBlockBoundary(dom, root, sibling, siblingName);\n if (!isBookmarkNode$2(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode$1(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 var isSelfOrParentBookmark = function (container) {\n return isBookmarkNode$2(container.parentNode) || isBookmarkNode$2(container);\n };\n var expandRng = function (editor, rng, format, includeTrailingSpace) {\n if (includeTrailingSpace === void 0) {\n includeTrailingSpace = false;\n }\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n if (isElement$1(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (isText$1(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$1(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$1(endContainer)) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isSelfOrParentBookmark(startContainer)) {\n startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (isText$1(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isSelfOrParentBookmark(endContainer)) {\n endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (isText$1(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n startContainer = container;\n startOffset = offset;\n });\n var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n endContainer = container;\n endOffset = offset;\n });\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (!isText$1(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, true);\n }\n if (!format[0].inline || (!isText$1(endContainer) || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, format, endContainer, endOffset, false);\n }\n }\n if (format[0].selector && format[0].expand !== false && !format[0].inline) {\n startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\n }\n if (format[0].block || format[0].selector) {\n startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\n if (format[0].block) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, format, endContainer, endOffset, false);\n }\n }\n }\n if (isElement$1(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$1(endContainer)) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var clampToExistingChildren = function (container, index) {\n var childNodes = container.childNodes;\n if (index >= childNodes.length) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var getEndChild = function (container, index) {\n return clampToExistingChildren(container, index - 1);\n };\n var walk$1 = function (dom, rng, callback) {\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var exclude = function (nodes) {\n var node;\n node = nodes[0];\n if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n nodes.splice(0, 1);\n }\n node = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n do {\n if (node.parentNode === root) {\n return node;\n }\n node = node.parentNode;\n } while (node);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) {\n parent_1 = node.parentNode;\n var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings_1.length) {\n if (!next) {\n siblings_1.reverse();\n }\n callback(exclude(siblings_1));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = clampToExistingChildren(startContainer, startOffset);\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getEndChild(endContainer, endOffset);\n }\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n var ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (var node = startContainer; node; node = node.parentNode) {\n if (node === endContainer) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (node === ancestor) {\n break;\n }\n }\n for (var node = endContainer; node; node = node.parentNode) {\n if (node === startContainer) {\n return walkBoundary(endContainer, ancestor);\n }\n if (node === ancestor) {\n break;\n }\n }\n var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n var 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 var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(getSelectedNodes(ranges), isTableCell$1);\n };\n var getCellsFromElement = function (elm) {\n return descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (isText$1(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 var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (isText$1(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 var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren = function (node) {\n return lastChild(node).fold(constant([node]), function (child) {\n if (name(child) === 'br') {\n return prevSibling(child).map(function (sibling) {\n return [node].concat(getLastChildren(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find(getFirstChildren(elm), curry(eq$2, startNode));\n var end = find(getLastChildren(elm), curry(eq$2, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint$1 = function (dom, rng, node, start) {\n var root = node, walker = new DomTreeWalker(node, root);\n var moveCaretBeforeOnEnterElementsMap = filter$1(dom.schema.getMoveCaretBeforeOnEnterElements(), function (_, name) {\n return !contains([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase());\n });\n do {\n if (isText$1(node) && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n } while (node = 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 var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n var runOnRanges = function (editor, executor) {\n var fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each(fakeSelectionNodes, function (elem) {\n var node = elem.dom;\n var 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 var preserve = function (selection, fillBookmark, executor) {\n var bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api = NodeValue(isText, 'text');\n var get$8 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$8(elem) === ZWSP;\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (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 (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var applyWordGrab = function (editor, rng) {\n var r = expandRng(editor, rng, [{ inline: true }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate$1('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = SugarElement.fromTag('span', eDoc);\n add$3(master, annotation());\n set(master, '' + dataAnnotationId(), uid);\n set(master, '' + dataAnnotation(), annotationName);\n var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n setAll(master, attributes);\n add$4(master, classes);\n return master;\n };\n var annotate = function (editor, rng, annotationName, decorate, data) {\n var newWrappers = [];\n var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n var wrapper = Cell(Optional.none());\n var finishWrapper = function () {\n wrapper.set(Optional.none());\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(Optional.some(nu));\n return nu;\n });\n };\n var processElements = function (elems) {\n each(elems, processElement);\n };\n var processElement = function (elem) {\n var ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n var children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid': {\n var w = getOrOpenWrapper();\n wrap(elem, w);\n break;\n }\n }\n };\n var processNodes = function (nodes) {\n var elems = map(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$1(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var selection = editor.selection;\n var initialRng = selection.getRng();\n var hasFakeSelection = getCellsFromEditor(editor).length > 0;\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom);\n selection.select(wrapper.dom);\n } else {\n preserve(selection, false, function () {\n runOnRanges(editor, function (selectionRng) {\n annotate(editor, selectionRng, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n var Annotator = function (editor) {\n var registry = create$2();\n setup$1(editor, registry);\n var changes = setup(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Optional.some(name)).each(function (_a) {\n var elements = _a.elements;\n each(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$1(directory, function (elems) {\n return map(elems, function (elem) {\n return elem.dom;\n });\n });\n }\n };\n };\n\n var BookmarkManager = function (selection) {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue(node) || isContentEditableFalse(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.browser.isIE() && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (isElement$1(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height, origin) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireObjectResized = function (editor, target, width, height, origin) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var firePreInit = function (editor) {\n return editor.fire('PreInit');\n };\n var firePostRender = function (editor) {\n return editor.fire('PostRender');\n };\n var fireInit = function (editor) {\n return editor.fire('Init');\n };\n var firePlaceholderToggle = function (editor, state) {\n return editor.fire('PlaceholderToggle', { state: state });\n };\n var fireError = function (editor, errorType, error) {\n return editor.fire(errorType, error);\n };\n\n var VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var isContentEditableFalse$6 = isContentEditableFalse;\n var ControlSelection = function (selection, editor) {\n var elementSelectionAttr = 'data-mce-selected';\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n var 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 var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isMedia$1 = function (elm) {\n return isMedia(elm) || dom.hasClass(elm, 'mce-preview-object');\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n var 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 var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n if (dom.is(elm, 'figure.image')) {\n return elm.querySelector('img');\n } else if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return elm.firstElementChild;\n } else {\n return elm;\n }\n };\n var isResizable = function (elm) {\n var 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')) {\n return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$1(SugarElement.fromDom(elm), selector);\n }\n };\n var createGhostElement = function (elm) {\n if (isMedia$1(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else {\n return elm.cloneNode(true);\n }\n };\n var setGhostElmSize = function (ghostElm, width, height) {\n dom.setStyles(getResizeTarget(ghostElm), {\n width: width,\n height: height\n });\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var 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$1(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(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(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 var endGhostResize = function () {\n var wasResizeStarted = resizeStarted;\n resizeStarted = false;\n var setSizeProp = function (name, value) {\n if (value) {\n var target = getResizeTarget(selectedElm);\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 if (wasResizeStarted) {\n setSizeProp('width', width);\n setSizeProp('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 var showResizeRect = function (targetElm) {\n unbindResizeHandleEvents();\n var position = dom.getPos(targetElm, rootElement);\n var selectedElmX = position.x;\n var selectedElmY = position.y;\n var rect = targetElm.getBoundingClientRect();\n var targetWidth = rect.width || rect.right - rect.left;\n var targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n var e = editor.fire('ObjectSelected', { target: targetElm });\n var selectedValue = dom.getAttrib(selectedElm, elementSelectionAttr, '1');\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n startX = e.screenX;\n startY = e.screenY;\n startW = getResizeTarget(selectedElm).clientWidth;\n startH = getResizeTarget(selectedElm).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', { class: 'mce-resize-backdrop' });\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 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 if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (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();\n }\n if (!dom.getAttrib(selectedElm, elementSelectionAttr)) {\n selectedElm.setAttribute(elementSelectionAttr, selectedValue);\n }\n };\n var hideResizeRect = function () {\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$1(resizeHandles, function (value, name) {\n var handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute(elementSelectionAttr);\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr,video,span.mce-preview-object')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$6(getContentEditableRoot(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n each$1(resizeHandles, function (handle) {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n var handleMSControlSelect_1 = function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n return editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target) || isMedia(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n };\n dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n editor.on('remove', function () {\n return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return isContentEditableTrue(node) || isContentEditableFalse(node);\n };\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var rects;\n var element = doc.elementFromPoint(clientX, clientY);\n var rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return isContentEditableFalse(findParent(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint$1 = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (doc.caretRangeFromPoint) {\n rng = doc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n\n var isEq$1 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent = function (node, rootNode, predicate) {\n return findParent$1(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable$3 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$3 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new DomTreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (isBr(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (isContentEditableFalse(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var lastInlineElement;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n var 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$1(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Optional.some(CaretPosition(node, left ? node.nodeValue.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 (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset;\n var body = dom.getRoot();\n var node;\n var directionLeft, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n var isAfterNode = isElement$1(container) && offset === container.childNodes.length;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Optional.none();\n }\n if (isElement$1(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(node)) {\n return Optional.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$3(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$1(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$3(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && isTable$3(container) === false) {\n node = container;\n var walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (isText$1(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(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$1(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$1(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$1(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n var normalize = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (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(function (pos) {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return isEq$1(rng, normRng) ? Optional.none() : Optional.some(normRng);\n };\n\n var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split$1 = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$1(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$1(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$1(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var RangeUtils = function (dom) {\n var walk = function (rng, callback) {\n return walk$1(dom, rng, callback);\n };\n var split = split$1;\n var normalize$1 = function (rng) {\n return normalize(dom, rng).fold(never, function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split,\n normalize: normalize$1\n };\n };\n RangeUtils.compareRanges = isEq$1;\n RangeUtils.getCaretRangeFromPoint = fromPoint$1;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode;\n\n var Dimension = function (name, getOffset) {\n var set = function (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 var dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$5(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$5(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$9 = function (element) {\n return api$1.get(element);\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n var view = function (doc) {\n var _a;\n var 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 var owner$1 = function (element) {\n return documentOrOwner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$1\n });\n\n var find$2 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$2(doc);\n var frames = pathTo(element, Navigation);\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var 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 var excludeFromDescend = function (element) {\n return name(element) === 'textarea';\n };\n var fireScrollIntoViewEvent = function (editor, data) {\n var scrollEvent = editor.fire('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n var fireAfterScrollIntoViewEvent = function (editor, data) {\n editor.fire('AfterScrollIntoView', data);\n };\n var descend = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0 || excludeFromDescend(element)) {\n return {\n element: element,\n offset: 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 var last = children$1[children$1.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element: element,\n offset: offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText(last)) {\n return {\n element: last,\n offset: get$8(last).length\n };\n } else {\n return {\n element: last,\n offset: children(last).length\n };\n }\n }\n }\n };\n var markerInfo = function (element, cleanupFun) {\n var pos = absolute(element);\n var height = get$9(element);\n return {\n element: element,\n bottom: pos.top + height,\n height: height,\n pos: pos,\n cleanup: cleanupFun\n };\n };\n var createMarker = function (element, offset) {\n var startPoint = descend(element, offset);\n var span = SugarElement.fromHtml('' + ZWSP + '');\n before(startPoint.element, span);\n return markerInfo(span, function () {\n return remove(span);\n });\n };\n var elementMarker = function (element) {\n return markerInfo(SugarElement.fromDom(element), noop);\n };\n var withMarker = function (editor, f, rng, alignToTop) {\n preserveWith(editor, function (_s, _e) {\n return applyWithMarker(editor, f, rng, alignToTop);\n }, rng);\n };\n var withScrollEvents = function (editor, doc, f, marker, alignToTop) {\n var data = {\n elm: marker.element.dom,\n alignToTop: alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n var scrollTop = get$2(doc).top;\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n var applyWithMarker = function (editor, f, rng, alignToTop) {\n var body = SugarElement.fromDom(editor.getBody());\n var doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n var marker = createMarker(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n var withElement = function (editor, element, f, alignToTop) {\n var doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n var preserveWith = function (editor, f, rng) {\n var startElement = rng.startContainer;\n var startOffset = rng.startOffset;\n var endElement = rng.endContainer;\n var endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n var newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n var scrollToMarker = function (marker, viewHeight, alignToTop, doc) {\n var pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n var y = pos.top - viewHeight + marker.height;\n to(pos.left, y, doc);\n }\n };\n var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) {\n var viewportBottom = viewHeight + scrollTop;\n var markerTop = marker.pos.top;\n var markerBottom = marker.bottom;\n var largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n var 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 var intoWindow = function (doc, scrollTop, marker, alignToTop) {\n var viewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n var intoFrame = function (doc, scrollTop, marker, alignToTop) {\n var frameViewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n var op = find$2(marker.element);\n var 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 var rangeIntoWindow = function (editor, rng, alignToTop) {\n return withMarker(editor, intoWindow, rng, alignToTop);\n };\n var elementIntoWindow = function (editor, element, alignToTop) {\n return withElement(editor, element, intoWindow, alignToTop);\n };\n var rangeIntoFrame = function (editor, rng, alignToTop) {\n return withMarker(editor, intoFrame, rng, alignToTop);\n };\n var elementIntoFrame = function (editor, element, alignToTop) {\n return withElement(editor, element, intoFrame, alignToTop);\n };\n var scrollElementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var scrollRangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus = function (element) {\n return element.dom.focus();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var create$4 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$4 };\n\n var adt = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$3 = adt.before;\n var on = adt.on;\n var after$2 = adt.after;\n var Situ = {\n before: before$3,\n on: on,\n after: after$2,\n cata: cata,\n getStart: getStart\n };\n\n var 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 var exactFromRange = function (simRange) {\n return adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$1.domRange;\n var relative = adt$1.relative;\n var exact = adt$1.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$3 = detect$3().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$8(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 var normalizeRng = function (rng) {\n return SimSelection.range(rng.start, clamp(rng.soffset, rng.start), rng.finish, clamp(rng.foffset, rng.finish));\n };\n var isOrContains = function (root, elm) {\n return !isRestrictedNode(elm.dom) && (contains$2(root, elm) || eq$2(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$3.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark$2 = function (root) {\n var win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var 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 var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark$2(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = SugarElement.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Optional.from(rng) : Optional.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(function (x) {\n return validate(SugarElement.fromDom(editor.getBody()), x);\n }).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n return editor.selection.setRng(rng);\n });\n };\n\n var isEditorUIElement = function (elm) {\n var className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (_e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = detect$3().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup NodeChange', function (e) {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n var register = function (editor) {\n var throttledStore = first(function () {\n store(editor);\n }, 0);\n editor.on('init', function () {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n\n var documentFocusInHandler;\n var DOM$2 = DOMUtils.DOM;\n var isEditorUIElement$1 = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isEditorContentAreaElement = function (elm) {\n var 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 var isUIElement = function (editor, elm) {\n var customSelector = getCustomUiSelector(editor);\n var parent = DOM$2.getParent(elm, function (elm) {\n return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function (editor) {\n try {\n var root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(root).fold(function () {\n return document.body;\n }, function (x) {\n return x.dom;\n });\n } catch (ex) {\n return document.body;\n }\n };\n var registerEvents = function (editorManager, e) {\n var editor = e.editor;\n register(editor);\n editor.on('focusin', function () {\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.fire('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', function () {\n Delay.setEditorTimeout(editor, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(function (target) {\n if (target.ownerDocument === document) {\n if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$2.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$2.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$2 = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Optional.from(getNode(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (contains$2(root, node) === false) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n };\n var normalizeSelection = function (editor, rng) {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(function (elm) {\n return firstPositionIn(elm.dom);\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (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 var hasElementFocus = function (elm) {\n return hasFocus(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus(SugarElement.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n var hasUiFocus = function (editor) {\n var dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(dos).filter(function (elem) {\n return !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom);\n }).isSome();\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var hasEditorOrUiFocus = function (editor) {\n return hasFocus$1(editor) || hasUiFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus$1 = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement(elm) ? Optional.some(elm) : parent(elm).filter(isElement);\n }).map(function (elm) {\n return elm.dom;\n }).getOr(root);\n };\n var getStart$2 = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && isText$1(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode$1 = function (root, rng) {\n var elm, startContainer, endContainer;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n var startOffset = rng.startOffset;\n var endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\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 return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node;\n var selectedBlocks = [];\n var root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new DomTreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select$1 = function (dom, node, content) {\n return Optional.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint$1(dom, rng, node, true);\n moveEndPoint$1(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var processRanges = function (editor, ranges) {\n return map(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$2 = function (node, root, prev) {\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n var sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) {\n sibling = parent_1[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var isEmptyTextNode$1 = function (node) {\n if (!isWhitespaceText(node.value)) {\n return false;\n }\n var parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n return false;\n }\n return true;\n };\n var isNonEmptyElement = function (node) {\n var 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 var AstNode = function () {\n function AstNode(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n AstNode.create = function (name, attrs) {\n var node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$1(attrs, function (value, attrName) {\n node.attr(attrName, value);\n });\n }\n return node;\n };\n AstNode.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n AstNode.prototype.attr = function (name, value) {\n var self = this;\n var attrs;\n if (typeof name !== 'string') {\n if (name !== undefined && name !== null) {\n each$1(name, function (value, key) {\n self.attr(key, value);\n });\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n var 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 var 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: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n AstNode.prototype.clone = function () {\n var self = this;\n var clone = new AstNode(self.name, self.type);\n var selfAttrs;\n if (selfAttrs = self.attributes) {\n var cloneAttrs = [];\n cloneAttrs.map = {};\n for (var i = 0, l = selfAttrs.length; i < l; i++) {\n var 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 clone.shortEnded = self.shortEnded;\n return clone;\n };\n AstNode.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n AstNode.prototype.unwrap = function () {\n var self = this;\n for (var node = self.firstChild; node;) {\n var next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n AstNode.prototype.remove = function () {\n var 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 {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n AstNode.prototype.append = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n var 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 AstNode.prototype.insert = function (node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n var parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\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 {\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 AstNode.prototype.getAll = function (name) {\n var self = this;\n var collection = [];\n for (var 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 AstNode.prototype.empty = function () {\n var self = this;\n if (self.firstChild) {\n var nodes = [];\n for (var node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n var i = nodes.length;\n while (i--) {\n var 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 AstNode.prototype.isEmpty = function (elements, whitespace, predicate) {\n if (whitespace === void 0) {\n whitespace = {};\n }\n var self = this;\n var 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$1(node)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText(node.value)) {\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 AstNode.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return AstNode;\n }();\n\n var extractBase64DataUris = function (html) {\n var dataImageUri = /data:[^;]+;base64,([a-z0-9\\+\\/=]+)/gi;\n var chunks = [];\n var uris = {};\n var prefix = generate$1('img');\n var matches;\n var index = 0;\n var count = 0;\n while (matches = dataImageUri.exec(html)) {\n var uri = matches[0];\n var imageId = prefix + '_' + count++;\n uris[imageId] = uri;\n if (index < matches.index) {\n chunks.push(html.substr(index, matches.index - index));\n }\n chunks.push(imageId);\n index = matches.index + uri.length;\n }\n var re = new RegExp(prefix + '_[0-9]+', 'g');\n if (index === 0) {\n return {\n prefix: prefix,\n uris: uris,\n html: html,\n re: re\n };\n } else {\n if (index < html.length) {\n chunks.push(html.substr(index));\n }\n return {\n prefix: prefix,\n uris: uris,\n html: chunks.join(''),\n re: re\n };\n }\n };\n var restoreDataUris = function (html, result) {\n return html.replace(result.re, function (imageId) {\n return get$1(result.uris, imageId).getOr(imageId);\n });\n };\n var parseDataUri = function (uri) {\n var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=]+)/i.exec(uri);\n if (matches) {\n return Optional.some({\n type: matches[1],\n data: decodeURIComponent(matches[2])\n });\n } else {\n return Optional.none();\n }\n };\n\n var safeSvgDataUrlElements = [\n 'img',\n 'video'\n ];\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var blockSvgDataUris = function (allowSvgDataUrls, tagName) {\n var allowed = isNullable(allowSvgDataUrls) ? contains(safeSvgDataUrlElements, tagName) : allowSvgDataUrls;\n return !allowed;\n };\n var isInvalidUri = function (settings, uri, tagName) {\n if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(uri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(uri);\n } else {\n return /^data:/i.test(uri);\n }\n };\n var findEndTagIndex = function (schema, html, startIndex) {\n var count = 1, index, matches;\n var shortEndedElements = schema.getShortEndedElements();\n var tokenRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)(\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n tokenRegExp.lastIndex = index = startIndex;\n while (matches = tokenRegExp.exec(html)) {\n index = tokenRegExp.lastIndex;\n if (matches[1] === '/') {\n count--;\n } else if (!matches[1]) {\n if (matches[2] in shortEndedElements) {\n continue;\n }\n count++;\n }\n if (count === 0) {\n break;\n }\n }\n return index;\n };\n var isConditionalComment = function (html, startIndex) {\n return /^\\s*\\[if [\\w\\W]+\\]>.*/.test(html.substr(startIndex));\n };\n var findCommentEndIndex = function (html, isBogus, startIndex) {\n if (startIndex === void 0) {\n startIndex = 0;\n }\n var lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n var endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n var endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n var endCommentRegexp = /--!?>/g;\n endCommentRegexp.lastIndex = startIndex;\n var match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n var checkBogusAttribute = function (regExp, attrString) {\n var matches = regExp.exec(attrString);\n if (matches) {\n var name_1 = matches[1];\n var value = matches[2];\n return typeof name_1 === 'string' && name_1.toLowerCase() === 'data-mce-bogus' ? value : null;\n } else {\n return null;\n }\n };\n var SaxParser = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n settings = settings || {};\n if (settings.fix_self_closing !== false) {\n settings.fix_self_closing = true;\n }\n var comment = settings.comment ? settings.comment : noop;\n var cdata = settings.cdata ? settings.cdata : noop;\n var text = settings.text ? settings.text : noop;\n var start = settings.start ? settings.start : noop;\n var end = settings.end ? settings.end : noop;\n var pi = settings.pi ? settings.pi : noop;\n var doctype = settings.doctype ? settings.doctype : noop;\n var parseInternal = function (base64Extract, format) {\n if (format === void 0) {\n format = 'html';\n }\n var html = base64Extract.html;\n var matches, index = 0, value, endRegExp;\n var stack = [];\n var attrList, i, textData, name;\n var isInternalElement, isShortEnded;\n var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n var attributesRequired, attributesDefault, attributesForced;\n var anyAttributesRequired, attrValue, idCount = 0;\n var decode = Entities.decode;\n var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');\n var scriptUriRegExp = /((java|vb)script|mhtml):/i;\n var parsingMode = format === 'html' ? 0 : 1;\n var processEndTag = function (name) {\n var pos, i;\n pos = stack.length;\n while (pos--) {\n if (stack[pos].name === name) {\n break;\n }\n }\n if (pos >= 0) {\n for (i = stack.length - 1; i >= pos; i--) {\n name = stack[i];\n if (name.valid) {\n end(name.name);\n }\n }\n stack.length = pos;\n }\n };\n var processText = function (value, raw) {\n return text(restoreDataUris(value, base64Extract), raw);\n };\n var processComment = function (value) {\n if (value === '') {\n return;\n }\n if (value.charAt(0) === '>') {\n value = ' ' + value;\n }\n if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n value = ' ' + value;\n }\n comment(restoreDataUris(value, base64Extract));\n };\n var processAttr = function (value) {\n return restoreDataUris(value, base64Extract);\n };\n var processMalformedComment = function (value, startIndex) {\n var startTag = value || '';\n var isBogus = !startsWith(startTag, '--');\n var endIndex = findCommentEndIndex(html, isBogus, startIndex);\n value = html.substr(startIndex, endIndex - startIndex);\n processComment(isBogus ? startTag + value : value);\n return endIndex + 1;\n };\n var parseAttribute = function (tagName, name, value, val2, val3) {\n var attrRule, i;\n var trimRegExp = /[\\s\\u0000-\\u001F]+/g;\n name = name.toLowerCase();\n value = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || ''));\n if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n attrRule = validAttributesMap[name];\n if (!attrRule && validAttributePatterns) {\n i = validAttributePatterns.length;\n while (i--) {\n attrRule = validAttributePatterns[i];\n if (attrRule.pattern.test(name)) {\n break;\n }\n }\n if (i === -1) {\n attrRule = null;\n }\n }\n if (!attrRule) {\n return;\n }\n if (attrRule.validValues && !(value in attrRule.validValues)) {\n return;\n }\n }\n if (filteredUrlAttrs[name] && !settings.allow_script_urls) {\n var uri = value.replace(trimRegExp, '');\n try {\n uri = decodeURIComponent(uri);\n } catch (ex) {\n uri = unescape(uri);\n }\n if (scriptUriRegExp.test(uri)) {\n return;\n }\n if (isInvalidUri(settings, uri, tagName)) {\n return;\n }\n }\n if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n return;\n }\n attrList.map[name] = value;\n attrList.push({\n name: name,\n value: value\n });\n };\n var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\w\\\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_:.]*)(\\\\s(?:[^\\'\">]+(?:\"[^\"]*\"|\\'[^\\']*\\'))*[^\"\\'>]*(?:\"[^\">]*|\\'[^\\'>]*)?|\\\\s*|\\\\/)>)' + ')', 'g');\n var attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n var shortEndedElements = schema.getShortEndedElements();\n var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n var fillAttrsMap = schema.getBoolAttrs();\n var validate = settings.validate;\n var removeInternalElements = settings.remove_internals;\n var fixSelfClosing = settings.fix_self_closing;\n var specialElements = schema.getSpecialElements();\n var processHtml = html + '>';\n while (matches = tokenRegExp.exec(processHtml)) {\n var matchText = matches[0];\n if (index < matches.index) {\n processText(decode(html.substr(index, matches.index - index)));\n }\n if (value = matches[7]) {\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n processEndTag(value);\n } else if (value = matches[8]) {\n if (matches.index + matchText.length > html.length) {\n processText(decode(html.substr(matches.index)));\n index = matches.index + matchText.length;\n continue;\n }\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n isShortEnded = value in shortEndedElements;\n if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n processEndTag(value);\n }\n var bogusValue = checkBogusAttribute(attrRegExp, matches[9]);\n if (bogusValue !== null) {\n if (bogusValue === 'all') {\n index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n if (!validate || (elementRule = schema.getElementRule(value))) {\n isValidElement = true;\n if (validate) {\n validAttributesMap = elementRule.attributes;\n validAttributePatterns = elementRule.attributePatterns;\n }\n if (attribsValue = matches[9]) {\n isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n if (isInternalElement && removeInternalElements) {\n isValidElement = false;\n }\n attrList = [];\n attrList.map = {};\n attribsValue.replace(attrRegExp, function (match, name, val, val2, val3) {\n parseAttribute(value, name, val, val2, val3);\n return '';\n });\n } else {\n attrList = [];\n attrList.map = {};\n }\n if (validate && !isInternalElement) {\n attributesRequired = elementRule.attributesRequired;\n attributesDefault = elementRule.attributesDefault;\n attributesForced = elementRule.attributesForced;\n anyAttributesRequired = elementRule.removeEmptyAttrs;\n if (anyAttributesRequired && !attrList.length) {\n isValidElement = false;\n }\n if (attributesForced) {\n i = attributesForced.length;\n while (i--) {\n attr = attributesForced[i];\n name = attr.name;\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n if (attributesDefault) {\n i = attributesDefault.length;\n while (i--) {\n attr = attributesDefault[i];\n name = attr.name;\n if (!(name in attrList.map)) {\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n }\n if (attributesRequired) {\n i = attributesRequired.length;\n while (i--) {\n if (attributesRequired[i] in attrList.map) {\n break;\n }\n }\n if (i === -1) {\n isValidElement = false;\n }\n }\n if (attr = attrList.map['data-mce-bogus']) {\n if (attr === 'all') {\n index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n }\n if (isValidElement) {\n start(value, attrList, isShortEnded);\n }\n } else {\n isValidElement = false;\n }\n if (endRegExp = specialElements[value]) {\n endRegExp.lastIndex = index = matches.index + matchText.length;\n if (matches = endRegExp.exec(html)) {\n if (isValidElement) {\n textData = html.substr(index, matches.index - index);\n }\n index = matches.index + matches[0].length;\n } else {\n textData = html.substr(index);\n index = html.length;\n }\n if (isValidElement) {\n if (textData.length > 0) {\n processText(textData, true);\n }\n end(value);\n }\n tokenRegExp.lastIndex = index;\n continue;\n }\n if (!isShortEnded) {\n if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n stack.push({\n name: value,\n valid: isValidElement\n });\n } else if (isValidElement) {\n end(value);\n }\n }\n } else if (value = matches[1]) {\n processComment(value);\n } else if (value = matches[2]) {\n var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n if (isValidCdataSection) {\n cdata(value);\n } else {\n index = processMalformedComment('', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n } else if (value = matches[3]) {\n doctype(value);\n } else if ((value = matches[4]) || matchText === '= 0; i--) {\n value = stack[i];\n if (value.valid) {\n end(value.name);\n }\n }\n };\n var parse = function (html, format) {\n if (format === void 0) {\n format = 'html';\n }\n parseInternal(extractBase64DataUris(html), format);\n };\n return { parse: parse };\n };\n SaxParser.findEndTag = findEndTagIndex;\n\n var trimHtml = function (tempAttrs, html) {\n var trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n return html.replace(trimContentRegExp, '');\n };\n var trimInternal = function (serializer, html) {\n var content = html;\n var bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n var endTagIndex, index, matchLength, matches;\n var schema = serializer.schema;\n content = trimHtml(serializer.getTempAttrs(), content);\n var shortEndedElements = schema.getShortEndedElements();\n while (matches = bogusAllRegExp.exec(content)) {\n index = bogusAllRegExp.lastIndex;\n matchLength = matches[0].length;\n if (shortEndedElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = SaxParser.findEndTag(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$2(content);\n };\n var trimExternal = trimInternal;\n\n var trimEmptyContents = function (editor, html) {\n var blockName = getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var getContentFromBody = function (editor, args, format, body) {\n var content;\n args.format = format;\n args.get = true;\n args.getInner = true;\n if (!args.no_events) {\n editor.fire('BeforeGetContent', args);\n }\n if (args.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = editor.dom.isEmpty(body) ? '' : trim$2(body.innerText || body.textContent);\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 if (!contains([\n 'text',\n 'tree'\n ], args.format) && !isWsPreserveElement(SugarElement.fromDom(body))) {\n args.content = Tools.trim(content);\n } else {\n args.content = content;\n }\n if (!args.no_events) {\n editor.fire('GetContent', args);\n }\n return args.content;\n };\n var getContentInternal = function (editor, args, format) {\n return Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, format, body);\n });\n };\n\n var each$7 = Tools.each;\n var ElementUtils = function (dom) {\n var compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$7(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (obj1.hasOwnProperty(name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (obj2.hasOwnProperty(name)) {\n return false;\n }\n }\n return true;\n };\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 return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n return { compare: compare };\n };\n\n var makeMap$3 = Tools.makeMap;\n var Writer = function (settings) {\n var html = [];\n settings = settings || {};\n var indent = settings.indent;\n var indentBefore = makeMap$3(settings.indent_before || '');\n var indentAfter = makeMap$3(settings.indent_after || '');\n var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n var htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n 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 (i = 0, l = attrs.length; i < l; i++) {\n 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 value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var 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: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (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: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n var HtmlSerializer = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var validate = settings.validate;\n var handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n if (!handler) {\n name = node.name;\n isEmpty = node.shortEnded;\n attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n sortedAttrs = [];\n sortedAttrs.map = {};\n elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (i = 0, l = attrs.length; i < l; i++) {\n attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n 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(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.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 {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n };\n\n var isChar = function (forward, predicate, pos) {\n return Optional.from(pos.container()).filter(isText$1).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return isText$1(container) && (container.data.length === 0 || isZwsp$1(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n var matchesElementPosition = function (before, predicate) {\n return function (pos) {\n return Optional.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n };\n };\n var isImageBlock = function (node) {\n return isImg(node) && get$5(SugarElement.fromDom(node), 'display') === 'block';\n };\n var isCefNode = function (node) {\n return isContentEditableFalse(node) && !isBogusAll(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeMedia = matchesElementPosition(true, isMedia);\n var isAfterMedia = matchesElementPosition(false, isMedia);\n var isBeforeTable = matchesElementPosition(true, isTable);\n var isAfterTable = matchesElementPosition(false, isTable);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n var getLastChildren$1 = function (elm) {\n var children = [];\n var rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants$1(elm, 'br');\n var brs = filter(getLastChildren$1(elm).slice(-1), isBr$1);\n if (allBrs.length === brs.length) {\n each(brs, remove);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append(elm, SugarElement.fromHtml('
'));\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock(elm) && isBr$1(lastChild) && isBlock(lastChildPrevSibling)) {\n remove(lastChild);\n }\n });\n });\n };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$2(root, start)) {\n return dropLast(parents(start, function (elm) {\n return predicate(elm) || eq$2(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, never);\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\n };\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n return getClosestBlock(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom) === false && contains$2(fromBlock, SugarElement.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary$1 = function (forward, root, pos) {\n return getClosestBlock(root, pos).fold(function () {\n return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n return isInSameBlock(newPos, pos, root.dom) === false;\n });\n }, function (parent) {\n return navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone();\n });\n };\n var isAtStartOfBlock = curry(isAtBlockBoundary$1, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary$1, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr$1);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$5);\n };\n var isBeforeBr = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr$1) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr$1) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock$1 = function (root, pos) {\n var parentBlocks = filter(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock);\n return head(parentBlocks).getOr(root);\n };\n var hasSpaceBefore = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock$1(root, pos).dom, pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock$1(root, pos).dom, pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest(elm, isElement);\n }).exists(function (elm) {\n return isPreValue(get$5(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return prevPosition(root.dom, pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return nextPosition(root.dom, pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n };\n var needsToHaveNbsp = function (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 var needsToBeNbspLeft = function (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);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$1(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return isText$1(container) && contains$1(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map(chars, function (chr, i) {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n var normalizeNbspAtStart = function (root, node) {\n var text = node.data;\n var firstPos = CaretPosition(node, 0);\n if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspInMiddleOfTextNode = function (node) {\n var text = node.data;\n var newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspAtEnd = function (root, node) {\n var text = node.data;\n var lastPos = CaretPosition(node, text.length - 1);\n if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbsps = function (root, pos) {\n return Optional.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Optional.some(pos) : Optional.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content, function (acc, c) {\n if (isWhiteSpace$1(c) || isNbsp(c)) {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var elm = SugarElement.fromDom(node);\n var root = ancestor(elm, isBlock).getOr(elm);\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n var isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n return normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n return normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace, mergeToPrev) {\n if (mergeToPrev === void 0) {\n mergeToPrev = true;\n }\n var whitespaceOffset = rTrim(prevNode.data).length;\n var newNode = mergeToPrev ? prevNode : nextNode;\n var removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset);\n }\n return newNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return isText$1(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n };\n var afterOrEndOf = function (node) {\n return isText$1(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.previousSibling)) {\n return Optional.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.nextSibling)) {\n return Optional.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return prevPosition(rootElement, startPosition).fold(function () {\n return nextPosition(rootElement, CaretPosition.after(elm));\n }, Optional.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return nextPosition(rootElement, CaretPosition.after(elm)).fold(function () {\n return prevPosition(rootElement, CaretPosition.before(elm));\n }, Optional.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition$1 = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection = function (editor, forward, pos) {\n pos.fold(function () {\n editor.focus();\n }, function (pos) {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n var eqRawNode = function (rawNode) {\n return function (elm) {\n return elm.dom === rawNode;\n };\n };\n var isBlock$2 = function (editor, elm) {\n return elm && has(editor.schema.getBlockElements(), name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (isEmpty(elm)) {\n var br = SugarElement.fromHtml('
');\n empty(elm);\n append(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText);\n var nextTextOpt = nextSibling(elm).filter(isText);\n remove(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom, nextNode = next.dom;\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom, elm.dom.length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom, 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement = function (editor, forward, elm, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\n var 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(function () {\n if (moveCaret) {\n setSelection(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n var tableCellRng = function (start, end) {\n return {\n start: start,\n end: end\n };\n };\n var tableSelection = function (rng, table, cells) {\n return {\n rng: rng,\n table: table,\n cells: cells\n };\n };\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] },\n {\n deleteCellSelection: [\n 'rng',\n 'cell'\n ]\n }\n ]);\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq$2(root, cur);\n };\n };\n var getClosestCell = function (container, isRoot) {\n return closest$1(SugarElement.fromDom(container), 'td,th', isRoot);\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$1(cell, 'table', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return !eq$2(cellRng.start, cellRng.end);\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start, isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end, isRoot).bind(function (endParentTable) {\n return someIf(eq$2(startParentTable, endParentTable), startParentTable);\n });\n });\n };\n var isSingleCellTable = function (cellRng, isRoot) {\n return !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(function (table) {\n var rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n var getCellRangeFromStartTable = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(cellRng.start, endCell);\n });\n });\n };\n var partialSelection = function (isRoot, rng) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return rng.collapsed ? Optional.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\n return startCell.fold(function () {\n return endCell.bind(function (endCell) {\n return getClosestTable(endCell, isRoot).bind(function (table) {\n return head(getTableCells(table)).map(function (startCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (cellRng) {\n return isWithinSameTable(isRoot, cellRng) ? Optional.none() : getCellRangeFromStartTable(cellRng, isRoot);\n });\n };\n var isWithinSameTable = function (isRoot, cellRng) {\n return getTableFromCellRng(cellRng, isRoot).isSome();\n };\n var getTableSelectionFromCellRng = function (cellRng, isRoot) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n var getTableSelection = function (optCellRng, rng, isRoot) {\n return optCellRng.filter(function (cellRng) {\n return isExpandedCellRng(cellRng) && isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n }).bind(function (cRng) {\n return getTableSelectionFromCellRng(cRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq$2(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) {\n return tableSelection.cells.slice(startIndex, endIndex + 1);\n });\n };\n var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) {\n return optCellRng.filter(function (cellRng) {\n return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng);\n }).map(function (cellRng) {\n return cellRng.start;\n });\n };\n var getAction = function (tableSelection) {\n return getSelectedCells(tableSelection).map(function (selected) {\n var cells = tableSelection.cells;\n return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table) : deleteAction.emptyCells(selected);\n });\n };\n var getActionFromRange = function (root, rng) {\n var isRoot = isRootFromElement(root);\n var optCellRng = getCellRng(rng, isRoot);\n return isSingleCellTableContentSelected(optCellRng, rng, isRoot).map(function (cell) {\n return deleteAction.deleteCellSelection(rng, cell);\n }).orThunk(function () {\n return getTableSelection(optCellRng, rng, isRoot).bind(getAction);\n });\n };\n\n var freefallRtl = function (root) {\n var child = isComment(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(function () {\n return Optional.some(root);\n });\n };\n var emptyCells = function (editor, cells) {\n each(cells, fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom, 0);\n return true;\n };\n var deleteCellContents = function (editor, rng, cell) {\n rng.deleteContents();\n var lastNode = freefallRtl(cell).getOr(cell);\n var lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));\n if (isEmpty(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n if (!eq$2(cell, lastBlock)) {\n var additionalCleanupNodes = parent(lastBlock).is(cell) ? [] : siblings(lastBlock);\n each(additionalCleanupNodes.concat(children(cell)), function (node) {\n if (!eq$2(node, lastBlock) && !contains$2(node, lastBlock)) {\n remove(node);\n }\n });\n }\n return true;\n };\n var deleteTableElement = function (editor, table) {\n deleteElement(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor), curry(deleteCellContents, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange = function (editor, startElm) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = getCellsFromEditor(editor);\n return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find(parentsAndSelf(elm, rootElm), isTableCell$1);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCell) {\n return eq$2(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n return Optional.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return firstPositionIn(fromCaption.dom).bind(function (first) {\n return lastPositionIn(fromCaption.dom).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCaption) {\n return eq$2(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Optional.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n }).getOr(false);\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var isNearTable = function (forward, pos) {\n return forward ? isBeforeTable(pos) : isAfterTable(pos);\n };\n var isBeforeOrAfterTable = function (editor, forward) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(function (pos) {\n return isNearTable(forward, pos);\n });\n };\n var deleteCaret = function (editor, forward, startElm) {\n var rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false);\n });\n };\n var backspaceDelete = function (editor, forward) {\n var startElm = SugarElement.fromDom(editor.selection.getStart(true));\n var cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange(editor, startElm);\n };\n\n var createRange$1 = function (sc, so, ec, eo) {\n var rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n var normalize$2 = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n\n var hasOnlyOneChild = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === nbsp;\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var 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.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems$1 = function (elm) {\n return Tools.grep(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === nbsp || isBr(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems$1(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n\n var trimOrPadLeftRight = function (dom, rng, html) {\n var root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\n }\n return html;\n };\n\n var isTableCell$4 = isTableCell;\n var isTableCellContentSelected = function (dom, rng, cell) {\n if (cell !== null) {\n var endCell = dom.getParent(rng.endContainer, isTableCell$4);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody(), elementUtils_1 = ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var unmarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n var parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n var node = marker.previousSibling;\n if (node && node.nodeType === 3) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n node2 = marker.nextSibling;\n if (node2 && node2.nodeType === 3) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n var parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$4(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 var deleteSelectedContent = function (editor) {\n var dom = editor.dom;\n var rng = normalize$2(editor.selection.getRng());\n editor.selection.setRng(rng);\n var startCell = dom.getParent(rng.startContainer, isTableCell$4);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else {\n editor.getDoc().execCommand('Delete', false, null);\n }\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parentNode, rootNode, args;\n var marker, rng, node;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(dom, selection.getRng(), value);\n }\n var parser = editor.parser;\n var merge = details.merge;\n var serializer = HtmlSerializer({ validate: shouldValidate(editor) }, editor.schema);\n var bookmarkHtml = '';\n args = {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n };\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var 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 parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n var fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = insertAtCaret(serializer, dom, selection.getRng(), fragment);\n selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (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 parentNode = selection.getNode();\n rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\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 editor.fire('SetContent', args);\n editor.addVisual();\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name_1 in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name_1)) {\n matches.push(nodeMatches[name_1]);\n }\n }\n for (var name_2 in attrMatches) {\n if (attrMatches.hasOwnProperty(name_2)) {\n matches.push(attrMatches[name_2]);\n }\n }\n return matches;\n };\n var filter$3 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each(matches, function (match) {\n each(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat = 'html';\n var isTreeNode = function (content) {\n return content instanceof AstNode;\n };\n var moveSelection = function (editor) {\n if (hasFocus$1(editor)) {\n firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html) {\n editor.dom.setHTML(editor.getBody(), html);\n moveSelection(editor);\n };\n var setContentString = function (editor, body, content, args) {\n var forcedRootBlockName, padd;\n if (content.length === 0 || /^\\s+$/.test(content)) {\n padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && 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 = '
    ';\n }\n setEditorHtml(editor, content);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n }\n return args.content;\n };\n var setContentTree = function (editor, body, content, args) {\n filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setContentInternal = function (editor, content, args) {\n args.format = args.format ? args.format : defaultFormat;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!args.no_events) {\n editor.fire('BeforeSetContent', args);\n }\n if (!isTreeNode(content)) {\n content = args.content;\n }\n return Optional.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\n });\n };\n\n var sibling$2 = function (scope, predicate) {\n return sibling(scope, predicate).isSome();\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor$3 = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var 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 var closest$2 = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor$3(scope, transform, stop);\n });\n };\n\n var isEq$2 = isEq;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return matchNode(editor, node, name, vars);\n };\n var matchName = function (dom, node, format) {\n if (isEq$2(node, format.inline)) {\n return true;\n }\n if (isEq$2(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var key, value;\n var items = format[itemName];\n var i;\n if (format.onmatch) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (typeof items.length === 'undefined') {\n for (key in items) {\n if (items.hasOwnProperty(key)) {\n if (itemName === 'attributes') {\n value = dom.getAttrib(node, key);\n } else {\n value = getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, normalizeStyleValue(dom, replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n 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 if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n if (node) {\n return matchParents(editor, node, name, vars);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars)) {\n return true;\n }\n var startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var matchedFormatNames = [];\n var checkedMap = {};\n var startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) {\n checkedMap[name_1] = true;\n matchedFormatNames.push(name_1);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var closest$3 = function (editor, names) {\n var isRoot = function (elm) {\n return eq$2(elm, SugarElement.fromDom(editor.getBody()));\n };\n var match = function (elm, name) {\n return matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n };\n return Optional.from(editor.selection.getStart(true)).bind(function (rawElm) {\n return closest$2(SugarElement.fromDom(rawElm), function (elm) {\n return findMap(names, function (name) {\n return match(elm, name);\n });\n }, isRoot);\n }).getOrNull();\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var startNode, parents, i, x, selector;\n var dom = editor.dom;\n if (formatList) {\n startNode = editor.selection.getStart();\n parents = getParents$1(dom, startNode);\n for (x = formatList.length - 1; x >= 0; x--) {\n selector = formatList[x].selector;\n if (!selector || formatList[x].defaultBlock) {\n return true;\n }\n for (i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n var matchAllOnNode = function (editor, node, formatNames) {\n return foldl(formatNames, function (acc, name) {\n var 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\n var ZWSP$1 = ZWSP, CARET_ID$1 = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n if (node) {\n var walker = new DomTreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (isText$1(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = SugarElement.fromTag('span');\n setAll(caretContainer, {\n 'id': CARET_ID$1,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append(caretContainer, SugarElement.fromText(ZWSP$1));\n }\n return caretContainer;\n };\n var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n var removeCaretContainerNode = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement(editor, false, SugarElement.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var 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 var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var 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$1)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(isTextBlock$1, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\n };\n var cleanFormatNode = function (editor, caretContainer, formatNode, name, vars, similar) {\n var formatter = editor.formatter;\n var dom = editor.dom;\n var validFormats = filter(keys(formatter.get()), function (formatName) {\n return formatName !== name && !contains$1(formatName, 'removeformat');\n });\n var matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n var uniqueFormats = filter(matchedFormats, function (fmtName) {\n return !areSimilarFormats(editor, fmtName, name);\n });\n if (uniqueFormats.length > 0) {\n var 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 var applyCaretFormat = function (editor, name, vars) {\n var caretContainer, textNode;\n var selection = editor.selection;\n var selectionRng = selection.getRng();\n var offset = selectionRng.startOffset;\n var container = selectionRng.startContainer;\n var text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var 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 var bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n var rng = expandRng(editor, selectionRng, editor.formatter.get(name));\n rng = split$1(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\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 var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom;\n var selection = editor.selection;\n var hasContentAfter, node, formatNode;\n var parents = [];\n var rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\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 var bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = split$1(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n var caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode);\n var cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n var caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretTextNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$3 = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n before(SugarElement.fromDom(targetNode), caretContainer);\n remove(SugarElement.fromDom(targetNode));\n return CaretPosition(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom) && !isBogus(element.dom);\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n var postProcessHooks = {};\n var filter$4 = filter$2;\n var each$8 = each$2;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess = function (name, editor) {\n each$8(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

    ').append(pre2.childNodes);\n };\n var isPre = matchNodeNames(['pre']);\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$8(filter$4(filter$4(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n var each$9 = Tools.each;\n var isElementNode = function (node) {\n return isElement$1(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$1(sibling) && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (isElement$1(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = ElementUtils(dom);\n if (prev && next) {\n prev = findElementSibling(prev, 'previousSibling');\n next = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prev, next)) {\n for (sibling = prev.nextSibling; sibling && sibling !== next;) {\n tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prev.appendChild(tmpSibling);\n }\n dom.remove(next);\n Tools.each(Tools.grep(next.childNodes), function (node) {\n prev.appendChild(node);\n });\n return prev;\n }\n }\n return next;\n };\n var mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n var newNode = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node);\n mergeSiblingsNodes(dom, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$9(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$9(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var processChildElements = function (node, filter, process) {\n each$9(node.childNodes, function (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 var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var hasStyle = function (dom, name) {\n return function (node) {\n return !!(node && getStyle(dom, node, name));\n };\n };\n var applyStyle = function (dom, name, value) {\n return function (node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n };\n\n var removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$a = Tools.each;\n var isEq$3 = isEq;\n var isTableCellOrRow = function (node) {\n return /^(TR|TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$1(container)) {\n var lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$1(container) && start && offset >= container.nodeValue.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$1(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var normalizeTableSelection = function (node, start) {\n var prop = start ? 'firstChild' : 'lastChild';\n if (isTableCellOrRow(node) && node[prop]) {\n var childNode = node[prop];\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n var wrap$2 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = SugarElement.fromDom(node);\n var wrapper = SugarElement.fromDom(dom.create(name, attrs));\n var siblings = next ? nextSiblings(start) : prevSiblings(start);\n append$1(wrapper, siblings);\n if (next) {\n before(start, wrapper);\n prepend(wrapper, start);\n } else {\n after(start, wrapper);\n append(wrapper, start);\n }\n return wrapper.dom;\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$3(node, format.inline)) {\n return true;\n }\n if (isEq$3(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return isElement$1(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.nodeName === 'A';\n };\n var find$3 = function (dom, node, next, inc) {\n node = getNonWhiteSpaceSibling(node, next, inc);\n return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n };\n var removeNode$1 = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = getForcedRootBlock(ed);\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, true)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, true)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$3(node, format.list_block)) {\n each(from$1(node.childNodes), function (node) {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = 0;\n }\n });\n }\n }\n }\n }\n if (format.selector && format.inline && !isEq$3(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n var removeFormatInternal = function (ed, format, vars, node, compareNode) {\n var stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n var elm = node;\n if (format.inline && format.remove === 'all' && isArray(format.preserve_attributes)) {\n var attrsToPreserve = filter(dom.getAttribs(elm), function (attr) {\n return contains(format.preserve_attributes, attr.name.toLowerCase());\n });\n dom.removeAllAttribs(elm);\n each(attrsToPreserve, function (attr) {\n return dom.setAttrib(elm, attr.name, attr.value);\n });\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n each$a(format.styles, function (value, name) {\n value = normalizeStyleValue(dom, replaceVars(value, vars), name + '');\n if (isNumber(name)) {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$3(getStyle(dom, compareNode, name), value))) {\n dom.setStyle(elm, name, '');\n }\n stylesModified = true;\n });\n if (stylesModified && dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n each$a(format.attributes, function (value, name) {\n var valueOut;\n value = replaceVars(value, vars);\n if (isNumber(name)) {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$3(dom.getAttrib(compareNode, name), value))) {\n if (name === 'class') {\n value = dom.getAttrib(elm, name);\n if (value) {\n valueOut = '';\n each(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n elm.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n elm.removeAttribute(name);\n }\n });\n each$a(format.classes, function (value) {\n value = replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n var attrs = dom.getAttribs(elm);\n for (var i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n return removeResult.keep();\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, elm, format);\n return removeResult.removed();\n }\n return removeResult.keep();\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n return removeFormatInternal(ed, format, vars, node, compareNode).fold(never, function (newName) {\n ed.dom.rename(node, newName);\n return true;\n }, always);\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each(getParents$1(editor.dom, container.parentNode).reverse(), function (parent) {\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n var format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var removeFormatFromClone = function (editor, format, vars, clone) {\n return removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), function (newName) {\n var fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var clone, lastClone, firstClone;\n var dom = editor.dom;\n if (formatRoot) {\n var formatRootParent = formatRoot.parentNode;\n for (var parent_1 = container.parentNode; parent_1 && parent_1 !== formatRootParent; parent_1 = parent_1.parentNode) {\n clone = dom.clone(parent_1, false);\n for (var 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 = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (format.inline) {\n mergeSiblings(dom, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n var remove$6 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return isBookmarkNode$1(node) && isElement$1(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var lastContentEditable, hasContentEditableState;\n if (isElement$1(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n var children = from$1(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (var i = 0; i < formatList.length; i++) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n if (format.deep) {\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$1(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 };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var expandedRng = expandRng(ed, rng, formatList, rng.collapsed);\n if (format.split) {\n expandedRng = split$1(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 var 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 var 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$2(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$2(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n var newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$1(dom, newRng, function (nodes) {\n each(nodes, function (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$1(dom, expandedRng, function (nodes) {\n each(nodes, function (node) {\n process(node);\n var textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each(textDecorations, function (decoration) {\n if (isElement$1(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, null, node);\n }\n });\n });\n });\n };\n if (node) {\n if (isNode(node)) {\n var rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n return;\n }\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n return;\n }\n if (!selection.isCollapsed() || !format.inline || getCellsFromEditor(ed).length) {\n preserve(selection, true, function () {\n runOnRanges(ed, removeRngStyle);\n });\n if (format.inline && match(ed, name, vars, selection.getStart())) {\n moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n\n var each$b = Tools.each;\n var mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n var processTextDecorationsAndColor = function (n) {\n if (n.nodeType === 1 && n.parentNode && n.parentNode.nodeType === 1) {\n var textDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && textDecoration) {\n dom.setStyle(n, 'text-decoration', textDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === textDecoration) {\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 var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (format.inline === 'sub' || format.inline === 'sup') {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$b(formatList, function (format) {\n each$b(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n removeFormat(editor, format, vars, child, format.exact ? child : null);\n });\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (matchNode(editor, node.parentNode, name, vars)) {\n if (removeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (matchNode(editor, parent, name, vars)) {\n removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n\n var each$c = Tools.each;\n var hasFormatProperty = function (format, prop) {\n return hasNonNullableKey(format, prop);\n };\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus(node);\n };\n var canFormatBR = function (editor, format, node, parentName) {\n if (canFormatEmptyLines(editor) && isInlineFormat(format)) {\n var validBRParentElements = __assign(__assign({}, editor.schema.getTextBlockElements()), {\n td: {},\n th: {},\n li: {},\n dt: {},\n dd: {},\n figcaption: {},\n caption: {},\n details: {},\n summary: {}\n });\n var hasCaretNodeSibling = sibling$2(SugarElement.fromDom(node), function (sibling) {\n return isCaretNode(sibling.dom);\n });\n return hasNonNullableKey(validBRParentElements, parentName) && isEmpty(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n var applyFormat = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom;\n var selection = ed.selection;\n var setElementFormat = function (elm, fmt) {\n fmt = fmt || format;\n if (elm) {\n if (fmt.onformat) {\n fmt.onformat(elm, fmt, vars, node);\n }\n each$c(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n each$c(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$c(fmt.classes, function (value) {\n value = replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n }\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n if (!isSelectorFormat(format)) {\n return false;\n }\n each$c(formatList, function (format) {\n if ('collapsed' in format && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n var newWrappers = [];\n var contentEditable = true;\n var wrapName = format.inline || format.block;\n var wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n walk$1(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var hasContentEditableState = false;\n var lastContentEditable = contentEditable;\n var nodeName = node.nodeName.toLowerCase();\n var parentName = node.parentNode.nodeName.toLowerCase();\n if (isElement$1(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (isBr(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && matchNode(ed, node, name, vars)) {\n currentWrapElm = null;\n return;\n }\n if (contentEditable && !hasContentEditableState && isBlockFormat(format) && !format.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) {\n var elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n var found = applyNodeStyle(formatList, node);\n if (!hasFormatProperty(format, 'inline') || found) {\n currentWrapElm = null;\n return;\n }\n }\n if (contentEditable && !hasContentEditableState && isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!hasFormatProperty(format, 'inline') || !dom.isBlock(node))) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n node.parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$c(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$c(nodes, process);\n });\n if (format.links === true) {\n each$c(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$c(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$c(newWrappers, function (node) {\n var getChildCount = function (node) {\n var count = 0;\n each$c(node.childNodes, function (node) {\n if (!isEmptyTextNode(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$c(root.childNodes, function (node) {\n if (isElementNode$1(node)) {\n child = node;\n return false;\n }\n });\n return child;\n };\n var mergeStyles = function (node) {\n var clone;\n var child = getChildElementNode(node);\n if (child && !isBookmarkNode$1(child) && matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n }\n return clone || node;\n };\n var 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) || 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(dom, format, vars, node);\n }\n });\n };\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n var formatItem = formatList[i];\n if (formatItem.ceFalseOverride && isSelectorFormat(formatItem) && dom.is(node, formatItem.selector)) {\n setElementFormat(node, formatItem);\n return;\n }\n }\n return;\n }\n if (format) {\n if (node) {\n if (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n var rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(ed, rng, formatList), null, true);\n }\n } else {\n applyRngStyle(dom, node, null, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n var curSelNode = selection.getNode();\n var firstFormat = formatList[0];\n if (!ed.settings.forced_root_block && firstFormat.defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat(ed, firstFormat.defaultBlock);\n }\n selection.setRng(normalize$2(selection.getRng()));\n preserve(selection, true, function (bookmark) {\n runOnRanges(ed, function (selectionRng, fake) {\n var expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n applyRngStyle(dom, expandedRng);\n });\n });\n moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n postProcess(name, ed);\n }\n };\n\n var setup$4 = function (registeredFormatListeners, editor) {\n var currentFormats = Cell({});\n registeredFormatListeners.set({});\n editor.on('NodeChange', function (e) {\n updateAndFireChangeCallbacks(editor, e.element, currentFormats, registeredFormatListeners.get());\n });\n };\n var updateAndFireChangeCallbacks = function (editor, elm, currentFormats, formatChangeData) {\n var formatsList = keys(currentFormats.get());\n var newFormats = {};\n var matchedFormats = {};\n var parents = filter(getParents$1(editor.dom, elm), function (node) {\n return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n });\n each$1(formatChangeData, function (data, format) {\n Tools.each(parents, function (node) {\n if (editor.formatter.matchNode(node, format, {}, data.similar)) {\n if (formatsList.indexOf(format) === -1) {\n each(data.callbacks, function (callback) {\n callback(true, {\n node: node,\n format: format,\n parents: parents\n });\n });\n newFormats[format] = data.callbacks;\n }\n matchedFormats[format] = data.callbacks;\n return false;\n }\n if (matchesUnInheritedFormatSelector(editor, node, format)) {\n return false;\n }\n });\n });\n var remainingFormats = filterRemainingFormats(currentFormats.get(), matchedFormats, elm, parents);\n currentFormats.set(__assign(__assign({}, newFormats), remainingFormats));\n };\n var filterRemainingFormats = function (currentFormats, matchedFormats, elm, parents) {\n return bifilter(currentFormats, function (callbacks, format) {\n if (!has(matchedFormats, format)) {\n each(callbacks, function (callback) {\n callback(false, {\n node: elm,\n format: format,\n parents: parents\n });\n });\n return false;\n } else {\n return true;\n }\n }).t;\n };\n var addListeners = function (registeredFormatListeners, formats, callback, similar) {\n var formatChangeItems = registeredFormatListeners.get();\n each(formats.split(','), function (format) {\n if (!formatChangeItems[format]) {\n formatChangeItems[format] = {\n similar: similar,\n callbacks: []\n };\n }\n formatChangeItems[format].callbacks.push(callback);\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var removeListeners = function (registeredFormatListeners, formats, callback) {\n var formatChangeItems = registeredFormatListeners.get();\n each(formats.split(','), function (format) {\n formatChangeItems[format].callbacks = filter(formatChangeItems[format].callbacks, function (c) {\n return c !== callback;\n });\n if (formatChangeItems[format].callbacks.length === 0) {\n delete formatChangeItems[format];\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var formatChangedInternal = function (editor, registeredFormatListeners, formats, callback, similar) {\n if (registeredFormatListeners.get() === null) {\n setup$4(registeredFormatListeners, editor);\n }\n addListeners(registeredFormatListeners, formats, callback, similar);\n return {\n unbind: function () {\n return removeListeners(registeredFormatListeners, formats, callback);\n }\n };\n };\n\n var toggle = function (editor, name, vars, node) {\n var fmt = editor.formatter.get(name);\n if (match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$6(editor, name, vars, node);\n } else {\n applyFormat(editor, name, vars, node);\n }\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n var tableModel = function (element, width, rows) {\n return {\n element: element,\n width: width,\n rows: rows\n };\n };\n var tableRow = function (element, cells) {\n return {\n element: element,\n cells: cells\n };\n };\n var cellPosition = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var getSpan = function (td, key) {\n var value = parseInt(get$4(td, key), 10);\n return isNaN(value) ? 1 : value;\n };\n var fillout = function (table, x, y, tr, td) {\n var rowspan = getSpan(td, 'rowspan');\n var colspan = getSpan(td, 'colspan');\n var rows = table.rows;\n for (var y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep(tr), []);\n }\n for (var x2 = x; x2 < x + colspan; x2++) {\n var cells = rows[y2].cells;\n cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n }\n }\n };\n var cellExists = function (table, x, y) {\n var rows = table.rows;\n var cells = rows[y] ? rows[y].cells : [];\n return !!cells[x];\n };\n var skipCellsX = function (table, x, y) {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n var getWidth = function (rows) {\n return foldl(rows, function (acc, row) {\n return row.cells.length > acc ? row.cells.length : acc;\n }, 0);\n };\n var findElementPos = function (table, element) {\n var rows = table.rows;\n for (var y = 0; y < rows.length; y++) {\n var cells = rows[y].cells;\n for (var x = 0; x < cells.length; x++) {\n if (eq$2(cells[x], element)) {\n return Optional.some(cellPosition(x, y));\n }\n }\n }\n return Optional.none();\n };\n var extractRows = function (table, sx, sy, ex, ey) {\n var newRows = [];\n var rows = table.rows;\n for (var y = sy; y <= ey; y++) {\n var cells = rows[y].cells;\n var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element, slice));\n }\n return newRows;\n };\n var subTable = function (table, startPos, endPos) {\n var sx = startPos.x, sy = startPos.y;\n var ex = endPos.x, ey = endPos.y;\n var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element, getWidth(newRows), newRows);\n };\n var createDomTable = function (table, rows) {\n var tableElement = shallow(table.element);\n var tableBody = SugarElement.fromTag('tbody');\n append$1(tableBody, rows);\n append(tableElement, tableBody);\n return tableElement;\n };\n var modelRowsToDomRows = function (table) {\n return map(table.rows, function (row) {\n var cells = map(row.cells, function (cell) {\n var td = deep(cell);\n remove$1(td, 'colspan');\n remove$1(td, 'rowspan');\n return td;\n });\n var tr = shallow(row.element);\n append$1(tr, cells);\n return tr;\n });\n };\n var fromDom$1 = function (tableElm) {\n var table = tableModel(shallow(tableElm), 0, []);\n each(descendants$1(tableElm, 'tr'), function (tr, y) {\n each(descendants$1(tr, 'td,th'), function (td, x) {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element, getWidth(table.rows), table.rows);\n };\n var toDom = function (table) {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n var subsection = function (table, startElement, endElement) {\n return findElementPos(table, startElement).bind(function (startPos) {\n return findElementPos(table, endElement).map(function (endPos) {\n return subTable(table, startPos, endPos);\n });\n });\n };\n\n var findParentListContainer = function (parents) {\n return find(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (_li) {\n return findParentListContainer(parents).map(function (listCont) {\n var listElm = SugarElement.fromTag(name(listCont));\n var listStyles = filter$1(getAllRaw(listCont), function (_style, name) {\n return startsWith(name, 'list-style');\n });\n setAll$1(listElm, listStyles);\n return [\n SugarElement.fromTag('li'),\n listElm\n ];\n }).getOr([]);\n });\n };\n var wrap$3 = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n var parents = parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter(parents, function (elm) {\n return isInline(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap$3(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq$2, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = fromDom$1(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$1 = function (rootNode, ranges) {\n var selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n\n var trimLeadingCollapsibleText = function (text) {\n return text.replace(/^[ \\f\\n\\r\\t\\v]+/, '');\n };\n var isCollapsibleWhitespace = function (text, index) {\n return index >= 0 && index < text.length && isWhiteSpace$1(text.charAt(index));\n };\n var getInnerText = function (bin, shouldTrim) {\n var text = trim$2(bin.innerText);\n return shouldTrim ? trimLeadingCollapsibleText(text) : text;\n };\n var getContextNodeName = function (parentBlockOpt) {\n return parentBlockOpt.map(function (block) {\n return block.nodeName;\n }).getOr('div').toLowerCase();\n };\n var getTextContent = function (editor) {\n return Optional.from(editor.selection.getRng()).map(function (rng) {\n var parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n var body = editor.getBody();\n var contextNodeName = getContextNodeName(parentBlockOpt);\n var shouldTrimSpaces = Env.browser.isIE() && contextNodeName !== 'pre';\n var bin = editor.dom.add(body, contextNodeName, {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = getInnerText(bin, shouldTrimSpaces);\n var nonRenderedText = trim$2(bin.textContent);\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n var parentBlock = parentBlockOpt.getOr(body);\n var parentBlockText = getInnerText(parentBlock, shouldTrimSpaces);\n var textIndex = parentBlockText.indexOf(text);\n if (textIndex === -1) {\n return text;\n } else {\n var hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n var hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n }\n } else {\n return text;\n }\n }).getOr('');\n };\n var getSerializedContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var ranges = processRanges(editor, getRanges(sel));\n var fragment = args.contextual ? read$1(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n var getSelectedContentInternal = function (editor, format, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = format;\n args.selection = true;\n args = editor.fire('BeforeGetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('GetContent', args);\n return args.content;\n }\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n args.getInner = true;\n var content = getSerializedContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n args.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', args);\n return args.content;\n }\n }\n };\n\n var KEEP = 0, INSERT = 1, DELETE = 2;\n var diff = function (left, right) {\n var size = left.length + right.length + 2;\n var vDown = new Array(size);\n var vUp = new Array(size);\n var snake = function (start, end, diag) {\n return {\n start: start,\n end: end,\n diag: diag\n };\n };\n var buildScript = function (start1, end1, start2, end2, script) {\n var middle = getMiddleSnake(start1, end1, start2, end2);\n if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n var i = start1;\n var j = start2;\n while (i < end1 || j < end2) {\n if (i < end1 && j < end2 && left[i] === right[j]) {\n script.push([\n KEEP,\n left[i]\n ]);\n ++i;\n ++j;\n } else {\n if (end1 - start1 > end2 - start2) {\n script.push([\n DELETE,\n left[i]\n ]);\n ++i;\n } else {\n script.push([\n INSERT,\n right[j]\n ]);\n ++j;\n }\n }\n }\n } else {\n buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n for (var i2 = middle.start; i2 < middle.end; ++i2) {\n script.push([\n KEEP,\n left[i2]\n ]);\n }\n buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n }\n };\n var buildSnake = function (start, diag, end1, end2) {\n var end = start;\n while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n ++end;\n }\n return snake(start, end, diag);\n };\n var getMiddleSnake = function (start1, end1, start2, end2) {\n var m = end1 - start1;\n var n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n var delta = m - n;\n var sum = n + m;\n var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n var d, k, i, x, y;\n for (d = 0; d <= offset; ++d) {\n for (k = -d; k <= d; k += 2) {\n i = k + offset;\n if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n vDown[i] = vDown[i + 1];\n } else {\n vDown[i] = vDown[i - 1] + 1;\n }\n x = vDown[i];\n y = x - start1 + start2 - k;\n while (x < end1 && y < end2 && left[x] === right[y]) {\n vDown[i] = ++x;\n ++y;\n }\n if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n if (vUp[i - delta] <= vDown[i]) {\n return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n }\n }\n }\n for (k = delta - d; k <= delta + d; k += 2) {\n i = k + offset - delta;\n if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n vUp[i] = vUp[i + 1] - 1;\n } else {\n vUp[i] = vUp[i - 1];\n }\n x = vUp[i] - 1;\n y = x - start1 + start2 - k;\n while (x >= start1 && y >= start2 && left[x] === right[y]) {\n vUp[i] = x--;\n y--;\n }\n if (delta % 2 === 0 && -d <= k && k <= d) {\n if (vUp[i] <= vDown[i + delta]) {\n return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n }\n }\n }\n }\n };\n var script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n var getOuterHtml = function (elm) {\n if (isElement$1(elm)) {\n return elm.outerHTML;\n } else if (isText$1(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment$1(elm)) {\n return '';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var node;\n var container = document.createElement('div');\n var frag = document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var insertAt = function (elm, html, index) {\n var fragment = createFragment$1(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n var removeAt = function (elm, index) {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.removeChild(target);\n }\n };\n var applyDiff = function (diff, elm) {\n var index = 0;\n each(diff, function (action) {\n if (action[0] === KEEP) {\n index++;\n } else if (action[0] === INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === DELETE) {\n removeAt(elm, index);\n }\n });\n };\n var read$2 = function (elm) {\n return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n var undoLevelDocument = Cell(Optional.none());\n var lazyTempDocument = function () {\n return undoLevelDocument.get().getOrThunk(function () {\n var doc = document.implementation.createHTMLDocument('undo');\n undoLevelDocument.set(Optional.some(doc));\n return doc;\n });\n };\n var hasIframes = function (html) {\n return html.indexOf('') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments = read$2(editor.getBody());\n var trimmedFragments = bind(fragments, function (html) {\n var trimmed = trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n var content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n if (level.type === 'fragmented') {\n write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, { format: 'raw' });\n }\n editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = SugarElement.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n return get$7(elm);\n };\n var hasEqualContent = function (level1, level2) {\n return getLevelContent(level1) === getLevelContent(level2);\n };\n var hasEqualCleanedContent = function (level1, level2) {\n return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n };\n var isEq$4 = function (level1, level2) {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n\n var isUnlocked = function (locks) {\n return locks.get() === 0;\n };\n\n var setTyping = function (undoManager, typing, locks) {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n var endTyping = function (undoManager, locks) {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n var endTypingLevelIgnoreLocks = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n var beforeChange = function (editor, locks, beforeBookmark) {\n if (isUnlocked(locks)) {\n beforeBookmark.set(Optional.some(getUndoBookmark(editor.selection)));\n }\n };\n var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n var currentLevel = createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked(locks) === false || editor.removed) {\n return null;\n }\n var lastLevel = undoManager.data[index.get()];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$4(lastLevel, level)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(function (bm) {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n var customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (var i = 0; i < undoManager.data.length - 1; i++) {\n undoManager.data[i] = undoManager.data[i + 1];\n }\n undoManager.data.length--;\n index.set(undoManager.data.length);\n }\n }\n level.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(level);\n index.set(undoManager.data.length - 1);\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.fire('AddUndo', args);\n editor.fire('change', args);\n } else {\n editor.fire('AddUndo', args);\n }\n return level;\n };\n var clear = function (editor, undoManager, index) {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.fire('ClearUndos');\n };\n var extra = function (editor, undoManager, index, callback1, callback2) {\n if (undoManager.transact(callback1)) {\n var bookmark = undoManager.data[index.get()].bookmark;\n var lastLevel = undoManager.data[index.get() - 1];\n applyToEditor(editor, lastLevel, true);\n if (undoManager.transact(callback2)) {\n undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n }\n }\n };\n var redo = function (editor, index, data) {\n var level;\n if (index.get() < data.length - 1) {\n index.set(index.get() + 1);\n level = data[index.get()];\n applyToEditor(editor, level, false);\n editor.setDirty(true);\n editor.fire('Redo', { level: level });\n }\n return level;\n };\n var undo = function (editor, undoManager, locks, index) {\n var level;\n if (undoManager.typing) {\n undoManager.add();\n undoManager.typing = false;\n setTyping(undoManager, false, locks);\n }\n if (index.get() > 0) {\n index.set(index.get() - 1);\n level = undoManager.data[index.get()];\n applyToEditor(editor, level, true);\n editor.setDirty(true);\n editor.fire('Undo', { level: level });\n }\n return level;\n };\n var reset = function (undoManager) {\n undoManager.clear();\n undoManager.add();\n };\n var hasUndo = function (editor, undoManager, index) {\n return index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$4(createFromEditor(editor), undoManager.data[0]);\n };\n var hasRedo = function (undoManager, index) {\n return index.get() < undoManager.data.length - 1 && !undoManager.typing;\n };\n var transact = function (undoManager, locks, callback) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n var ignore = function (locks, callback) {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n var addVisualInternal = function (editor, elm) {\n var dom = editor.dom;\n var scope = isNonNullable(elm) ? elm : editor.getBody();\n if (isUndefined(editor.hasVisual)) {\n editor.hasVisual = isVisualAidsEnabled(editor);\n }\n each(dom.select('table,a', scope), function (matchedElm) {\n switch (matchedElm.nodeName) {\n case 'TABLE':\n var cls = getVisualAidsTableClass(editor);\n var value = dom.getAttrib(matchedElm, 'border');\n if ((!value || value === '0') && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n break;\n case 'A':\n if (!dom.getAttrib(matchedElm, 'href')) {\n var value_1 = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n var cls_1 = getVisualAidsAnchorClass(editor);\n if (value_1 && editor.hasVisual) {\n dom.addClass(matchedElm, cls_1);\n } else {\n dom.removeClass(matchedElm, cls_1);\n }\n }\n break;\n }\n });\n editor.fire('VisualAid', {\n element: elm,\n hasVisual: editor.hasVisual\n });\n };\n\n var makePlainAdaptor = function (editor) {\n return {\n undoManager: {\n beforeChange: function (locks, beforeBookmark) {\n return beforeChange(editor, locks, beforeBookmark);\n },\n addUndoLevel: function (undoManager, index, locks, beforeBookmark, level, event) {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function (undoManager, locks, index) {\n return undo(editor, undoManager, locks, index);\n },\n redo: function (index, data) {\n return redo(editor, index, data);\n },\n clear: function (undoManager, index) {\n return clear(editor, undoManager, index);\n },\n reset: function (undoManager) {\n return reset(undoManager);\n },\n hasUndo: function (undoManager, index) {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: function (undoManager, index) {\n return hasRedo(undoManager, index);\n },\n transact: function (undoManager, locks, callback) {\n return transact(undoManager, locks, callback);\n },\n ignore: function (locks, callback) {\n return ignore(locks, callback);\n },\n extra: function (undoManager, index, callback1, callback2) {\n return extra(editor, undoManager, index, callback1, callback2);\n }\n },\n formatter: {\n match: function (name, vars, node) {\n return match(editor, name, vars, node);\n },\n matchAll: function (names, vars) {\n return matchAll(editor, names, vars);\n },\n matchNode: function (node, name, vars, similar) {\n return matchNode(editor, node, name, vars, similar);\n },\n canApply: function (name) {\n return canApply(editor, name);\n },\n closest: function (names) {\n return closest$3(editor, names);\n },\n apply: function (name, vars, node) {\n return applyFormat(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n return remove$6(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n return toggle(editor, name, vars, node);\n },\n formatChanged: function (registeredFormatListeners, formats, callback, similar) {\n return formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar);\n }\n },\n editor: {\n getContent: function (args, format) {\n return getContentInternal(editor, args, format);\n },\n setContent: function (content, args) {\n return setContentInternal(editor, content, args);\n },\n insertContent: function (value, details) {\n return insertHtmlAtCaret(editor, value, details);\n },\n addVisual: function (elm) {\n return addVisualInternal(editor, elm);\n }\n },\n selection: {\n getContent: function (format, args) {\n return getSelectedContentInternal(editor, format, args);\n }\n },\n raw: {\n getModel: function () {\n return Optional.none();\n }\n }\n };\n };\n var makeRtcAdaptor = function (rtcEditor) {\n var defaultVars = function (vars) {\n return isObject(vars) ? vars : {};\n };\n var unsupported = die('Unimplemented feature for rtc');\n var undoManager = rtcEditor.undoManager, formatter = rtcEditor.formatter, editor = rtcEditor.editor, selection = rtcEditor.selection, raw = rtcEditor.raw;\n var ignore = noop;\n return {\n undoManager: {\n beforeChange: ignore,\n addUndoLevel: unsupported,\n undo: function () {\n return undoManager.undo();\n },\n redo: function () {\n return undoManager.redo();\n },\n clear: function () {\n return undoManager.clear();\n },\n reset: function () {\n return undoManager.reset();\n },\n hasUndo: function () {\n return undoManager.hasUndo();\n },\n hasRedo: function () {\n return undoManager.hasRedo();\n },\n transact: function (_undoManager, _locks, fn) {\n return undoManager.transact(fn);\n },\n ignore: function (_locks, callback) {\n return undoManager.ignore(callback);\n },\n extra: function (_undoManager, _index, callback1, callback2) {\n return undoManager.extra(callback1, callback2);\n }\n },\n formatter: {\n match: function (name, vars, _node) {\n return formatter.match(name, defaultVars(vars));\n },\n matchAll: unsupported,\n matchNode: unsupported,\n canApply: function (name) {\n return formatter.canApply(name);\n },\n closest: function (names) {\n return formatter.closest(names);\n },\n apply: function (name, vars, _node) {\n return formatter.apply(name, defaultVars(vars));\n },\n remove: function (name, vars, _node, _similar) {\n return formatter.remove(name, defaultVars(vars));\n },\n toggle: function (name, vars, _node) {\n return formatter.toggle(name, defaultVars(vars));\n },\n formatChanged: function (_rfl, formats, callback, similar) {\n return formatter.formatChanged(formats, callback, similar);\n }\n },\n editor: {\n getContent: function (args, _format) {\n return editor.getContent(args);\n },\n setContent: function (content, args) {\n return editor.setContent(content, args);\n },\n insertContent: function (content, _details) {\n return editor.insertContent(content);\n },\n addVisual: ignore\n },\n selection: {\n getContent: function (_format, args) {\n return selection.getContent(args);\n }\n },\n raw: {\n getModel: function () {\n return Optional.some(raw.getRawModel());\n }\n }\n };\n };\n var makeNoopAdaptor = function () {\n var nul = constant(null);\n var empty = constant('');\n return {\n undoManager: {\n beforeChange: noop,\n addUndoLevel: nul,\n undo: nul,\n redo: nul,\n clear: noop,\n reset: noop,\n hasUndo: never,\n hasRedo: never,\n transact: nul,\n ignore: noop,\n extra: noop\n },\n formatter: {\n match: never,\n matchAll: constant([]),\n matchNode: never,\n canApply: never,\n closest: empty,\n apply: noop,\n remove: noop,\n toggle: noop,\n formatChanged: constant({ unbind: noop })\n },\n editor: {\n getContent: empty,\n setContent: empty,\n insertContent: noop,\n addVisual: noop\n },\n selection: { getContent: empty },\n raw: { getModel: constant(Optional.none()) }\n };\n };\n var isRtc = function (editor) {\n return has(editor.plugins, 'rtc');\n };\n var setup$5 = function (editor) {\n var editorCast = editor;\n return get$1(editor.plugins, 'rtc').fold(function () {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, function (rtc) {\n return Optional.some(rtc.setup().then(function (rtcEditor) {\n editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n return rtcEditor.rtc.isRemote;\n }, function (err) {\n editorCast.rtcInstance = makeNoopAdaptor();\n return promiseObj.reject(err);\n }));\n });\n };\n var getRtcInstanceWithFallback = function (editor) {\n return editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n };\n var getRtcInstanceWithError = function (editor) {\n var rtcInstance = editor.rtcInstance;\n if (!rtcInstance) {\n throw new Error('Failed to get RTC instance not yet initialized.');\n } else {\n return rtcInstance;\n }\n };\n var beforeChange$1 = function (editor, locks, beforeBookmark) {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n var addUndoLevel$1 = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n return getRtcInstanceWithError(editor).undoManager.addUndoLevel(undoManager, index, locks, beforeBookmark, level, event);\n };\n var undo$1 = function (editor, undoManager, locks, index) {\n return getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n };\n var redo$1 = function (editor, index, data) {\n return getRtcInstanceWithError(editor).undoManager.redo(index, data);\n };\n var clear$1 = function (editor, undoManager, index) {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n var reset$1 = function (editor, undoManager) {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n var hasUndo$1 = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n };\n var hasRedo$1 = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n };\n var transact$1 = function (editor, undoManager, locks, callback) {\n return getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n };\n var ignore$1 = function (editor, locks, callback) {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n var extra$1 = function (editor, undoManager, index, callback1, callback2) {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n var matchFormat = function (editor, name, vars, node) {\n return getRtcInstanceWithError(editor).formatter.match(name, vars, node);\n };\n var matchAllFormats = function (editor, names, vars) {\n return getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n };\n var matchNodeFormat = function (editor, node, name, vars, similar) {\n return getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n };\n var canApplyFormat = function (editor, name) {\n return getRtcInstanceWithError(editor).formatter.canApply(name);\n };\n var closestFormat = function (editor, names) {\n return getRtcInstanceWithError(editor).formatter.closest(names);\n };\n var applyFormat$1 = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n var removeFormat$1 = function (editor, name, vars, node, similar) {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n var toggleFormat = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar) {\n if (similar === void 0) {\n similar = false;\n }\n return getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar);\n };\n var getContent = function (editor, args, format) {\n return getRtcInstanceWithFallback(editor).editor.getContent(args, format);\n };\n var setContent = function (editor, content, args) {\n return getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n };\n var insertContent = function (editor, value, details) {\n return getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n };\n var getSelectedContent = function (editor, format, args) {\n return getRtcInstanceWithError(editor).selection.getContent(format, args);\n };\n var addVisual = function (editor, elm) {\n return getRtcInstanceWithError(editor).editor.addVisual(elm);\n };\n\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n var removeEmpty = function (text) {\n if (text.dom.length === 0) {\n remove(text);\n return Optional.none();\n } else {\n return Optional.some(text);\n }\n };\n var walkPastBookmark = function (node, start) {\n return node.filter(function (elm) {\n return BookmarkManager.isBookmarkNode(elm.dom);\n }).bind(start ? nextSibling : prevSibling);\n };\n var merge = function (outer, inner, rng, start) {\n var outerElm = outer.dom;\n var innerElm = inner.dom;\n var oldLength = start ? outerElm.length : innerElm.length;\n if (start) {\n mergeTextNodes(outerElm, innerElm, false, !start);\n rng.setStart(innerElm, oldLength);\n } else {\n mergeTextNodes(innerElm, outerElm, false, !start);\n rng.setEnd(innerElm, oldLength);\n }\n };\n var normalizeTextIfRequired = function (inner, start) {\n parent(inner).each(function (root) {\n var text = inner.dom;\n if (start && needsToBeNbspLeft(root, CaretPosition(text, 0))) {\n normalizeWhitespaceAfter(text, 0);\n } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length))) {\n normalizeWhitespaceBefore(text, text.length);\n }\n });\n };\n var mergeAndNormalizeText = function (outerNode, innerNode, rng, start) {\n outerNode.bind(function (outer) {\n var normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0);\n return innerNode.filter(isText).map(function (inner) {\n return merge(outer, inner, rng, start);\n });\n }).orThunk(function () {\n var innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText);\n return innerTextNode.map(function (inner) {\n return normalizeTextIfRequired(inner, start);\n });\n });\n };\n var rngSetContent = function (rng, fragment) {\n var firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n var lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n var prevText = firstChild.bind(prevSibling).filter(isText).bind(removeEmpty);\n var nextText = lastChild.bind(nextSibling).filter(isText).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true);\n mergeAndNormalizeText(nextText, lastChild, rng, false);\n rng.collapse(false);\n };\n var setupArgs = function (args, content) {\n return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var rng = editor.selection.getRng();\n var contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n var contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n var node = editor.parser.parse(args.content, __assign(__assign({\n isRootContent: true,\n forced_root_block: false\n }, contextArgs), args));\n return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n var contentArgs = setupArgs(args, content);\n if (!contentArgs.no_events) {\n contentArgs = editor.fire('BeforeSetContent', contentArgs);\n if (contentArgs.isDefaultPrevented()) {\n editor.fire('SetContent', contentArgs);\n return;\n }\n }\n args.content = cleanContent(editor, contentArgs);\n var rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(args.content));\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n if (!contentArgs.no_events) {\n editor.fire('SetContent', contentArgs);\n }\n };\n\n var deleteFromCallbackMap = function (callbackMap, selector, callback) {\n if (callbackMap && callbackMap.hasOwnProperty(selector)) {\n var newCallbacks = filter(callbackMap[selector], function (cb) {\n return cb !== callback;\n });\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n function SelectorChanged (dom, editor) {\n var selectorChangedData;\n var currentSelectors;\n return {\n selectorChangedWithUnbind: function (selector, callback) {\n if (!selectorChangedData) {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', function (e) {\n var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\n Tools.each(selectorChangedData, function (callbacks, selector) {\n Tools.each(parents, function (node) {\n if (dom.is(node, selector)) {\n if (!currentSelectors[selector]) {\n Tools.each(callbacks, function (callback) {\n callback(true, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n return false;\n }\n });\n });\n Tools.each(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n Tools.each(callbacks, function (callback) {\n callback(false, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n }\n });\n });\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n return {\n unbind: function () {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n }\n\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$2(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n };\n var isValidRange = function (rng) {\n if (!rng) {\n return false;\n } else if (isNativeIeSelection(rng)) {\n return true;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n var EditorSelection = function (dom, win, serializer, editor) {\n var selectedRange;\n var explicitRange;\n var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind;\n var setCursorLocation = function (node, offset) {\n var rng = dom.createRng();\n if (isNonNullable(node) && isNonNullable(offset)) {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n } else {\n moveEndPoint$1(dom, rng, editor.getBody(), true);\n setRng(rng);\n }\n };\n var getContent = function (args) {\n return getContent$1(editor, args);\n };\n var setContent = function (content, args) {\n return setContent$1(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng$1(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng$1(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select = function (node, content) {\n select$1(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var rng = getRng$1(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n var collapse = function (toStart) {\n var rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng$1 = function () {\n var selection, rng, elm;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n var doc = win.document;\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n var bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (ex) {\n }\n if (!rng) {\n rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n }\n if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n var setRng = function (rng, forward) {\n var node;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n var sel = getSel();\n var evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode = function () {\n return getNode$1(editor.getBody(), getRng$1());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n var focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n var anchorRange = dom.createRng();\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n var focusRange = dom.createRng();\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize$1 = function () {\n var rng = getRng$1();\n var sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = normalize(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n var scrollIntoView = function (elm, alignToTop) {\n return scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(fromPoint$1(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n var destroy = function () {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n var exports = {\n bookmarkManager: null,\n controlSelection: null,\n dom: dom,\n win: win,\n serializer: serializer,\n editor: editor,\n collapse: collapse,\n setCursorLocation: setCursorLocation,\n getContent: getContent,\n setContent: setContent,\n getBookmark: getBookmark,\n moveToBookmark: moveToBookmark,\n select: select,\n isCollapsed: isCollapsed,\n isForward: isForward,\n setNode: setNode,\n getNode: getNode,\n getSel: getSel,\n setRng: setRng,\n getRng: getRng$1,\n getStart: getStart,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize$1,\n selectorChanged: selectorChanged,\n selectorChangedWithUnbind: selectorChangedWithUnbind,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n var bookmarkManager = BookmarkManager(exports);\n var controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var removeAttrs = function (node, names) {\n each(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n });\n });\n };\n var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$1 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr_1 = new XMLHttpRequest();\n xhr_1.open('GET', url, true);\n xhr_1.responseType = 'blob';\n xhr_1.onload = function () {\n if (xhr_1.status === 200) {\n resolve(xhr_1.response);\n } else {\n rejectWithError();\n }\n };\n xhr_1.onerror = rejectWithError;\n xhr_1.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri$1 = function (uri) {\n var type;\n var uriParts = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var buildBlob = function (type, data) {\n var str;\n try {\n str = atob(data);\n } catch (e) {\n return Optional.none();\n }\n var arr = new Uint8Array(str.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type: type }));\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var _a = parseDataUri$1(uri), type = _a.type, data = _a.data;\n buildBlob(type, data).fold(function () {\n return resolve(new Blob([]));\n }, resolve);\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n var count = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobToDataUri(blob).then(function (dataUri) {\n base64 = parseDataUri$1(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n var _a = parseDataUri$1(img.src), data = _a.data, type = _a.type;\n base64 = data;\n blobInfo = blobCache.getByData(base64, type);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from$1(elm.getElementsByTagName('img')) : [];\n };\n var ImageScanner = function (uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n if (!predicate) {\n predicate = always;\n }\n var images = filter(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map(images, function (img) {\n if (cachedPromises[img.src] !== undefined) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n };\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new AstNode('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp;\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (blockElements[node.name] || node.name === 'br');\n };\n\n var isBogusImage = function (img) {\n return img.attr('data-mce-bogus');\n };\n var isInternalImageSource = function (img) {\n return img.attr('src') === Env.transparentSrc || img.attr('data-mce-placeholder');\n };\n var isValidDataImg = function (img, settings) {\n if (settings.images_dataimg_filter) {\n var imgElem_1 = new Image();\n imgElem_1.src = img.attr('src');\n each$1(img.attributes.map, function (value, key) {\n imgElem_1.setAttribute(key, value);\n });\n return settings.images_dataimg_filter(imgElem_1);\n } else {\n return true;\n }\n };\n var registerBase64ImageFilter = function (parser, settings) {\n var blobCache = settings.blob_cache;\n var processImage = function (img) {\n var inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img)) {\n return;\n }\n parseDataUri(inputSrc).filter(function () {\n return isValidDataImg(img, settings);\n }).bind(function (_a) {\n var type = _a.type, data = _a.data;\n return Optional.from(blobCache.getByData(data, type)).orThunk(function () {\n return buildBlob(type, data).map(function (blob) {\n var blobInfo = blobCache.create(uniqueId(), blob, data);\n blobCache.add(blobInfo);\n return blobInfo;\n });\n });\n }).each(function (blobInfo) {\n img.attr('src', blobInfo.blobUri());\n });\n };\n if (blobCache) {\n parser.addAttributeFilter('src', function (nodes) {\n return each(nodes, processImage);\n });\n }\n };\n var register$2 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName === 'br') {\n node = null;\n }\n break;\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent && settings.padd_empty_with_br !== true) {\n textNode = new AstNode('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n var node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', function (nodes) {\n var i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new AstNode('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, classList, ci, className, classValue;\n var validClasses = schema.getValidClasses();\n var validClassesMap, valid;\n while (i--) {\n node = nodes[i];\n classList = node.attr('class').split(' ');\n classValue = '';\n for (ci = 0; ci < classList.length; ci++) {\n className = classList[ci];\n valid = false;\n validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n registerBase64ImageFilter(parser, settings);\n };\n\n var makeMap$4 = Tools.makeMap, each$d = Tools.each, explode$2 = Tools.explode, extend$2 = Tools.extend;\n var DomParser = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n var sibling, nextNode;\n var nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n var nonEmptyElements = schema.getNonEmptyElements();\n var whitespaceElements = schema.getWhiteSpaceElements();\n var textBlockElements = schema.getTextBlockElements();\n var specialElements = schema.getSpecialElements();\n for (ni = 0; ni < nodes.length; ni++) {\n node = nodes[ni];\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap(node);\n continue;\n }\n parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n parents.reverse();\n newParent = currentNode = filterNode(parents[0].clone());\n for (i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty$2(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$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n 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')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new AstNode('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new AstNode('div', 1)));\n } else {\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n }\n }\n }\n };\n var filterNode = function (node) {\n var i, name, list;\n name = node.name;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n i = attributeFilters.length;\n while (i--) {\n name = attributeFilters[i].name;\n if (name in node.attributes.map) {\n list = matchedAttributes[name];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[name] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$d(explode$2(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name_1 in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name_1)) {\n out.push({\n name: name_1,\n callbacks: nodeFilters[name_1]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$d(explode$2(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var nodes, i, l, fi, fl, list, name;\n var invalidChildren = [];\n var isInWhiteSpacePreservedElement;\n var node;\n var getRootBlockName = function (name) {\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n var blockElements = extend$2(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var rootBlockName = getRootBlockName(forcedRootBlockName);\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, next, rootBlockNode;\n var trim = function (rootBlockNode) {\n if (rootBlockNode) {\n node = rootBlockNode.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlockNode.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n var createNode = function (name, type) {\n var node = new AstNode(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var textNode, textNodeNext, textVal, sibling;\n var blockElements = schema.getBlockElements();\n for (textNode = node.prev; textNode && textNode.type === 3;) {\n textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var name;\n var output = {};\n for (name in input) {\n if (name !== 'li' && name !== 'p') {\n output[name] = input[name];\n }\n }\n return output;\n };\n var parser = SaxParser({\n validate: validate,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_svg_data_urls: settings.allow_svg_data_urls,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n preserve_cdata: settings.preserve_cdata,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, attrName, parent;\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n parent = children[node.name];\n if (parent && children[newNode.name] && !parent[newNode.name]) {\n invalidChildren.push(newNode);\n }\n attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, text, sibling, tempNode;\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n tempNode = node.parent;\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n node = tempNode;\n return;\n }\n if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new AstNode(args.context || settings.root_name, 11);\n parser.parse(html, args.format);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n if (!matchedNodes.hasOwnProperty(name)) {\n continue;\n }\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$2(exports, settings);\n register$1(exports, settings);\n return exports;\n };\n\n var register$3 = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('tabindex', node.attr('data-mce-tabindex'));\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n var i = nodes.length, node, value;\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n while (i--) {\n node = nodes[i];\n value = node.attr(internalName);\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attr(name);\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, value;\n while (i--) {\n node = nodes[i];\n value = node.attr('class');\n if (value) {\n value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n var hasChildren = Optional.from(node.firstChild).exists(function (firstChild) {\n return !isZwsp$1(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var i = nodes.length, node, value, type;\n var trim = function (value) {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n while (i--) {\n node = nodes[i];\n value = node.firstChild ? node.firstChild.value : '';\n if (name === 'script') {\n type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !node.attr('type')) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n each(nodes, function (node) {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n var brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n var brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n var preProcess = function (editor, node, args) {\n var doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n var impl = document.implementation;\n if (impl.createHTMLDocument) {\n doc = impl.createHTMLDocument('');\n Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (node.nodeName !== 'BODY') {\n node = doc.body.firstChild;\n } else {\n node = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n firePreProcess(editor, __assign(__assign({}, args), { node: node }));\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return node;\n };\n var shouldFireEvent = function (editor, args) {\n return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n var process = function (editor, node, args) {\n return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n };\n\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess$1 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = firePostProcess(editor, __assign(__assign({}, args), { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n };\n var parseHtml = function (htmlParser, html, args) {\n var parserArgs = args.selection ? __assign({ forced_root_block: false }, args) : args;\n var rootNode = htmlParser.parse(html, parserArgs);\n trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n var toHtml = function (editor, settings, schema, rootNode, args) {\n var content = serializeNode(settings, schema, rootNode);\n return postProcess$1(editor, args, content);\n };\n var DomSerializerImpl = function (settings, editor) {\n var tempAttrs = ['data-mce-selected'];\n var dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n var schema = editor && editor.schema ? editor.schema : Schema(settings);\n settings.entity_encoding = settings.entity_encoding || 'named';\n settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n var htmlParser = DomParser(settings, schema);\n register$3(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n if (parserArgs === void 0) {\n parserArgs = {};\n }\n var args = __assign({ format: 'html' }, parserArgs);\n var targetNode = process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: function (rules) {\n schema.addValidElements(rules);\n },\n setRules: function (rules) {\n schema.setValidElements(rules);\n },\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: constant(tempAttrs),\n getNodeFilters: htmlParser.getNodeFilters,\n getAttributeFilters: htmlParser.getAttributeFilters\n };\n };\n\n var DomSerializer = function (settings, editor) {\n var domSerializer = DomSerializerImpl(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs,\n getNodeFilters: domSerializer.getNodeFilters,\n getAttributeFilters: domSerializer.getAttributeFilters\n };\n };\n\n var defaultFormat$1 = 'html';\n var getContent$2 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : defaultFormat$1;\n return getContent(editor, args, format);\n };\n\n var setContent$2 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n return setContent(editor, content, args);\n };\n\n var DOM$3 = DOMUtils.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$3.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Optional.from(x).each(function (x) {\n return x.destroy();\n });\n };\n var clearDomReferences = function (editor) {\n editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n editor.iframeElement = editor.targetElm = null;\n if (editor.selection) {\n editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n }\n };\n var restoreForm = function (editor) {\n var form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n form._mceOldSubmit = null;\n }\n DOM$3.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove$7 = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$3.remove(element.nextSibling);\n }\n fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n fireDetach(editor);\n DOM$3.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var deep$1 = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$2.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var deepMerge = baseMerge(deep$1);\n\n var sectionResult = function (sections, settings) {\n return {\n sections: constant(sections),\n settings: constant(settings)\n };\n };\n var deviceDetection = detect$3().deviceType;\n var isTouch = deviceDetection.isTouch();\n var isPhone = deviceDetection.isPhone();\n var isTablet = deviceDetection.isTablet();\n var legacyMobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultTouchSettings = {\n table_grid: false,\n object_resizing: false,\n resize: false\n };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterLegacyMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, legacyMobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n if (defaults === void 0) {\n defaults = {};\n }\n var sections = sectionResult.sections();\n var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return sectionResult.sections().hasOwnProperty(name);\n };\n var isSectionTheme = function (sectionResult, name, theme) {\n var section = sectionResult.sections();\n return hasSection(sectionResult, name) && section[name].theme === theme;\n };\n var getSectionConfig = function (sectionResult, name) {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n var getToolbarMode = function (settings, defaultVal) {\n return get$1(settings, 'toolbar_mode').orThunk(function () {\n return get$1(settings, 'toolbar_drawer').map(function (val) {\n return val === false ? 'wrap' : val;\n });\n }).getOr(defaultVal);\n };\n var getDefaultSettings = function (settings, id, documentBaseUrl, isTouch, editor) {\n var baseDefaults = {\n id: id,\n theme: 'silver',\n toolbar_mode: getToolbarMode(settings, 'floating'),\n plugins: '',\n document_base_url: documentBaseUrl,\n add_form_submit_trigger: true,\n submit_patch: true,\n add_unload_trigger: true,\n convert_urls: true,\n relative_urls: true,\n remove_script_host: true,\n object_resizing: true,\n doctype: '',\n visual: true,\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: true,\n indent_before: '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 indent_after: '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 entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor\n };\n return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {});\n };\n var getDefaultMobileSettings = function (mobileSettings, isPhone) {\n var defaultMobileSettings = {\n resize: false,\n toolbar_mode: getToolbarMode(mobileSettings, 'scrolling'),\n toolbar_sticky: false\n };\n var defaultPhoneSettings = { menubar: false };\n return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\n };\n var getExternalPlugins$1 = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var getPlatformPlugins = function (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) {\n if (isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile')) {\n return filterLegacyMobilePlugins(mobilePlugins);\n } else if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n return mobilePlugins;\n } else {\n return desktopPlugins;\n }\n };\n var processPlugins = function (isMobileDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var desktopPlugins = normalizePlugins(settings.plugins);\n var mobileConfig = getSectionConfig(sectionResult, 'mobile');\n var mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n var platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n if (Env.browser.isIE() && contains(combinedPlugins, 'rtc')) {\n throw new Error('RTC plugin is not supported on IE 11.');\n }\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isMobileDevice, sectionResult) {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n var combineSettings = function (isMobileDevice, isPhone, defaultSettings, defaultOverrideSettings, settings) {\n var defaultDeviceSettings = isMobileDevice ? { mobile: getDefaultMobileSettings(settings.mobile || {}, isPhone) } : {};\n var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings));\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, {\n validate: true,\n external_plugins: getExternalPlugins$1(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor);\n return combineSettings(isPhone || isTablet, isPhone, defaultSettings, defaultOverrideSettings, settings);\n };\n var getFiltered = function (predicate, editor, name) {\n return Optional.from(editor.settings[name]).filter(predicate);\n };\n var getParamObject = function (value) {\n var output = {};\n if (typeof value === 'string') {\n each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n var arr = val.split('=');\n if (arr.length > 1) {\n output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n } else {\n output[Tools.trim(arr[0])] = Tools.trim(arr[0]);\n }\n });\n } else {\n output = value;\n }\n return output;\n };\n var isArrayOf = function (p) {\n return function (a) {\n return isArray(a) && forall(a, p);\n };\n };\n var getParam = function (editor, name, defaultVal, type) {\n var value = name in editor.settings ? editor.settings[name] : defaultVal;\n if (type === 'hash') {\n return getParamObject(value);\n } else if (type === 'string') {\n return getFiltered(isString, editor, name).getOr(defaultVal);\n } else if (type === 'number') {\n return getFiltered(isNumber, editor, name).getOr(defaultVal);\n } else if (type === 'boolean') {\n return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n } else if (type === 'object') {\n return getFiltered(isObject, editor, name).getOr(defaultVal);\n } else if (type === 'array') {\n return getFiltered(isArray, editor, name).getOr(defaultVal);\n } else if (type === 'string[]') {\n return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\n } else if (type === 'function') {\n return getFiltered(isFunction, editor, name).getOr(defaultVal);\n } else {\n return value;\n }\n };\n\n var CreateIconManager = function () {\n var lookup = {};\n var add = function (id, iconPack) {\n lookup[id] = iconPack;\n };\n var get = function (id) {\n if (lookup[id]) {\n return lookup[id];\n }\n return { icons: {} };\n };\n var has$1 = function (id) {\n return has(lookup, id);\n };\n return {\n add: add,\n get: get,\n has: has$1\n };\n };\n var IconManager = CreateIconManager();\n\n var getProp = function (propName, elm) {\n var rawElm = elm.dom;\n return rawElm[propName];\n };\n var getComputedSizeProp = function (propName, elm) {\n return parseInt(get$5(elm, propName), 10);\n };\n var getClientWidth = curry(getProp, 'clientWidth');\n var getClientHeight = curry(getProp, 'clientHeight');\n var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n var getBoundingClientRect$1 = function (elm) {\n return elm.dom.getBoundingClientRect();\n };\n var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n var clientWidth = getClientWidth(bodyElm);\n var clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n var transpose = function (inline, elm, clientX, clientY) {\n var clientRect = getBoundingClientRect$1(elm);\n var deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n var deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n var x = clientX - deltaX;\n var y = clientY - deltaY;\n return {\n x: x,\n y: y\n };\n };\n var isXYInContentArea = function (editor, clientX, clientY) {\n var bodyElm = SugarElement.fromDom(editor.getBody());\n var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n var fromDomSafe = function (node) {\n return Optional.from(node).map(SugarElement.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(inBody).getOr(false);\n };\n\n var NotificationManagerImpl = function () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n reposition: unimplemented,\n getArgs: unimplemented\n };\n };\n\n var NotificationManager = function (editor) {\n var notifications = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n var getTopNotification = function () {\n return Optional.from(notifications[0]);\n };\n var isEqual = function (a, b) {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n var reposition = function () {\n if (notifications.length > 0) {\n getImplementation().reposition(notifications);\n }\n };\n var addNotification = function (notification) {\n notifications.push(notification);\n };\n var closeNotification = function (notification) {\n findIndex(notifications, function (otherNotification) {\n return otherNotification === notification;\n }).each(function (index) {\n notifications.splice(index, 1);\n });\n };\n var open = function (spec, fireEvent) {\n if (fireEvent === void 0) {\n fireEvent = true;\n }\n if (editor.removed || !isEditorAttachedToDom(editor)) {\n return;\n }\n if (fireEvent) {\n editor.fire('BeforeOpenNotification', { notification: spec });\n }\n return find(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(spec, function () {\n closeNotification(notification);\n reposition();\n getTopNotification().fold(function () {\n return editor.focus();\n }, function (top) {\n return focus(SugarElement.fromDom(top.getEl()));\n });\n });\n addNotification(notification);\n reposition();\n editor.fire('OpenNotification', __assign({}, notification));\n return notification;\n });\n };\n var close = function () {\n getTopNotification().each(function (notification) {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n var getNotifications = function () {\n return notifications;\n };\n var registerEvents = function (editor) {\n editor.on('SkinLoaded', function () {\n var serviceMessage = getServiceMessage(editor);\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0\n }, false);\n }\n });\n editor.on('ResizeEditor ResizeWindow NodeChange', function () {\n Delay.requestAnimationFrame(reposition);\n });\n editor.on('remove', function () {\n each(notifications.slice(), function (notification) {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open: open,\n close: close,\n getNotifications: getNotifications\n };\n };\n\n var PluginManager = AddOnManager.PluginManager;\n\n var ThemeManager = AddOnManager.ThemeManager;\n\n function WindowManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n openUrl: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented,\n getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n var WindowManager = function (editor) {\n var dialogs = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n var funcBind = function (scope, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return f ? f.apply(scope, args) : undefined;\n };\n };\n var fireOpenEvent = function (dialog) {\n editor.fire('OpenWindow', { dialog: dialog });\n };\n var fireCloseEvent = function (dialog) {\n editor.fire('CloseWindow', { dialog: dialog });\n };\n var addDialog = function (dialog) {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n var closeDialog = function (dialog) {\n fireCloseEvent(dialog);\n dialogs = filter(dialogs, function (otherDialog) {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n var getTopDialog = function () {\n return Optional.from(dialogs[dialogs.length - 1]);\n };\n var storeSelectionAndOpenDialog = function (openDialog) {\n editor.editorManager.setActive(editor);\n store(editor);\n var dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n var open = function (args, params) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().open(args, params, closeDialog);\n });\n };\n var openUrl = function (args) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().openUrl(args, closeDialog);\n });\n };\n var alert = function (message, callback, scope) {\n var windowManagerImpl = getImplementation();\n windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n var confirm = function (message, callback, scope) {\n var windowManagerImpl = getImplementation();\n windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n var close = function () {\n getTopDialog().each(function (dialog) {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', function () {\n each(dialogs, function (dialog) {\n getImplementation().close(dialog);\n });\n });\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n confirm: confirm,\n close: close\n };\n };\n\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n var displayError = function (editor, message) {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', function () {\n displayNotification(editor, message);\n });\n }\n };\n var uploadError = function (editor, message) {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n var logError = function (editor, errorType, msg) {\n fireError(editor, errorType, { message: msg });\n console.error(msg);\n };\n var createLoadError = function (type, url, name) {\n return name ? 'Failed to load ' + type + ': ' + name + ' from url ' + url : 'Failed to load ' + type + ' url: ' + url;\n };\n var pluginLoadError = function (editor, url, name) {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n var iconsLoadError = function (editor, url, name) {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n var languageLoadError = function (editor, url, name) {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n };\n var pluginInitError = function (editor, name, err) {\n var message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n fireError(editor, 'PluginLoadError', { message: message });\n initError(message, err);\n displayError(editor, message);\n };\n var initError = function (message) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var console = window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, __spreadArrays([message], x));\n } else {\n console.log.apply(console, __spreadArrays([message], x));\n }\n }\n };\n\n var isContentCssSkinName = function (url) {\n return /^[a-z0-9\\-]+$/i.test(url);\n };\n var getContentCssUrls = function (editor) {\n return transformToUrls(editor, getContentCss(editor));\n };\n var getFontCssUrls = function (editor) {\n return transformToUrls(editor, getFontCss(editor));\n };\n var transformToUrls = function (editor, cssLinks) {\n var skinUrl = editor.editorManager.baseURL + '/skins/content';\n var suffix = editor.editorManager.suffix;\n var contentCssFile = 'content' + suffix + '.css';\n var inline = editor.inline === true;\n return map(cssLinks, function (url) {\n if (isContentCssSkinName(url) && !inline) {\n return skinUrl + '/' + url + '/' + contentCssFile;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n var appendContentCssFromSettings = function (editor) {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n };\n\n var UploadStatus = function () {\n var PENDING = 1, UPLOADED = 2;\n var blobUriStatuses = {};\n var createStatus = function (status, resultUri) {\n return {\n status: status,\n resultUri: resultUri\n };\n };\n var hasBlobUri = function (blobUri) {\n return blobUri in blobUriStatuses;\n };\n var getResultUri = function (blobUri) {\n var result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n var isPending = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n var isUploaded = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n var markPending = function (blobUri) {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n var markUploaded = function (blobUri, resultUri) {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n var removeFailed = function (blobUri) {\n delete blobUriStatuses[blobUri];\n };\n var destroy = function () {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri: hasBlobUri,\n getResultUri: getResultUri,\n isPending: isPending,\n isUploaded: isUploaded,\n markPending: markPending,\n markUploaded: markUploaded,\n removeFailed: removeFailed,\n destroy: destroy\n };\n };\n\n var count$1 = 0;\n var seed = function () {\n var rnd = function () {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n var now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n var uuid = function (prefix) {\n return prefix + count$1++ + seed();\n };\n\n var BlobCache = function () {\n var cache = [];\n var mimeToExt = function (mime) {\n var mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png',\n 'image/apng': 'apng',\n 'image/avif': 'avif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/tiff': 'tiff'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n var create = function (o, blob, base64, name, filename) {\n if (isString(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: name,\n filename: filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n var toBlobInfo = function (o) {\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n var id = o.id || uuid('blobid');\n var name = o.name || id;\n var blob = o.blob;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n blob: constant(blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n uri: constant(o.uri)\n };\n };\n var add = function (blobInfo) {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n var findFirst = function (predicate) {\n return find(cache, predicate).getOrUndefined();\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var getByData = function (base64, type) {\n return findFirst(function (blobInfo) {\n return blobInfo.base64() === base64 && blobInfo.blob().type === type;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n getByData: getByData,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n };\n\n var Uploader = function (uploadStatus, settings) {\n var pendingPromises = {};\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr = new XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n var json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n var formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var noUpload = function () {\n return new promiseObj(function (resolve) {\n resolve([]);\n });\n };\n var handlerSuccess = function (blobInfo, url) {\n return {\n url: url,\n blobInfo: blobInfo,\n status: true\n };\n };\n var handlerFailure = function (blobInfo, message, options) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: {\n message: message,\n options: options\n }\n };\n };\n var resolvePending = function (blobUri, result) {\n Tools.each(pendingPromises[blobUri], function (resolve) {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n uploadStatus.markPending(blobInfo.blobUri());\n return new promiseObj(function (resolve) {\n var notification, progress;\n try {\n var closeNotification_1 = function () {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n var success = function (url) {\n closeNotification_1();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n var failure = function (error, options) {\n var failureOptions = options ? options : {};\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error, failureOptions));\n resolve(handlerFailure(blobInfo, error, failureOptions));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n Optional.from(notification).orThunk(function () {\n return Optional.from(openNotification).map(apply);\n }).each(function (n) {\n notification = n;\n n.progressBar.value(percent);\n });\n };\n handler(blobInfo, success, failure, progress);\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex.message, {}));\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var pendingUploadBlobInfo = function (blobInfo) {\n var blobUri = blobInfo.blobUri();\n return new promiseObj(function (resolve) {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n var uploadBlobs = function (blobInfos, openNotification) {\n blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n return !uploadStatus.isUploaded(blobInfo.blobUri());\n });\n return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n }));\n };\n var upload = function (blobInfos, openNotification) {\n return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n };\n if (isFunction(settings.handler) === false) {\n settings.handler = defaultHandler;\n }\n return { upload: upload };\n };\n\n var openNotification = function (editor) {\n return function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n };\n var createUploader = function (editor, uploadStatus) {\n return Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: getImagesUploadHandler(editor)\n });\n };\n var ImageUploader = function (editor) {\n var uploadStatus = UploadStatus();\n var uploader = createUploader(editor, uploadStatus);\n return {\n upload: function (blobInfos, showNotification) {\n if (showNotification === void 0) {\n showNotification = true;\n }\n return uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined);\n }\n };\n };\n\n var UploadChangeHandler = function (editor) {\n var lastChangedLevel = Cell(null);\n editor.on('change AddUndo', function (e) {\n lastChangedLevel.set(__assign({}, e.level));\n });\n var fireIfChanged = function () {\n var data = editor.undoManager.data;\n last(data).filter(function (level) {\n return !isEq$4(lastChangedLevel.get(), level);\n }).each(function (level) {\n editor.setDirty(true);\n editor.fire('change', {\n level: level,\n lastLevel: get(data, data.length - 2).getOrNull()\n });\n });\n };\n return { fireIfChanged: fireIfChanged };\n };\n var EditorUpload = function (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\n var changeHandler = UploadChangeHandler(editor);\n var aliveGuard = function (callback) {\n return function (result) {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n var cacheInvalidator = function (url) {\n return url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n };\n var replaceString = function (content, search, replace) {\n var index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n var replacementString = 'src=\"' + replacementUrl + '\"' + (replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '');\n content = replaceString(content, 'src=\"' + targetUrl + '\"', replacementString);\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n each(editor.undoManager.data, function (level) {\n if (level.type === 'fragmented') {\n level.fragments = map(level.fragments, function (fragment) {\n return replaceImageUrl(fragment, targetUrl, replacementUrl);\n });\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n var replaceImageUriInView = function (image, resultUri) {\n var src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = createUploader(editor, uploadStatus);\n }\n return scanForImages().then(aliveGuard(function (imageInfos) {\n var blobInfos = map(imageInfos, function (imageInfo) {\n return imageInfo.blobInfo;\n });\n return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(function (result) {\n var imagesToRemove = [];\n var filteredResult = map(result, function (uploadInfo, index) {\n var blobInfo = imageInfos[index].blobInfo;\n var image = imageInfos[index].image;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n blobCache.removeByUri(image.src);\n replaceImageUriInView(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n if (uploadInfo.error.options.remove) {\n replaceUrlInUndoStack(image.getAttribute('src'), Env.transparentSrc);\n imagesToRemove.push(image);\n }\n uploadError(editor, uploadInfo.error.message);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo: blobInfo\n };\n });\n if (filteredResult.length > 0) {\n changeHandler.fireIfChanged();\n }\n if (imagesToRemove.length > 0) {\n if (isRtc(editor)) {\n console.error('Removing images on failed uploads is currently unsupported for RTC');\n } else {\n editor.undoManager.transact(function () {\n each(imagesToRemove, function (element) {\n editor.dom.remove(element);\n blobCache.removeByUri(element.src);\n });\n });\n }\n }\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n each(result, function (resultItem) {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n return result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', function () {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', function (e) {\n if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', function () {\n editor.parser.addNodeFilter('img', function (images) {\n each(images, function (img) {\n var src = img.attr('src');\n if (blobCache.getByUri(src)) {\n return;\n }\n var resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache: blobCache,\n addFilter: addFilter,\n uploadImages: uploadImages,\n uploadImagesAuto: uploadImagesAuto,\n scanForImages: scanForImages,\n destroy: destroy\n };\n };\n\n var get$a = function (dom) {\n var formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n strikethrough: [\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 's',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n lineheight: {\n selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n defaultBlock: 'p',\n styles: { lineHeight: '%value' }\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: true,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: function (node, _fmt, _itemName) {\n return isElement$1(node) && node.hasAttribute('href');\n },\n onformat: function (elm, _fmt, vars) {\n Tools.each(vars, function (value, key) {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n var FormatRegistry = function (editor) {\n var formats = {};\n var get = function (name) {\n return name ? formats[name] : formats;\n };\n var has$1 = function (name) {\n return has(formats, name);\n };\n var register = function (name, format) {\n if (name) {\n if (typeof name !== 'string') {\n Tools.each(name, function (format, name) {\n register(name, format);\n });\n } else {\n if (!isArray(format)) {\n format = [format];\n }\n Tools.each(format, function (format) {\n if (typeof format.deep === 'undefined') {\n format.deep = !format.selector;\n }\n if (typeof format.split === 'undefined') {\n format.split = !format.selector || format.inline;\n }\n if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\n format.remove = 'none';\n }\n if (format.selector && format.inline) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (typeof format.classes === 'string') {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n var unregister = function (name) {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(get$a(editor.dom));\n register(getFormats(editor));\n return {\n get: get,\n has: has$1,\n register: register,\n unregister: unregister\n };\n };\n\n var each$e = Tools.each;\n var dom = DOMUtils.DOM;\n var parsedSelectorToHtml = function (ancestry, editor) {\n var elm, item, fragment;\n var schema = editor && editor.schema || Schema({});\n var decorate = function (elm, item) {\n if (item.classes.length) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n var createElement = function (sItem) {\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n var elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n var parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag;\n var previewCss = '', parentFontSize;\n var previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n var previewOpt = get$1(format, 'preview');\n if (previewOpt.is(false)) {\n return '';\n } else {\n previewStyles = previewOpt.getOr(previewStyles);\n }\n }\n name = format.block || format.inline || 'span';\n var items = parseSelector(format.selector);\n if (items.length) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n var previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$e(format.styles, function (value, name) {\n var newValue = removeVars(value);\n if (newValue) {\n dom.setStyle(previewElm, name, newValue);\n }\n });\n each$e(format.attributes, function (value, name) {\n var newValue = removeVars(value);\n if (newValue) {\n dom.setAttrib(previewElm, name, newValue);\n }\n });\n each$e(format.classes, function (value) {\n var newValue = removeVars(value);\n if (!dom.hasClass(previewElm, newValue)) {\n dom.addClass(previewElm, newValue);\n }\n });\n editor.fire('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n each$e(previewStyles.split(' '), function (name) {\n var value = dom.getStyle(previewElm, name, true);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = dom.getStyle(editor.getBody(), name, true);\n if (dom.toHex(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (dom.toHex(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.fire('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n\n var setup$6 = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n\n var Formatter = function (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n setup$6(editor);\n setup$3(editor);\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: function (name, vars, node) {\n applyFormat$1(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n removeFormat$1(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n toggleFormat(editor, name, vars, node);\n },\n match: function (name, vars, node) {\n return matchFormat(editor, name, vars, node);\n },\n closest: function (names) {\n return closestFormat(editor, names);\n },\n matchAll: function (names, vars) {\n return matchAllFormats(editor, names, vars);\n },\n matchNode: function (node, names, vars, similar) {\n return matchNodeFormat(editor, node, names, vars, similar);\n },\n canApply: function (name) {\n return canApplyFormat(editor, name);\n },\n formatChanged: function (formats, callback, similar) {\n return formatChanged(editor, formatChangeState, formats, callback, similar);\n },\n getCssText: curry(getCssText, editor)\n };\n };\n\n var registerEvents$1 = function (editor, undoManager, locks) {\n var isFirstTypedCharacter = Cell(false);\n var addNonTypingUndoLevel = function (e) {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', function () {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', function () {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter.get() && undoManager.typing && isEq$4(createFromEditor(editor), undoManager.data[0]) === false) {\n if (editor.isDirty() === false) {\n editor.setDirty(true);\n editor.fire('change', {\n level: undoManager.data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n }\n });\n editor.on('mousedown', function (e) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n var isInsertFromPasteOrDrop = function (event) {\n return event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n var addKeyboardShortcuts = function (editor) {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n var UndoManager = function (editor) {\n var beforeBookmark = Cell(Optional.none());\n var locks = Cell(0);\n var index = Cell(0);\n var undoManager = {\n data: [],\n typing: false,\n beforeChange: function () {\n beforeChange$1(editor, locks, beforeBookmark);\n },\n add: function (level, event) {\n return addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function () {\n return undo$1(editor, undoManager, locks, index);\n },\n redo: function () {\n return redo$1(editor, index, undoManager.data);\n },\n clear: function () {\n clear$1(editor, undoManager, index);\n },\n reset: function () {\n reset$1(editor, undoManager);\n },\n hasUndo: function () {\n return hasUndo$1(editor, undoManager, index);\n },\n hasRedo: function () {\n return hasRedo$1(editor, undoManager, index);\n },\n transact: function (callback) {\n return transact$1(editor, undoManager, locks, callback);\n },\n ignore: function (callback) {\n ignore$1(editor, locks, callback);\n },\n extra: function (callback1, callback2) {\n extra$1(editor, undoManager, index, callback1, callback2);\n }\n };\n if (!isRtc(editor)) {\n registerEvents$1(editor, undoManager, locks);\n }\n addKeyboardShortcuts(editor);\n return undoManager;\n };\n\n var nonTypingKeycodes = [\n 9,\n 27,\n VK.HOME,\n VK.END,\n 19,\n 20,\n 44,\n 144,\n 145,\n 33,\n 34,\n 45,\n 16,\n 17,\n 18,\n 91,\n 92,\n 93,\n VK.DOWN,\n VK.UP,\n VK.LEFT,\n VK.RIGHT\n ].concat(Env.browser.isFirefox() ? [224] : []);\n var placeholderAttr = 'data-mce-placeholder';\n var isKeyboardEvent = function (e) {\n return e.type === 'keydown' || e.type === 'keyup';\n };\n var isDeleteEvent = function (e) {\n var keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n var isNonTypingKeyboardEvent = function (e) {\n if (isKeyboardEvent(e)) {\n var keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n var isTypingKeyboardEvent = function (e) {\n return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n };\n var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) {\n if (isEmpty(SugarElement.fromDom(rootElm), false)) {\n var isForcedRootBlockFalse = forcedRootBlock === '';\n var firstElement = rootElm.firstElementChild;\n if (!firstElement) {\n return true;\n } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n return false;\n } else {\n return isForcedRootBlockFalse ? !dom.isBlock(firstElement) : forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n var setup$7 = function (editor) {\n var dom = editor.dom;\n var rootBlock = getForcedRootBlock(editor);\n var placeholder = getPlaceholder(editor);\n var updatePlaceholder = function (e, initial) {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n var body = editor.getBody();\n var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (placeholder) {\n editor.on('init', function (e) {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', function (e) {\n return Delay.setEditorTimeout(editor, function () {\n return updatePlaceholder(e);\n });\n });\n });\n }\n };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor));\n };\n var isRtl$1 = function (element) {\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n var hasSameParentBlock = function (rootNode, node1, node2) {\n var block1 = getParentBlock(node1, rootNode);\n var block2 = getParentBlock(node2, rootNode);\n return block1 && block1 === block2;\n };\n var isAtZwsp = function (pos) {\n return isBeforeInline(pos) || isAfterInline(pos);\n };\n var normalizePosition = function (forward, pos) {\n if (!pos) {\n return pos;\n }\n var container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$1(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$1(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 var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq$2(rootNode, SugarElement.fromDom(elm.dom.parentNode));\n };\n };\n var getParentBlock$1 = function (rootNode, elm) {\n return contains$2(rootNode, elm) ? closest(elm, function (element) {\n return isTextBlock(element) || isListItem(element);\n }, isBeforeRoot(rootNode)) : Optional.none();\n };\n var placeCaretInEmptyBody = function (editor) {\n var body = editor.getBody();\n var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n editor.selection.setCursorLocation(node, 0);\n };\n var paddEmptyBody = function (editor) {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n placeCaretInEmptyBody(editor);\n }\n };\n var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n var normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n });\n } else {\n return prevPosition(elm, normalizedFromPos).exists(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n });\n }\n }).getOr(true);\n };\n\n var blockPosition = function (block, position) {\n return {\n block: block,\n position: position\n };\n };\n var blockBoundary = function (from, to) {\n return {\n from: from,\n to: to\n };\n };\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = SugarElement.fromDom(rootNode);\n var containerElm = SugarElement.fromDom(pos.container());\n return getParentBlock$1(rootElm, containerElm).map(function (block) {\n return blockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq$2(blockBoundary.from.block, blockBoundary.to.block) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from.block).bind(function (parent1) {\n return parent(blockBoundary.to.block).filter(function (parent2) {\n return eq$2(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return isContentEditableFalse(blockBoundary.from.block.dom) === false && isContentEditableFalse(blockBoundary.to.block.dom) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (isBr(blockPosition.position.getNode()) && isEmpty(blockPosition.block) === false) {\n return positionIn(false, blockPosition.block.dom).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Optional.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n var readFromRange = function (rootNode, forward, rng) {\n var fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return fromPosition(forward, rootNode, blockPos.position).bind(function (to) {\n return getBlockPosition(rootNode, to).map(function (blockPos) {\n return skipLastBr(rootNode, forward, blockPos);\n });\n });\n });\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(function (blockBoundary) {\n return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\n });\n };\n var read$3 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n };\n\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex(children$1, isBlock).fold(function () {\n return children$1;\n }, function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each(children, remove);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = parentsAndSelf(block, rootNode);\n return find(parents.reverse(), function (element) {\n return isEmpty(element);\n }).each(remove);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !isEmpty(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (isEmpty(toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom);\n }\n if (isEmptyBefore(insertionPoint) && isEmpty(fromBlock)) {\n before(insertionPoint, SugarElement.fromTag('br'));\n }\n var position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each(extractChildren(fromBlock), function (child) {\n before(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n if (isEmpty(toBlock)) {\n remove(toBlock);\n if (isEmpty(fromBlock)) {\n fillWithPaddingBr(fromBlock);\n }\n return firstPositionIn(fromBlock.dom);\n }\n var position = lastPositionIn(toBlock.dom);\n each(extractChildren(fromBlock), function (child) {\n append(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$2(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n };\n var trimBr = function (first, block) {\n positionIn(first, block.dom).map(function (position) {\n return position.getNode();\n }).map(SugarElement.fromDom).filter(isBr$1).each(remove);\n };\n var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n };\n var mergeBlocks = function (rootNode, forward, block1, block2) {\n return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n };\n\n var backspaceDelete$1 = function (editor, forward) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var position = read$3(rootNode.dom, forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block);\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(getParentBlock$1(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$1(rootNode, SugarElement.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq$2(block1, block2) === false) {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = SugarElement.fromDom(rawNode);\n var isRoot = curry(eq$2, root);\n return ancestor(node, isTableCell$1, isRoot).isSome();\n };\n var isSelectionInTable = function (root, rng) {\n return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n };\n var isEverythingSelected = function (root, rng) {\n var noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n var noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n var emptyEditor = function (editor) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n return true;\n };\n var deleteRange$1 = function (editor) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$2 = function (editor, _forward) {\n return editor.selection.isCollapsed() ? false : deleteRange$1(editor);\n };\n\n var isContentEditableTrue$2 = isContentEditableTrue;\n var isContentEditableFalse$7 = isContentEditableFalse;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n };\n var getNodeRange = function (node) {\n var rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n var selectNode = function (editor, node) {\n var e = editor.fire('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return Optional.none();\n }\n return Optional.some(getNodeRange(node));\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isInlineFakeCaretTarget(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$7(node) || isContentEditableTrue$2(node);\n });\n if (isInlineFakeCaretTarget(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return Optional.none();\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n return range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n };\n\n var isBeforeBoundary = function (pos) {\n return isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n };\n var isAfterBoundary = function (pos) {\n return isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n };\n var trimEmptyTextNode$1 = function (dom, node) {\n if (isText$1(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(function (caretRange) {\n if (range.collapsed) {\n var deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n });\n trimEmptyTextNode$1(editor.dom, node);\n return true;\n };\n var deleteBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!isText$1(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n var isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) {\n return false;\n } else if (isBeforeFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n }\n }\n return false;\n };\n var backspaceDelete$3 = function (editor, forward) {\n return deleteBoundaryText(editor, forward);\n };\n\n var isCompoundElement = function (node) {\n return isTableCell$1(SugarElement.fromDom(node)) || isListItem(SugarElement.fromDom(node));\n };\n var DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n var isAtContentEditableBlockCaret = function (forward, from) {\n var elm = from.getNode(forward === false);\n var caretLocation = forward ? 'after' : 'before';\n return isElement$1(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(never, inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return getParentBlock$1(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(function (blockElm) {\n return isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Optional.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Optional.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else {\n return Optional.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && isContentEditableFalse(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && isContentEditableFalse(elm.previousSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Optional.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Optional.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Optional.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Optional.none();\n } else {\n return Optional.some(DeleteAction.moveToPosition(to));\n }\n });\n };\n var getContentEditableAction = function (root, forward, from) {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n return findCefPosition(root, forward, from);\n }, Optional.some);\n } else {\n return findCefPosition(root, forward, from).bind(function (deleteAction) {\n return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n });\n }\n };\n var read$4 = function (root, forward, rng) {\n var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n var from = CaretPosition.fromRangeStart(normalizedRange);\n var rootElement = SugarElement.fromDom(root);\n if (forward === false && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode()));\n } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\n return findNextBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n var deleteElement$1 = function (editor, forward) {\n return function (element) {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var moveToPosition = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var getAncestorCe = function (editor, node) {\n return Optional.from(getContentEditableRoot(editor.getBody(), node));\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse).fold(function () {\n return read$4(editor.getBody(), forward, editor.selection.getRng()).exists(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n }, always);\n };\n var deleteOffscreenSelection = function (rootElement) {\n each(descendants$1(rootElement, '.mce-offscreen-selection'), remove);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n if (isContentEditableFalse(selectedNode)) {\n var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse);\n return hasCefAncestor.fold(function () {\n deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n deleteElement(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n paddEmptyBody(editor);\n return true;\n }, always);\n }\n return false;\n };\n var paddEmptyElement = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var ceRoot = getContentEditableRoot(editor.getBody(), selection.getNode());\n if (isContentEditableTrue(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n var br = dom.create('br', { 'data-mce-bogus': '1' });\n dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n selection.setRng(CaretPosition.before(br).toRange());\n }\n return true;\n };\n var backspaceDelete$4 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n var deleteCaret$1 = function (editor, forward) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n }).bind(function (pos) {\n return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos));\n }).exists(function (elm) {\n editor.selection.select(elm);\n return true;\n });\n };\n var backspaceDelete$5 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n\n var isText$8 = isText$1;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(ZWSP);\n };\n var insertBefore$1 = function (node) {\n if (isText$8(node.previousSibling)) {\n if (endsWithCaretContainer$1(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(ZWSP);\n return node.previousSibling;\n }\n } else if (isText$8(node)) {\n if (startsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter$1 = function (node) {\n if (isText$8(node.nextSibling)) {\n if (startsWithCaretContainer$1(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, ZWSP);\n return node.nextSibling;\n }\n } else if (isText$8(node)) {\n if (endsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.appendData(ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline$1 = function (before, node) {\n return before ? insertBefore$1(node) : insertAfter$1(node);\n };\n var insertInlineBefore = curry(insertInline$1, true);\n var insertInlineAfter = curry(insertInline$1, false);\n\n var insertInlinePos = function (pos, before) {\n if (isText$1(pos.container())) {\n return insertInline$1(before, pos.container());\n } else {\n return insertInline$1(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n remove$5(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, text.length - 1));\n }, function (element) {\n return firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$5(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition(text, 1);\n } else {\n return CaretPosition(caret.get(), 1);\n }\n });\n }, function (element) {\n return lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$5(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition(text, text.length - 1);\n } else {\n return CaretPosition(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n remove$5(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, 1));\n });\n };\n\n var evaluateUntil = function (fns, args) {\n for (var i = 0; i < fns.length; i++) {\n var result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n };\n\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before$4 = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Optional.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n });\n };\n var after$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Optional.none);\n };\n var isValidLocation = function (location) {\n return isRtl$1(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = evaluateUntil([\n before$4,\n start,\n end,\n after$3\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq$5 = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(always, function (fromLocation) {\n return !isEq$5(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = normalizePosition(forward, pos);\n var to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (forward, location) {\n if (forward) {\n return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n } else {\n return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n }\n };\n var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n var from = normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n var prevLocation = curry(findLocation, false);\n var nextLocation = curry(findLocation, true);\n\n var hasSelectionModifyApi = function (editor) {\n return isFunction(editor.selection.getSel().modify);\n };\n var moveRel = function (forward, selection, pos) {\n var delta = forward ? 1 : -1;\n selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n var moveByWord = function (forward, editor) {\n var rng = editor.selection.getRng();\n var pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n\n var setCaretPosition = function (editor, pos) {\n var rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation$1 = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var location = findLocation(forward, isInlineTarget$1, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var inlineBoundaries = map(descendants$1(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), function (e) {\n return e.dom;\n });\n var selectedInlines = filter(inlineBoundaries, isInlineTarget);\n var targetInlines = filter(elms, isInlineTarget);\n each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (CaretPosition.isTextPosition(pos) && isAtZwsp(pos) === false) {\n setCaretPosition(editor, removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter(elms, isInlineTarget);\n each(inlines, function (_inline) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move = function (editor, caret, forward) {\n return isInlineBoundariesEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n var moveWord = function (forward, editor, _caret) {\n return isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isInlineBoundariesEnabled(editor) && !(Env.browser.isIE() && e.initial)) {\n toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n\n var rangeFromPositions = function (from, to) {\n var range = document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n return nextPosition(elm, normalizedFirstPos).forall(function (pos) {\n return pos.isEqual(normalizedLastPos);\n });\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return renderCaret(caret, location).exists(function (pos) {\n setCaretPosition(editor, pos);\n return true;\n });\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope$1(editor.getBody(), from.container());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n } else {\n return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return readLocation(isInlineTarget$1, rootNode, pos);\n });\n return lift2(fromLocation, toLocation, function () {\n return findRootInline(isInlineTarget$1, rootNode, from).exists(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n deleteElement(editor, forward, SugarElement.fromDom(elm));\n return true;\n } else {\n return false;\n }\n });\n }).orThunk(function () {\n return toLocation.bind(function (_) {\n return toPosition.map(function (to) {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n return true;\n });\n });\n }).getOr(false);\n });\n };\n var backspaceDelete$6 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = parentsAndSelf(startElm, rootElm);\n return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild$1 = function (elm) {\n return children(elm).length === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom;\n });\n if (formatNodes.length === 0) {\n deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom, formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$2 = function (editor, forward) {\n var rootElm = SugarElement.fromDom(editor.getBody());\n var startElm = SugarElement.fromDom(editor.selection.getStart());\n var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\n return last(parentInlines).exists(function (target) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n });\n };\n var backspaceDelete$7 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false;\n };\n\n var deleteElement$2 = function (editor, forward, element) {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n var deleteCaret$3 = function (editor, forward) {\n var isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n if (isNearMedia(fromPos)) {\n return deleteElement$2(editor, forward, fromPos.getNode(!forward));\n } else {\n return Optional.from(normalizePosition(forward, fromPos)).filter(function (pos) {\n return isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos);\n }).exists(function (pos) {\n return deleteElement$2(editor, forward, pos.getNode(!forward));\n });\n }\n };\n var deleteRange$2 = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return isMedia(selectedNode) ? deleteElement$2(editor, forward, selectedNode) : false;\n };\n var backspaceDelete$8 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$3(editor, forward) : deleteRange$2(editor, forward);\n };\n\n var isEditable$1 = function (target) {\n return closest(target, function (elm) {\n return isContentEditableTrue(elm.dom) || isContentEditableFalse(elm.dom);\n }).exists(function (elm) {\n return isContentEditableTrue(elm.dom);\n });\n };\n var parseIndentValue = function (value) {\n var number = parseInt(value, 10);\n return isNaN(number) ? 0 : number;\n };\n var getIndentStyleName = function (useMargin, element) {\n var indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n var suffix = get$5(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n var indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var validateBlocks = function (editor, blocks) {\n return forall(blocks, function (block) {\n var indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n var contentEditable = editor.dom.getContentEditable(block.dom);\n return contentEditable !== 'false' && intentValue > 0;\n });\n };\n var canOutdent = function (editor) {\n var blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n };\n var isListComponent = function (el) {\n return isList(el) || isListItem(el);\n };\n var parentIsListComponent = function (el) {\n return parent(el).map(isListComponent).getOr(false);\n };\n var getBlocksToIndent = function (editor) {\n return filter(map(editor.selection.getSelectedBlocks(), SugarElement.fromDom), function (el) {\n return !isListComponent(el) && !parentIsListComponent(el) && isEditable$1(el);\n });\n };\n var handle = function (editor, command) {\n var dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentation = getIndentation(editor);\n var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n var indentValue = parseInt(indentation, 10);\n var useMargin = shouldIndentUseMargin(editor);\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n });\n };\n\n var backspaceDelete$9 = function (editor, _forward) {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n var pos = CaretPosition.fromRangeStart(rng);\n var block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) {\n handle(editor, 'outdent');\n return true;\n }\n }\n return false;\n };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor, caret) {\n if (backspaceDelete$9(editor)) {\n return;\n } else if (backspaceDelete$4(editor, false)) {\n return;\n } else if (backspaceDelete$3(editor, false)) {\n return;\n } else if (backspaceDelete$6(editor, caret, false)) {\n return;\n } else if (backspaceDelete$1(editor, false)) {\n return;\n } else if (backspaceDelete(editor)) {\n return;\n } else if (backspaceDelete$5(editor, false)) {\n return;\n } else if (backspaceDelete$8(editor, false)) {\n return;\n } else if (backspaceDelete$2(editor)) {\n return;\n } else if (backspaceDelete$7(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor, caret) {\n if (backspaceDelete$4(editor, true)) {\n return;\n } else if (backspaceDelete$3(editor, true)) {\n return;\n } else if (backspaceDelete$6(editor, caret, true)) {\n return;\n } else if (backspaceDelete$1(editor, true)) {\n return;\n } else if (backspaceDelete(editor)) {\n return;\n } else if (backspaceDelete$5(editor, true)) {\n return;\n } else if (backspaceDelete$8(editor, true)) {\n return;\n } else if (backspaceDelete$2(editor)) {\n return;\n } else if (backspaceDelete$7(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var setup$8 = function (editor, caret) {\n editor.addCommand('delete', function () {\n deleteCommand(editor, caret);\n });\n editor.addCommand('forwardDelete', function () {\n forwardDeleteCommand(editor, caret);\n });\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(event.touches[0]);\n };\n var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x);\n var distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var setup$9 = function (editor) {\n var startData = Cell(Optional.none());\n var longpressFired = Cell(false);\n var debounceLongpress = last$2(function (e) {\n editor.fire('longpress', __assign(__assign({}, e), { type: 'longpress' }));\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', function (e) {\n getTouch(e).each(function (touch) {\n debounceLongpress.cancel();\n var data = {\n x: touch.clientX,\n y: touch.clientY,\n target: e.target\n };\n debounceLongpress.throttle(e);\n longpressFired.set(false);\n startData.set(Optional.some(data));\n });\n }, true);\n editor.on('touchmove', function (e) {\n debounceLongpress.cancel();\n getTouch(e).each(function (touch) {\n startData.get().each(function (data) {\n if (isFarEnough(touch, data)) {\n startData.set(Optional.none());\n longpressFired.set(false);\n editor.fire('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', function (e) {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(function (data) {\n return data.target.isEqualNode(e.target);\n }).each(function () {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.fire('tap', __assign(__assign({}, e), { type: 'tap' }));\n }\n });\n }, true);\n };\n\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (isText$1(node)) {\n return true;\n } else if (isElement$1(node)) {\n return !isBlockElement(blockElements, node) && !isBookmarkNode$1(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(parents$1(SugarElement.fromDom(node), SugarElement.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom);\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (isText$1(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rootBlockNode, tempNode, wrapped;\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!node || !isElement$1(node) || !forcedRootBlock) {\n return;\n }\n var rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n var rng = selection.getRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var restoreSelection = hasFocus$1(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, getForcedRootBlockAttrs(editor));\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$a = function (editor) {\n if (getForcedRootBlock(editor)) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\n return elm.dom;\n });\n };\n var removeIeControlRect = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var showBlockCaretContainer = function (editor, blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n removeIeControlRect(editor);\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var handleBlockContainer = function (editor, e) {\n var blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n var setup$b = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? reverse(positions) : positions;\n };\n var walk$3 = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start, nextPos;\n var positions = [];\n while (currentPos) {\n nextPos = walk$3(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n var breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType: breakType,\n breakAt: Optional.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Optional.none()\n };\n };\n var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n var positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n };\n var findClosestHorizontalPositionFromPoint = function (positions, x) {\n return foldl(positions, function (acc, newPos) {\n return acc.fold(function () {\n return Optional.some(newPos);\n }, function (lastPos) {\n return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n var lastDist = Math.abs(x - lastRect.left);\n var newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc);\n });\n }, Optional.none());\n };\n var findClosestHorizontalPosition = function (positions, pos) {\n return head(pos.getClientRects()).bind(function (targetRect) {\n return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n });\n };\n var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n var isAtFirstLine = function (scope, pos) {\n return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n };\n var isAtLastLine = function (scope, pos) {\n return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n };\n var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n var getFirstLinePositions = function (scope) {\n return firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$2(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$1(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (isText$1(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (nodes) {\n return bind(nodes, getNodeClientRects);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil$1 = function (direction, root, predicateFn, node) {\n while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0;\n var result = [];\n var add = function (node) {\n var i, clientRect, clientRects;\n clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (i = 0; i < clientRects.length; i++) {\n clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n var targetClientRect = last$1(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n var node = caretPosition.getNode();\n add(node);\n findUntil$1(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn, isBelowFn, isAboveFn, caretPosition;\n var result = [];\n var line = 0, clientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return last$1(caretPosition.getClientRects());\n }\n return last$1(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition.before(node);\n }\n var targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n clientRect = getClientRect(caretPosition);\n if (isAboveFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect = clone$2(clientRect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$8 = isContentEditableFalse;\n var findNode$1 = findNode;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInsideX = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var isInsideY = function (clientY, clientRect) {\n return clientY >= clientRect.top && clientY <= clientRect.bottom;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n var newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInsideX(clientX, clientRect)) {\n return clientRect;\n }\n if (isInsideX(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$8(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n };\n var walkUntil$1 = function (direction, root, predicateFn, startNode, includeChildren) {\n var node = findNode$1(startNode, direction, isEditableCaretCandidate, root, !includeChildren);\n do {\n if (!node || predicateFn(node)) {\n return;\n }\n } while (node = findNode$1(node, direction, isEditableCaretCandidate, root));\n };\n var findLineNodeRects = function (root, targetNodeRect, includeChildren) {\n if (includeChildren === void 0) {\n includeChildren = true;\n }\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects = filter(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node, includeChildren);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node, includeChildren);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestFakeCaret = function (root, clientX, clientY) {\n var fakeTargetNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(fakeTargetNodeRects, curry(isInsideY, clientY));\n var closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n var includeChildren = !isTable(closestNodeRect.node) && !isMedia(closestNodeRect.node);\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect, includeChildren), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, editor.selection.getRng());\n };\n var renderRangeCaretOpt = function (editor, range, scrollIntoView) {\n return Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n };\n var moveHorizontally = function (editor, direction, range, isBefore, isAfter, isElement) {\n var forwards = direction === HDirection.Forwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n var isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n var node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n }\n }\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = normalizePosition(forwards, getNextPosFn(caretPosition));\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n }\n return Optional.none();\n };\n var moveVertically = function (editor, direction, range, isBefore, isAfter, isElement) {\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var caretClientRect = last$1(caretPosition.getClientRects());\n var forwards = direction === VDirection.Down;\n if (!caretClientRect) {\n return Optional.none();\n }\n var walkerFn = forwards ? downUntil : upUntil;\n var linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n var nextLinePositions = filter(linePositions, isLine(1));\n var clientX = caretClientRect.left;\n var nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (nextLineRect && isElement(nextLineRect.node)) {\n var dist1 = Math.abs(clientX - nextLineRect.left);\n var dist2 = Math.abs(clientX - nextLineRect.right);\n return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n }\n var currentNode;\n if (isBefore(caretPosition)) {\n currentNode = caretPosition.getNode();\n } else if (isAfter(caretPosition)) {\n currentNode = caretPosition.getNode(true);\n } else {\n currentNode = getSelectedNode(range);\n }\n if (currentNode) {\n var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), currentNode);\n var closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n closestNextLineRect = last$1(filter(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n }\n if (nextLinePositions.length === 0) {\n return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(function (pos) {\n return renderRangeCaret(editor, pos.toRange(), false);\n });\n }\n return Optional.none();\n };\n var getLineEndPoint = function (editor, forward) {\n var rng = editor.selection.getRng();\n var body = editor.getBody();\n if (forward) {\n var from = CaretPosition.fromRangeEnd(rng);\n var result = getPositionsUntilNextLine(body, from);\n return last(result.positions);\n } else {\n var from = CaretPosition.fromRangeStart(rng);\n var result = getPositionsUntilPreviousLine(body, from);\n return head(result.positions);\n }\n };\n var moveToLineEndPoint = function (editor, forward, isElementPosition) {\n return getLineEndPoint(editor, forward).filter(isElementPosition).exists(function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\n\n var isContentEditableFalse$9 = isContentEditableFalse;\n var moveToCeFalseHorizontally = function (direction, editor, range) {\n return moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$9);\n };\n var moveToCeFalseVertically = function (direction, editor, range) {\n var isBefore = function (caretPosition) {\n return isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n };\n var isAfter = function (caretPosition) {\n return isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n };\n return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$9);\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '
    ';\n }\n return textBlock;\n };\n var exitPreBlock = function (editor, direction, range) {\n var caretWalker = CaretWalker(editor.getBody());\n var getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n if (range.collapsed && hasForcedRootBlock(editor)) {\n var pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n var caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n if (!caretPos) {\n var newBlock = createTextBlock(editor);\n if (direction === 1) {\n editor.$(pre).after(newBlock);\n } else {\n editor.$(pre).before(newBlock);\n }\n editor.selection.select(newBlock, true);\n editor.selection.collapse();\n }\n }\n };\n var getHorizontalRange = function (editor, forward) {\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(function () {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n var getVerticalRange = function (editor, down) {\n var direction = down ? 1 : -1;\n var range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(function () {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n var moveH = function (editor, forward) {\n return getHorizontalRange(editor, forward).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveV = function (editor, down) {\n return getVerticalRange(editor, down).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveToLineEndPoint$1 = function (editor, forward) {\n var isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n return moveToLineEndPoint(editor, forward, isCefPosition);\n };\n\n var isTarget = function (node) {\n return contains(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = document.createRange();\n rng.setStartBefore(target.dom);\n rng.setEndBefore(target.dom);\n return rng;\n };\n var insertElement = function (root, elm, forward) {\n if (forward) {\n append(root, elm);\n } else {\n prepend(root, elm);\n }\n };\n var insertBr = function (root, forward) {\n var br = SugarElement.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock$1 = function (root, forward, blockName, attrs) {\n var block = SugarElement.fromTag(blockName);\n var br = SugarElement.fromTag('br');\n setAll(block, attrs);\n append(block, br);\n insertElement(root, block, forward);\n return rangeBefore(br);\n };\n var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n if (rootBlockName === '') {\n return insertBr(root, forward);\n } else {\n return insertBlock$1(root, forward, rootBlockName, attrs);\n }\n };\n var getClosestTargetBlock = function (pos, root) {\n var isRoot = curry(eq$2, root);\n return closest(SugarElement.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\n };\n var isAtFirstOrLastLine = function (root, forward, pos) {\n return forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n };\n var moveCaretToNewEmptyLine = function (editor, forward) {\n var root = SugarElement.fromDom(editor.getBody());\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n var rootBlock = getForcedRootBlock(editor);\n var rootBlockAttrs = getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$1 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n var defaultPatterns = function (patterns) {\n return map(patterns, function (pattern) {\n return __assign({\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0,\n action: noop\n }, pattern);\n });\n };\n var matchesEvent = function (pattern, evt) {\n return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n };\n var match$1 = function (patterns, evt) {\n return bind(defaultPatterns(patterns), function (pattern) {\n return matchesEvent(pattern, evt) ? [pattern] : [];\n });\n };\n var action = function (f) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n return function () {\n return f.apply(null, x);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n\n var moveH$1 = function (editor, forward) {\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveV$2 = function (editor, down) {\n var direction = down ? 1 : -1;\n var range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveToLineEndPoint$2 = function (editor, forward) {\n var isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint(editor, forward, isNearMedia);\n };\n\n var deflate = function (rect, delta) {\n return {\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n };\n };\n var getCorners = function (getYAxisValue, tds) {\n return bind(tds, function (td) {\n var rect = deflate(clone$2(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return Optional.some(newCorner);\n }, function (oldCorner) {\n var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Optional.none());\n };\n var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants$1(SugarElement.fromDom(table), 'td,th,caption').map(function (e) {\n return e.dom;\n });\n var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\n return isTargetCorner(corner, y);\n });\n return findClosestCorner(corners, x, y).map(function (corner) {\n return corner.cell;\n });\n };\n var getBottomValue = function (rect) {\n return rect.bottom;\n };\n var getTopValue = function (rect) {\n return rect.top;\n };\n var isAbove$1 = function (corner, y) {\n return corner.y < y;\n };\n var isBelow$1 = function (corner, y) {\n return corner.y > y;\n };\n var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.exists(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n });\n };\n var startsWithWrapBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n };\n var startsWithBrBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n };\n var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n var lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n return positionIn(!forward, table).exists(function (pos) {\n return pos.isEqual(caretPos);\n });\n };\n var navigateHorizontally = function (editor, forward, table, _td) {\n var rng = editor.selection.getRng();\n var direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n showCaret(direction, editor, table, !forward, false).each(function (newRng) {\n moveToRange(editor, newRng);\n });\n return true;\n }\n return false;\n };\n var getClosestAbovePosition = function (root, table, start) {\n return findClosestPositionInAboveCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left);\n });\n }).getOr(CaretPosition.before(table));\n };\n var getClosestBelowPosition = function (root, table, start) {\n return findClosestPositionInBelowCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left);\n });\n }).getOr(CaretPosition.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return isElement$1(node) && node.nodeName === 'TABLE' ? Optional.some(node) : Optional.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = SugarElement.fromTag(forcedRootBlock);\n setAll(element, getForcedRootBlockAttrs(editor));\n append(element, SugarElement.fromTag('br'));\n if (down) {\n after(SugarElement.fromDom(table), element);\n } else {\n before(SugarElement.fromDom(table), element);\n }\n var rng = editor.dom.createRng();\n rng.setStart(element.dom, 0);\n rng.setEnd(element.dom, 0);\n moveToRange(editor, rng);\n });\n } else {\n moveToRange(editor, pos.toRange());\n }\n };\n var moveCaret = function (editor, down, pos) {\n var table = down ? getTable(true, pos) : getTable(false, pos);\n var last = down === false;\n table.fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (table) {\n return positionIn(last, editor.getBody()).filter(function (lastPos) {\n return lastPos.isEqual(pos);\n }).fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (_) {\n return renderBlock(down, editor, table, pos);\n });\n });\n };\n var navigateVertically = function (editor, down, table, td) {\n var rng = editor.selection.getRng();\n var pos = CaretPosition.fromRangeStart(rng);\n var root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n var newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n var newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n var move$1 = function (editor, forward, mover) {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Optional.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return mover(editor, forward, table, td);\n });\n }).getOr(false);\n };\n var moveH$2 = function (editor, forward) {\n return move$1(editor, forward, navigateHorizontally);\n };\n var moveV$3 = function (editor, forward) {\n return move$1(editor, forward, navigateVertically);\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = detect$3().os;\n execute([\n {\n keyCode: VK.RIGHT,\n action: action(moveH, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH$2, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$2, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$3, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$3, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH$1, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$1, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$2, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$2, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(move, editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(move, editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: action(moveNextWord, editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: action(movePrevWord, editor, caret)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$1, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$1, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$c = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$9, editor, false)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$4, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$5, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$5, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$8, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$8, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$1, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$7, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$7, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$d = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var node, lastNode = root;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n }\n }\n var rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n var walker = new DomTreeWalker(root, root);\n while (node = walker.current()) {\n if (isText$1(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (isBr(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock$2 = function (editor) {\n return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n var getParentBlockName = function (editor) {\n return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n var isListItemParentBlock = function (editor) {\n return getParentBlock$2(editor).filter(function (elm) {\n return isListItem(SugarElement.fromDom(elm));\n }).isSome();\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n var isFirstChild = function (elm) {\n var _a;\n return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n };\n var hasParent$1 = function (elm, parentName) {\n return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n };\n var isListBlock = function (elm) {\n return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n var isNestedList = function (elm) {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n var getContainerBlock = function (containerBlock) {\n var containerBlockParent = containerBlock.parentNode;\n if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n return containerBlockParent;\n }\n return containerBlock;\n };\n var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (isElement$1(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent$1(containerBlock, 'LI')) {\n var containerBlockParent = getContainerBlock(containerBlock);\n dom.insertAfter(newBlock, containerBlockParent);\n if (isFirstChild(containerBlock)) {\n dom.remove(containerBlockParent);\n } else {\n dom.remove(containerBlock);\n }\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n dom.remove(parentBlock);\n } else {\n containerBlock = getContainerBlock(containerBlock);\n var tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n var fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n\n var trimZwsp = function (fragment) {\n each(descendants(SugarElement.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom;\n rawNode.nodeValue = trim$2(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell$5 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
    ';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (isElement$1(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (isText$1(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP ? container.data.length : offset;\n }\n };\n var includeZwspInRange = function (rng) {\n var newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n var trimLeadingLineBreaks = function (node) {\n do {\n if (isText$1(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n var dom = editor.dom;\n Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(SugarElement.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Optional.from(node.className).map(function (currentClasses) {\n return filter(currentClasses.split(/\\s+/), function (clazz) {\n return clazz !== '';\n });\n });\n lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n var filteredClasses = filter(currentClasses, function (clazz) {\n return !contains(attrClasses, clazz);\n });\n var newClasses = __spreadArrays(attrClasses, filteredClasses);\n dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n var appliedAttrs = [\n 'style',\n 'class'\n ];\n var remainingAttrs = filter$1(forcedRootBlockAttrs, function (_, attrs) {\n return !contains(appliedAttrs, attrs);\n });\n dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n }\n if (!parentBlock.hasChildNodes()) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n node = container;\n while (node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n startNode.parentNode.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n var addBrToBlockIfNeeded = function (dom, block) {\n block.normalize();\n var lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$1 = function (editor, evt) {\n var tmpRng, container, offset, parentBlock;\n var newBlock, fragment, containerBlock, parentBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || isBookmarkNode$1(node)) {\n continue;\n }\n clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n var isCaretAtStartOrEndOfBlock = function (start) {\n var node, name;\n var normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$1(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$1(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n var walker = new DomTreeWalker(container, parentBlock);\n if (isText$1(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (isElement$1(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$1(node) && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n newBlockName = getForcedRootBlock(editor);\n var shiftKey = !!(evt && evt.shiftKey);\n var ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$1(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$1(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var editableRoot = getEditableRoot$1(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new DomTreeWalker(container, parentBlock);\n var node;\n var nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n return true;\n }\n }\n };\n var moveSelectionToBr = function (editor, brElm, extraBr) {\n var rng = editor.dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n var insertBrAtCaret = function (editor, evt) {\n var selection = editor.selection;\n var dom = editor.dom;\n var rng = selection.getRng();\n var brElm;\n var extraBr;\n normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container.nodeType === 1 && container.hasChildNodes()) {\n var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && container.nodeType === 3) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var parentBlock = dom.getParent(container, dom.isBlock);\n var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n var isControlKey = !!(evt && evt.ctrlKey);\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n moveSelectionToBr(editor, brElm, extraBr);\n editor.undoManager.add();\n };\n var insertBrBefore = function (editor, inline) {\n var br = SugarElement.fromTag('br');\n before(SugarElement.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n }\n var br = SugarElement.fromTag('br');\n after(SugarElement.fromDom(inline), br);\n moveSelectionToBr(editor, br.dom, false);\n editor.undoManager.add();\n };\n var isBeforeBr$1 = function (pos) {\n return isBr(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr$1(CaretPosition.after(startNode))) {\n return true;\n } else {\n return nextPosition(rootNode, CaretPosition.after(startNode)).map(function (pos) {\n return isBr(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(never, isAnchorLink, isAnchorLink, never);\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var position = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert$2 = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n\n var matchesSelector = function (editor, selector) {\n return getParentBlock$2(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, _shiftKey) {\n return shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, _shiftKey) {\n var brMode = getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, _shiftKey) {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, _shiftKey) {\n var state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre$1 = function (requiredState) {\n return function (editor, _shiftKey) {\n return shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, _shiftKey) {\n return shouldInsertBr(editor);\n };\n var hasShiftKey = function (_editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = getForcedRootBlock(editor);\n var rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match$2 = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Optional.some(action) : Optional.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return evaluateUntil([\n match$2([shouldBlockNewLine$1], newLineAction.none()),\n match$2([inSummaryBlock()], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false)\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true),\n hasShiftKey\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true)\n ], newLineAction.br()),\n match$2([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match$2([inListBlock(true)], newLineAction.block()),\n match$2([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match$2([isBrMode(true)], newLineAction.br()),\n match$2([inBrContext], newLineAction.br()),\n match$2([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n var insert$3 = function (editor, evt) {\n getAction$1(editor, evt).fold(function () {\n insert$2(editor, evt);\n }, function () {\n insert$1(editor, evt);\n }, noop);\n };\n\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n insert$3(editor, event);\n });\n };\n var setup$e = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n\n var executeKeydownOverride$2 = function (editor, evt) {\n execute([\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$1, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$1, editor, false)\n },\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$2, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$2, editor, false)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$f = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\n\n var browser$4 = detect$3().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$4.isIE()) {\n editor.on('keypress', function (_e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (_e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$g = function (editor) {\n setupIeInput(editor);\n editor.on('input', function (e) {\n if (e.isComposing === false) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$1(container)) {\n container.insertData(offset, text);\n return Optional.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = SugarElement.fromText(text);\n if (pos.isAtEnd()) {\n after(elm, textNode);\n } else {\n before(elm, textNode);\n }\n return CaretPosition(textNode.dom, text.length);\n });\n }\n };\n var insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n var locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return prevPosition(root.dom, CaretPosition.before(element));\n }, function (element) {\n return firstPositionIn(element);\n }, function (element) {\n return lastPositionIn(element);\n }, function (element) {\n return nextPosition(root.dom, CaretPosition.after(element));\n });\n };\n };\n var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n return function (checkPos) {\n return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n };\n };\n var setSelection$1 = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n };\n var insertSpaceOrNbspAtSelection = function (editor) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n var root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride$3 = function (editor, evt) {\n execute([{\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$h = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n\n var registerKeyboardOverrides = function (editor) {\n var caret = setupSelectedState(editor);\n setup$b(editor);\n setup$c(editor, caret);\n setup$d(editor, caret);\n setup$e(editor);\n setup$h(editor);\n setup$g(editor);\n setup$f(editor);\n return caret;\n };\n var setup$i = function (editor) {\n if (!isRtc(editor)) {\n return registerKeyboardOverrides(editor);\n } else {\n return Cell(null);\n }\n };\n\n var NodeChange = function () {\n function NodeChange(editor) {\n this.lastPath = [];\n this.editor = editor;\n var lastRng;\n var self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', function (e) {\n var nativeRng = editor.selection.getRng();\n var fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !isEq$1(fakeRng, lastRng)) {\n editor.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n return;\n }\n if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('mouseup', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n NodeChange.prototype.nodeChanged = function (args) {\n var selection = this.editor.selection;\n var node, parents, root;\n if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n root = this.editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n this.editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n this.editor.fire('NodeChange', args);\n }\n };\n NodeChange.prototype.isSameElementPath = function (startElm) {\n var i;\n var currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm);\n if (currentPath.length === this.lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== this.lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n this.lastPath = currentPath;\n return true;\n }\n }\n this.lastPath = currentPath;\n return false;\n };\n return NodeChange;\n }();\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$j = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var isTextBlockNode = function (node) {\n return isElement$1(node) && isTextBlock(SugarElement.fromDom(node));\n };\n var normalizeSelection$1 = function (editor) {\n var rng = editor.selection.getRng();\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n if (CaretPosition.isElementPosition(startPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(normalize$2(rng));\n };\n var setup$k = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\n\n var value$1 = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var getAbsolutePosition = function (elm) {\n var clientRect = elm.getBoundingClientRect();\n var doc = elm.ownerDocument;\n var docElem = doc.documentElement;\n var win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n\n var isContentEditableFalse$a = isContentEditableFalse, isContentEditableTrue$3 = isContentEditableTrue;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$a(elm) && elm !== rootElm;\n };\n var isValidDropTarget = function (editor, targetElement, dragElement) {\n if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n }\n return !isContentEditableFalse$a(targetElement);\n };\n var cloneElement = function (elm) {\n var cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n var createGhost = function (editor, elm, width, height) {\n var dom = editor.dom;\n var clonedElm = elm.cloneNode(true);\n dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var ghostElm = dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width: width,\n height: height\n });\n dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n var appendGhostToBody = function (ghostElm, bodyElm) {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n var overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n };\n var removeElement = function (elm) {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n var isLeftMouseButtonPressed = function (e) {\n return e.button === 0;\n };\n var applyRelPos = function (state, position) {\n return {\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n };\n };\n var start$1 = function (state, editor) {\n return function (e) {\n if (isLeftMouseButtonPressed(e)) {\n var ceElm = find(editor.dom.getParents(e.target), or(isContentEditableFalse$a, isContentEditableTrue$3)).getOr(null);\n if (isDraggable(editor.getBody(), ceElm)) {\n var elmPos = editor.dom.getPos(ceElm);\n var bodyElm = editor.getBody();\n var docElm = editor.getDoc().documentElement;\n state.set({\n element: ceElm,\n dragging: false,\n screenX: e.screenX,\n screenY: e.screenY,\n maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n relX: e.pageX - elmPos.x,\n relY: e.pageY - elmPos.y,\n width: ceElm.offsetWidth,\n height: ceElm.offsetHeight,\n ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight)\n });\n }\n }\n };\n };\n var move$2 = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n editor.on('remove', throttledPlaceCaretAt.stop);\n return function (e) {\n return state.on(function (state) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (!state.dragging && movement > 10) {\n var args = editor.fire('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n var targetPos = applyRelPos(state, calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n throttledPlaceCaretAt(e.clientX, e.clientY);\n }\n });\n };\n };\n var getRawTarget = function (selection) {\n var rng = selection.getSel().getRangeAt(0);\n var startContainer = rng.startContainer;\n return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n };\n var drop = function (state, editor) {\n return function (e) {\n state.on(function (state) {\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n var targetClone_1 = cloneElement(state.element);\n var args = editor.fire('drop', {\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(function () {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n }\n });\n removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n state.on(function (state) {\n if (state.dragging) {\n editor.fire('dragend');\n }\n });\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.on(function (state) {\n removeElement(state.ghost);\n });\n state.clear();\n };\n var bindFakeDragEvents = function (editor) {\n var state = value$1();\n var pageDom = DOMUtils.DOM;\n var rootDocument = document;\n var dragStartHandler = start$1(state, editor);\n var dragHandler = move$2(state, editor);\n var dropHandler = drop(state, editor);\n var dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$a(realTarget) || editor.dom.getContentEditableParent(realTarget) === 'false') {\n e.preventDefault();\n }\n });\n };\n var blockUnsupportedFileDrop = function (editor) {\n var preventFileDrop = function (e) {\n if (!e.isDefaultPrevented()) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n e.preventDefault();\n if (e.type === 'drop') {\n displayError(editor, 'Dropped file type is not supported');\n }\n }\n }\n };\n var preventFileDropIfUIElement = function (e) {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n var setup = function () {\n var pageDom = DOMUtils.DOM;\n var dom = editor.dom;\n var doc = document;\n var editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n var eventNames = [\n 'drop',\n 'dragover'\n ];\n each(eventNames, function (name) {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', function () {\n each(eventNames, function (name) {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', function () {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n var setup$l = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, rng, false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', function () {\n renderFocusCaret.throttle();\n });\n editor.on('blur', function () {\n renderFocusCaret.cancel();\n });\n };\n\n var setup$m = function (editor) {\n editor.on('init', function () {\n editor.on('focusin', function (e) {\n var target = e.target;\n if (isMedia(target)) {\n var ceRoot = getContentEditableRoot(editor.getBody(), target);\n var node = isContentEditableFalse(ceRoot) ? ceRoot : target;\n if (editor.selection.getNode() !== node) {\n selectNode(editor, node).each(function (rng) {\n return editor.selection.setRng(rng);\n });\n }\n }\n });\n });\n };\n\n var isContentEditableTrue$4 = isContentEditableTrue;\n var isContentEditableFalse$b = isContentEditableFalse;\n var getContentEditableRoot$1 = function (editor, node) {\n return getContentEditableRoot(editor.getBody(), node);\n };\n var SelectionOverrides = function (editor) {\n var selection = editor.selection, dom = editor.dom;\n var isBlock = dom.isBlock;\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor, rootNode, isBlock, function () {\n return hasFocus$1(editor);\n });\n var realSelectionId = 'sel-' + dom.uniqueId();\n var elementSelectionAttr = 'data-mce-selected';\n var selectedElement;\n var isFakeSelectionElement = function (node) {\n return dom.hasClass(node, 'mce-offscreen-selection');\n };\n var isFakeSelectionTargetElement = function (node) {\n return node !== rootNode && (isContentEditableFalse$b(node) || isMedia(node)) && dom.isChildOf(node, rootNode);\n };\n var isNearFakeSelectionElement = function (pos) {\n return isBeforeContentEditableFalse(pos) || isAfterContentEditableFalse(pos) || isBeforeMedia(pos) || isAfterMedia(pos);\n };\n var getRealSelectionElement = function () {\n var container = dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n selection.setRng(range);\n }\n };\n var getRange = selection.getRng;\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e = editor.fire('ShowCaret', {\n target: node,\n direction: direction,\n before: before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n var showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n selection.scrollIntoView(blockCaretContainer);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && isXYInContentArea(editor, e.clientX, e.clientY)) {\n renderCaretAtRange(editor, range, false).each(setRange);\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$4(contentEditableRoot)) {\n if (dom.isChildOf(contentEditableRoot, selection.getNode())) {\n removeElementSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', removeElementSelection);\n editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n var hasNormalCaretPosition = function (elm) {\n var caretWalker = CaretWalker(elm);\n if (!elm.firstChild) {\n return false;\n }\n var startPos = CaretPosition.before(elm.firstChild);\n var newPos = caretWalker.next(startPos);\n return newPos && !isNearFakeSelectionElement(newPos);\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = dom.getParent(node1, isBlock);\n var block2 = dom.getParent(node2, isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = dom.getParent(targetNode, isBlock);\n var caretBlock = dom.getParent(caretNode, isBlock);\n if (targetBlock && targetNode !== caretBlock && dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$b(getContentEditableRoot$1(editor, targetBlock)) === false) {\n return true;\n }\n return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n editor.on('tap', function (e) {\n var targetElm = e.target;\n var contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n selectNode(editor, contentEditableRoot).each(setElementSelection);\n } else if (isFakeSelectionTargetElement(targetElm)) {\n selectNode(editor, targetElm).each(setElementSelection);\n }\n }, true);\n editor.on('mousedown', function (e) {\n var targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n var contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n selectNode(editor, contentEditableRoot).each(setElementSelection);\n } else {\n removeElementSelection();\n if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !isXYWithinRange(e.clientX, e.clientY, selection.getRng())) {\n hideFakeCaret();\n selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeSelectionTargetElement(targetElm)) {\n selectNode(editor, targetElm).each(setElementSelection);\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeElementSelection();\n hideFakeCaret();\n var fakeCaretInfo = closestFakeCaret(rootNode, e.clientX, e.clientY);\n if (fakeCaretInfo) {\n if (!hasBetterMouseTarget(targetElm, fakeCaretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, fakeCaretInfo.node, fakeCaretInfo.before, false);\n editor.getBody().focus();\n setRange(range);\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n if (isContentEditableFalse$b(selection.getNode())) {\n e.preventDefault();\n }\n });\n editor.on('GetSelectionRange', function (e) {\n var rng = e.range;\n if (selectedElement) {\n if (!selectedElement.parentNode) {\n selectedElement = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedElement);\n e.range = rng;\n }\n });\n editor.on('SetSelectionRange', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setElementSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n var isPasteBin = function (node) {\n return node.id === 'mcepastebin';\n };\n editor.on('AfterSetSelectionRange', function (e) {\n var rng = e.range;\n var parentNode = rng.startContainer.parentNode;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(parentNode)) {\n removeElementSelection();\n }\n });\n editor.on('copy', function (e) {\n var clipboardData = e.clipboardData;\n if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n var realSelectionElement = getRealSelectionElement();\n if (realSelectionElement) {\n e.preventDefault();\n clipboardData.clearData();\n clipboardData.setData('text/html', realSelectionElement.outerHTML);\n clipboardData.setData('text/plain', realSelectionElement.outerText || realSelectionElement.innerText);\n }\n }\n });\n init(editor);\n setup$l(editor);\n setup$m(editor);\n };\n var isWithinCaretContainer = function (node) {\n return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\n };\n var isRangeInCaretContainer = function (rng) {\n return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n };\n var normalizeShortEndedElementSelection = function (rng) {\n var shortEndedElements = editor.schema.getShortEndedElements();\n var newRng = dom.createRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n var setupOffscreenSelection = function (node, targetClone, origTargetClone) {\n var $ = editor.$;\n var $realSelectionContainer = descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom]);\n });\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('
    ').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n var newRange = dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

    \\xA0

    ').append(targetClone);\n newRange.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n newRange.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\n newRange.setStart($realSelectionContainer[0].firstChild, 1);\n newRange.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n var sel = selection.getSel();\n sel.removeAllRanges();\n sel.addRange(newRange);\n return newRange;\n };\n var selectElement = function (elm) {\n var targetClone = elm.cloneNode(true);\n var e = editor.fire('ObjectSelected', {\n target: elm,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n var range = setupOffscreenSelection(elm, e.targetClone, targetClone);\n var nodeElm = SugarElement.fromDom(elm);\n each(descendants$1(SugarElement.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n if (!eq$2(nodeElm, elm)) {\n remove$1(elm, elementSelectionAttr);\n }\n });\n if (!dom.getAttrib(elm, elementSelectionAttr)) {\n elm.setAttribute(elementSelectionAttr, '1');\n }\n selectedElement = elm;\n hideFakeCaret();\n return range;\n };\n var setElementSelection = function (range, forward) {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n var dir = forward ? 1 : -1;\n var caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n var beforeNode = caretPosition.getNode(!forward);\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n var afterNode = caretPosition.getNode(forward);\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n }\n return null;\n }\n var startContainer = range.startContainer;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$b(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n var node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n var removeElementSelection = function () {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove);\n selectedElement = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedElement = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse) {\n registerEvents();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var Quirks = function (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var inputMethodFocus = function () {\n if (!editor.inline) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n var rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n var removeHrOnBackspace = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var node = selection.getNode();\n var previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n var focusBody = function () {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n var root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!getObjectResizing(editor)) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!isReadOnly(editor)) {\n editor.on('BeforeExecCommand mousedown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (getForcedRootBlock(editor)) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n var selection_1 = editor.selection.getSel();\n selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = fromPoint$1(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = noop;\n var isHidden = function () {\n if (!isGecko || editor.removed) {\n return false;\n }\n var sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n };\n\n var DOM$4 = DOMUtils.DOM;\n var appendStyle = function (editor, text) {\n var body = SugarElement.fromDom(editor.getBody());\n var container = getStyleContainer(getRootNode(body));\n var style = SugarElement.fromTag('style');\n set(style, 'type', 'text/css');\n append(style, SugarElement.fromText(text));\n append(container, style);\n editor.on('remove', function () {\n remove(style);\n });\n };\n var getRootName = function (editor) {\n return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n };\n var removeUndefined = function (obj) {\n return filter$1(obj, function (v) {\n return isUndefined(v) === false;\n });\n };\n var mkParserSettings = function (editor) {\n var settings = editor.settings;\n var blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: settings.allow_conditional_comments,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_svg_data_urls: settings.allow_svg_data_urls,\n allow_html_in_named_anchor: settings.allow_html_in_named_anchor,\n allow_script_urls: settings.allow_script_urls,\n allow_unsafe_link_target: settings.allow_unsafe_link_target,\n convert_fonts_to_spans: settings.convert_fonts_to_spans,\n fix_list_elements: settings.fix_list_elements,\n font_size_legacy_values: settings.font_size_legacy_values,\n forced_root_block: settings.forced_root_block,\n forced_root_block_attrs: settings.forced_root_block_attrs,\n padd_empty_with_br: settings.padd_empty_with_br,\n preserve_cdata: settings.preserve_cdata,\n remove_trailing_brs: settings.remove_trailing_brs,\n inline_styles: settings.inline_styles,\n root_name: getRootName(editor),\n validate: true,\n blob_cache: blobCache,\n images_dataimg_filter: settings.images_dataimg_filter\n });\n };\n var mkSerializerSettings = function (editor) {\n var settings = editor.settings;\n return __assign(__assign({}, mkParserSettings(editor)), removeUndefined({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope,\n element_format: settings.element_format,\n entities: settings.entities,\n entity_encoding: settings.entity_encoding,\n indent: settings.indent,\n indent_after: settings.indent_after,\n indent_before: settings.indent_before,\n block_elements: settings.block_elements,\n boolean_attributes: settings.boolean_attributes,\n custom_elements: settings.custom_elements,\n extended_valid_elements: settings.extended_valid_elements,\n invalid_elements: settings.invalid_elements,\n invalid_styles: settings.invalid_styles,\n move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements,\n non_empty_elements: settings.non_empty_elements,\n schema: settings.schema,\n self_closing_elements: settings.self_closing_elements,\n short_ended_elements: settings.short_ended_elements,\n special: settings.special,\n text_block_elements: settings.text_block_elements,\n text_inline_elements: settings.text_inline_elements,\n valid_children: settings.valid_children,\n valid_classes: settings.valid_classes,\n valid_elements: settings.valid_elements,\n valid_styles: settings.valid_styles,\n verify_html: settings.verify_html,\n whitespace_elements: settings.whitespace_elements\n }));\n };\n var createParser = function (editor) {\n var parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node, value;\n var dom = editor.dom;\n var internalName = 'data-mce-' + name;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n if (value && !node.attr(internalName)) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (editor.settings.preserve_cdata) {\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n var node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var moveSelectionToFirstCaretPosition = function (editor) {\n var root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos;\n if (Env.browser.isIE()) {\n storeNative(editor, caretPos.toRange());\n } else {\n editor.selection.setRng(caretPos.toRange());\n }\n });\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader = function (editor) {\n return editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var makeStylesheetLoadingPromises = function (editor, css, framedFonts) {\n var promises = [new promiseObj(function (resolve, reject) {\n return getStyleSheetLoader(editor).loadAll(css, resolve, reject);\n })];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([new promiseObj(function (resolve, reject) {\n return editor.ui.styleSheetLoader.loadAll(framedFonts, resolve, reject);\n })]);\n }\n };\n var loadContentCss = function (editor, css) {\n var styleSheetLoader = getStyleSheetLoader(editor);\n var fontCss = getFontCss(editor);\n var removeCss = function () {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n var loaded = function () {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n initEditor(editor);\n }\n };\n promiseObj.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n };\n var preInit = function (editor, rtcMode) {\n var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody();\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$4.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n var directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n if (rtcMode === false) {\n editor.load({\n initial: true,\n format: 'html'\n });\n }\n editor.startContent = editor.getContent({ format: 'raw' });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n if (editor.contentStyles.length > 0) {\n var contentCssText_1 = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText_1 += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText_1);\n }\n loadContentCss(editor, editor.contentCSS);\n if (settings.content_style) {\n appendStyle(editor, settings.content_style);\n }\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc();\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !editor.inline) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (editor.inline) {\n DOM$4.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = document;\n editor.contentWindow = window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n }\n var body = editor.getBody();\n body.disabled = true;\n editor.readonly = !!settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$4.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n hex_colors: settings.force_hex_style_colors,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: function () {\n return editor.inline;\n },\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$9(editor);\n setup$j(editor);\n if (!isRtc(editor)) {\n setup$k(editor);\n }\n var caret = setup$i(editor);\n setup$8(editor, caret);\n setup$a(editor);\n setup$7(editor);\n firePreInit(editor);\n setup$5(editor).fold(function () {\n preInit(editor, false);\n }, function (loadingRtc) {\n editor.setProgressState(true);\n loadingRtc.then(function (rtcMode) {\n editor.setProgressState(false);\n preInit(editor, rtcMode);\n }, function (err) {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n preInit(editor, true);\n });\n });\n };\n\n var DOM$5 = DOMUtils.DOM;\n var relaxDomain = function (editor, ifr) {\n if (document.domain !== window.location.hostname && Env.browser.isIE()) {\n var bodyUuid = uuid('mce');\n editor[bodyUuid] = function () {\n initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$5.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = SugarElement.fromTag('iframe');\n setAll(iframe, customAttrs);\n setAll(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n add$3(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var iframeHTML = getDocType(editor) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n var bodyId = getBodyId(editor);\n var bodyClass = getBodyClass(editor);\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
    ';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. Press ALT-0 for help.');\n var ifr = createIframeElement(editor.id, title, o.height, getIframeAttrs(editor)).dom;\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n if (!isDomainRelaxed) {\n initContentBody(editor);\n }\n };\n\n var DOM$6 = DOMUtils.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager.get(plugin);\n var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(getPlugins(editor).split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initIcons = function (editor) {\n var iconPackName = Tools.trim(getIconPackName(editor));\n var currentIcons = editor.ui.registry.getAll().icons;\n var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons);\n each$1(loadIcons, function (svgData, icon) {\n if (!has(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n var initTheme = function (editor) {\n var theme = getTheme(editor);\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n var Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n return editor.theme.renderUI();\n };\n var renderFromThemeFunc = function (editor) {\n var elm = editor.getElement();\n var theme = getTheme(editor);\n var info = theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element,\n api: {}\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$6.create('div');\n DOM$6.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var augmentEditorUiApi = function (editor, api) {\n var uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n disable: Optional.from(api.disable).getOr(noop),\n isDisabled: Optional.from(api.isDisabled).getOr(never),\n enable: function () {\n if (!editor.mode.isReadOnly()) {\n Optional.from(api.enable).map(call);\n }\n }\n };\n editor.ui = __assign(__assign({}, editor.ui), uiApiFacade);\n };\n var init$2 = function (editor) {\n editor.fire('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initPlugins(editor);\n var renderInfo = renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n var boxInfo = {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n };\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n return initContentBody(editor);\n } else {\n return init$1(editor, boxInfo);\n }\n };\n\n var DOM$7 = DOMUtils.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var languageCode = getLanguageCode(editor);\n var languageUrl = getLanguageUrl(editor);\n if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n scriptLoader.add(url_1, noop, undefined, function () {\n languageLoadError(editor, url_1, languageCode);\n });\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var theme = getTheme(editor);\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = getThemeUrl(editor);\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var getIconsUrlMetaFromUrl = function (editor) {\n return Optional.from(getIconsUrl(editor)).filter(function (url) {\n return url.length > 0;\n }).map(function (url) {\n return {\n url: url,\n name: Optional.none()\n };\n });\n };\n var getIconsUrlMetaFromName = function (editor, name, suffix) {\n return Optional.from(name).filter(function (name) {\n return name.length > 0 && !IconManager.has(name);\n }).map(function (name) {\n return {\n url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js',\n name: Optional.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor, suffix) {\n var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor, getIconPackName(editor), '');\n });\n each(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), function (urlMeta) {\n scriptLoader.add(urlMeta.url, noop, undefined, function () {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n var loadPlugins = function (editor, suffix) {\n Tools.each(getExternalPlugins(editor), function (url, name) {\n PluginManager.load(name, url, noop, undefined, function () {\n pluginLoadError(editor, url, name);\n });\n editor.settings.plugins += ' ' + name;\n });\n Tools.each(getPlugins(editor).split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager.dependencies(plugin);\n Tools.each(dependencies, function (depPlugin) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: depPlugin,\n suffix: '/plugin' + suffix + '.js'\n };\n var dep = PluginManager.createUrl(defaultSettings, depPlugin);\n PluginManager.load(dep.resource, dep, noop, undefined, function () {\n pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource);\n });\n });\n } else {\n var url_2 = {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n };\n PluginManager.load(plugin, url_2, noop, undefined, function () {\n pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin);\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n init$2(editor);\n }\n }, editor, function () {\n if (!editor.removed) {\n init$2(editor);\n }\n });\n });\n };\n var getStyleSheetLoader$1 = function (element, editor) {\n return instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n };\n var render = function (editor) {\n var id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n var readyHandler = function () {\n DOM$7.unbind(window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$7.bind(window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n var element = SugarElement.fromDom(editor.getElement());\n var snapshot = clone(element);\n editor.on('remove', function () {\n eachr(element.dom.attributes, function (attr) {\n return remove$1(element, attr.name);\n });\n setAll(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader$1(element, editor);\n if (!isInline$1(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var form = editor.getElement().form || DOM$7.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n DOM$7.insertAfter(DOM$7.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = function (e) {\n editor.fire(e.type, e);\n };\n DOM$7.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (isEncodingXml(editor)) {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$7.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n\n var addVisual$1 = function (editor, elm) {\n return addVisual(editor, elm);\n };\n\n var legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName).orThunk(function () {\n if (name(elm) === 'font') {\n return get$1(legacyPropNames, propName).bind(function (legacyPropName) {\n return getOpt(elm, legacyPropName);\n });\n } else {\n return Optional.none();\n }\n });\n };\n var isRoot = function (elm) {\n return eq$2(SugarElement.fromDom(rootElm), elm);\n };\n return closest$2(SugarElement.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Optional.from(elm).map(SugarElement.fromDom).filter(isElement).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom));\n }).getOr('');\n };\n };\n var getFontSize = getFontProp('font-size');\n var getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n var findFirstCaretElement = function (editor) {\n return firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return isText$1(container) ? container.parentNode : container;\n });\n };\n var getCaretElement = function (editor) {\n return Optional.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n var atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n };\n var mapRange = function (editor, mapper) {\n return getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement).map(mapper);\n };\n\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = getFontStyleValues(editor);\n var fontClasses = getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var normalizeFontNames = function (font) {\n var fonts = font.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n return '\\'' + font + '\\'';\n } else {\n return font;\n }\n }).join(',');\n };\n var fontNameAction = function (editor, value) {\n var font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontFamily(editor.getBody(), elm.dom);\n }).getOr('');\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontSize(editor.getBody(), elm.dom);\n }).getOr('');\n };\n\n var lineHeightQuery = function (editor) {\n return mapRange(editor, function (elm) {\n var root = SugarElement.fromDom(editor.getBody());\n var specifiedStyle = closest$2(elm, function (elm) {\n return getRaw(elm, 'line-height');\n }, curry(eq$2, root));\n var computedStyle = function () {\n var lineHeight = parseFloat(get$5(elm, 'line-height'));\n var fontSize = parseFloat(get$5(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n };\n var lineHeightAction = function (editor, lineHeight) {\n editor.undoManager.transact(function () {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n });\n };\n\n var processValue = function (value) {\n var details;\n if (typeof value !== 'string') {\n details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret$1 = function (editor, value) {\n var result = processValue(value);\n insertContent(editor, result.content, result.details);\n };\n\n var each$f = Tools.each;\n var map$3 = Tools.map, inArray$2 = Tools.inArray;\n var EditorCommands = function () {\n function EditorCommands(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n this.setupCommands(editor);\n }\n EditorCommands.prototype.execCommand = function (command, ui, value, args) {\n var func, state = false;\n var self = this;\n if (self.editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n self.editor.focus();\n } else {\n restore(self.editor);\n }\n args = self.editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n var customCommand = command.toLowerCase();\n if (func = self.commands.exec[customCommand]) {\n func(customCommand, ui, value);\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$f(this.editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = self.editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n EditorCommands.prototype.queryCommandState = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.state[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.queryCommandValue = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.value[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n EditorCommands.prototype.addCommands = function (commandList, type) {\n if (type === void 0) {\n type = 'exec';\n }\n var self = this;\n each$f(commandList, function (callback, command) {\n each$f(command.toLowerCase().split(','), function (command) {\n self.commands[type][command] = callback;\n });\n });\n };\n EditorCommands.prototype.addCommand = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || _this.editor, ui, value, args);\n };\n };\n EditorCommands.prototype.queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (this.commands.exec[command]) {\n return true;\n }\n try {\n return this.editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.state[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.value[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!this.commands.exec[command];\n };\n EditorCommands.prototype.execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return this.editor.getDoc().execCommand(command, ui, value);\n };\n EditorCommands.prototype.isFormatMatch = function (name) {\n return this.editor.formatter.match(name);\n };\n EditorCommands.prototype.toggleFormat = function (name, value) {\n this.editor.formatter.toggle(name, value ? { value: value } : undefined);\n this.editor.nodeChanged();\n };\n EditorCommands.prototype.storeSelection = function (type) {\n this.selectionBookmark = this.editor.selection.getBookmark(type);\n };\n EditorCommands.prototype.restoreSelection = function () {\n this.editor.selection.moveToBookmark(this.selectionBookmark);\n };\n EditorCommands.prototype.setupCommands = function (editor) {\n var self = this;\n this.addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': noop,\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'Cut,Copy,Paste': function (command) {\n var doc = editor.getDoc();\n var failed;\n try {\n self.execNativeCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.mac) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n },\n 'unlink': function () {\n if (editor.selection.isCollapsed()) {\n var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n editor.formatter.remove('link');\n },\n 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n var align = command.substring(7);\n if (align === 'full') {\n align = 'justify';\n }\n each$f('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n self.toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listParent;\n self.execNativeCommand(command);\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n self.storeSelection();\n editor.dom.split(listParent, listElm);\n self.restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n self.toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n self.toggleFormat(command, value);\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'LineHeight': function (command, ui, value) {\n lineHeightAction(editor, value);\n },\n 'RemoveFormat': function (command) {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n self.toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return self.toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || editor.selection.getNode();\n if (node !== editor.getBody()) {\n self.storeSelection();\n editor.dom.remove(node, true);\n self.restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n editor.dom.getParent(editor.selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n editor.selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n editor.selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n insertAtCaret$1(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n editor.selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceInsertNewLine': function (command, ui, value) {\n insert$3(editor, value);\n },\n 'mceToggleFormat': function (command, ui, value) {\n self.toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': noop,\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
    ');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n if (typeof value === 'string') {\n value = { href: value };\n }\n var anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n value.href = value.href.replace(/ /g, '%20');\n if (!anchor || !value.href) {\n editor.formatter.remove('link');\n }\n if (value.href) {\n editor.formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n insert$2(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var selection = editor.selection;\n var nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map$3(nodes, function (node) {\n return !!editor.formatter.matchNode(node, name);\n });\n return inArray$2(matches, true) !== -1;\n };\n };\n self.addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return self.isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return self.isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n return canOutdent(editor);\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n self.addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n self.addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n self.addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n self.addQueryValueHandler('LineHeight', function () {\n return lineHeightQuery(editor);\n }, this);\n };\n return EditorCommands;\n }();\n\n var internalContentEditableAttr = 'data-mce-contenteditable';\n var toggleClass = function (elm, cls, state) {\n if (has$2(elm, cls) && state === false) {\n remove$4(elm, cls);\n } else if (state) {\n add$3(elm, cls);\n }\n };\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n var setContentEditable = function (elm, state) {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n var switchOffContentEditableTrue = function (elm) {\n each(descendants$1(elm, '*[contenteditable=\"true\"]'), function (elm) {\n set(elm, internalContentEditableAttr, 'true');\n setContentEditable(elm, false);\n });\n };\n var switchOnContentEditableTrue = function (elm) {\n each(descendants$1(elm, '*[' + internalContentEditableAttr + '=\"true\"]'), function (elm) {\n remove$1(elm, internalContentEditableAttr);\n setContentEditable(elm, true);\n });\n };\n var removeFakeSelection = function (editor) {\n Optional.from(editor.selection.getNode()).each(function (elm) {\n elm.removeAttribute('data-mce-selected');\n });\n };\n var restoreFakeSelection = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var toggleReadOnly = function (editor, state) {\n var body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n editor.readonly = true;\n setContentEditable(body, false);\n switchOffContentEditableTrue(body);\n } else {\n editor.readonly = false;\n setContentEditable(body, true);\n switchOnContentEditableTrue(body);\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly$1 = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly$1(editor)) {\n each(nodes, function (node) {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n if (isReadOnly$1(editor)) {\n each(nodes, function (node) {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n var registerReadOnlyContentFilters = function (editor) {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', function () {\n registerFilters(editor);\n });\n }\n };\n var isClickEvent = function (e) {\n return e.type === 'click';\n };\n var getAnchorHrefOpt = function (editor, elm) {\n var isRoot = function (elm) {\n return eq$2(elm, SugarElement.fromDom(editor.getBody()));\n };\n return closest$1(elm, 'a', isRoot).bind(function (a) {\n return getOpt(a, 'href');\n });\n };\n var processReadonlyEvents = function (editor, e) {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n var elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(function (href) {\n e.preventDefault();\n if (/^#/.test(href)) {\n var targetEl = editor.dom.select(href + ',[name=\"' + removeLeading(href, '#') + '\"]');\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n }\n });\n }\n };\n var registerReadOnlySelectionBlockers = function (editor) {\n editor.on('ShowCaret', function (e) {\n if (isReadOnly$1(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly$1(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n var EventDispatcher = function () {\n function EventDispatcher(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n EventDispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n EventDispatcher.prototype.fire = function (nameIn, argsIn) {\n var name = nameIn.toLowerCase();\n var args = argsIn || {};\n args.type = name;\n if (!args.target) {\n args.target = this.scope;\n }\n if (!args.preventDefault) {\n args.preventDefault = function () {\n args.isDefaultPrevented = always;\n };\n args.stopPropagation = function () {\n args.isPropagationStopped = always;\n };\n args.stopImmediatePropagation = function () {\n args.isImmediatePropagationStopped = always;\n };\n args.isDefaultPrevented = never;\n args.isPropagationStopped = never;\n args.isImmediatePropagationStopped = never;\n }\n if (this.settings.beforeFire) {\n this.settings.beforeFire(args);\n }\n var handlers = this.bindings[name];\n if (handlers) {\n for (var i = 0, l = handlers.length; i < l; i++) {\n var callback = handlers[i];\n if (callback.once) {\n this.off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(this.scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n var wrappedCallback = { func: callback };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = this.bindings[currentName] = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers.unshift(wrappedCallback);\n } else {\n handlers.push(wrappedCallback);\n }\n }\n }\n return this;\n };\n EventDispatcher.prototype.off = function (name, callback) {\n var _this = this;\n if (name) {\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!currentName) {\n each$1(this.bindings, function (_value, bindingName) {\n _this.toggleEvent(bindingName, false);\n delete _this.bindings[bindingName];\n });\n return this;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n var hi = handlers.length;\n while (hi--) {\n if (handlers[hi].func === callback) {\n handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\n this.bindings[currentName] = handlers;\n }\n }\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[currentName];\n }\n }\n }\n } else {\n each$1(this.bindings, function (_value, name) {\n _this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n };\n EventDispatcher.prototype.once = function (name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n };\n EventDispatcher.prototype.has = function (name) {\n name = name.toLowerCase();\n return !(!this.bindings[name] || this.bindings[name].length === 0);\n };\n return EventDispatcher;\n }();\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n var dispatcherArgs = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent_1 = self.parent();\n while (parent_1 && !dispatcherArgs.isPropagationStopped()) {\n parent_1.fire(name, dispatcherArgs, false);\n parent_1 = parent_1.parent();\n }\n }\n return dispatcherArgs;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var DOM$8 = DOMUtils.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (editor, eventName) {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n var eventRoot = getEventRoot(editor);\n if (eventRoot) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$8.select(eventRoot)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !isReadOnly$1(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly$1(editor)) {\n processReadonlyEvents(editor, e);\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n var eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$1(customEventRootDelegates, function (_value, name) {\n editor.dom.unbind(getEventTarget(editor, name));\n });\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var body = editors[i].getBody();\n if (body === target || DOM$8.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$8.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$8.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = __assign(__assign({}, Observable), {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n if (self.delegates) {\n each$1(self.delegates, function (value, name) {\n self.dom.unbind(getEventTarget(self, name), name, value);\n });\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n });\n\n var defaultModes = [\n 'design',\n 'readonly'\n ];\n var switchToMode = function (editor, activeMode, availableModes, mode) {\n var oldMode = availableModes[activeMode.get()];\n var newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n console.error('problem while activating editor mode ' + mode + ':', e);\n return;\n }\n oldMode.deactivate();\n if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n toggleReadOnly(editor, newMode.editorReadOnly);\n }\n activeMode.set(mode);\n fireSwitchMode(editor, mode);\n };\n var setMode = function (editor, availableModes, activeMode, mode) {\n if (mode === activeMode.get()) {\n return;\n } else if (!has(availableModes, mode)) {\n throw new Error('Editor mode \\'' + mode + '\\' is invalid');\n }\n if (editor.initialized) {\n switchToMode(editor, activeMode, availableModes, mode);\n } else {\n editor.on('init', function () {\n return switchToMode(editor, activeMode, availableModes, mode);\n });\n }\n };\n var registerMode = function (availableModes, mode, api) {\n var _a;\n if (contains(defaultModes, mode)) {\n throw new Error('Cannot override default mode ' + mode);\n }\n return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), {\n deactivate: function () {\n try {\n api.deactivate();\n } catch (e) {\n console.error('problem while deactivating editor mode ' + mode + ':', e);\n }\n }\n }), _a));\n };\n\n var create$5 = function (editor) {\n var activeMode = Cell('design');\n var availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyContentFilters(editor);\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: function () {\n return isReadOnly$1(editor);\n },\n set: function (mode) {\n return setMode(editor, availableModes.get(), activeMode, mode);\n },\n get: function () {\n return activeMode.get();\n },\n register: function (mode, api) {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n var each$g = Tools.each, explode$3 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n var parseShortcut = function (pattern) {\n var key;\n var shortcut = {};\n each$g(explode$3(pattern.toLowerCase(), '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n var id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var Shortcuts = function () {\n function Shortcuts(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n var self = this;\n editor.on('keyup keypress keydown', function (e) {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$g(self.shortcuts, function (shortcut) {\n if (self.matchShortcut(e, shortcut)) {\n self.pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n self.executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (self.matchShortcut(e, self.pendingPatterns[0])) {\n if (self.pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n self.executeShortcutAction(self.pendingPatterns[0]);\n }\n }\n self.pendingPatterns.shift();\n }\n }\n });\n }\n Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) {\n var self = this;\n var func = self.normalizeCommandFunc(cmdFunc);\n each$g(explode$3(Tools.trim(pattern)), function (pattern) {\n var shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n Shortcuts.prototype.remove = function (pattern) {\n var shortcut = this.createShortcut(pattern);\n if (this.shortcuts[shortcut.id]) {\n delete this.shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n Shortcuts.prototype.normalizeCommandFunc = function (cmdFunc) {\n var self = this;\n var cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return function () {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return function () {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n };\n Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts = Tools.map(explode$3(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || this.editor\n });\n return Tools.extend(shortcuts[0], {\n desc: this.editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n Shortcuts.prototype.hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n Shortcuts.prototype.isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n Shortcuts.prototype.matchShortcut = function (e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n };\n Shortcuts.prototype.executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n return Shortcuts;\n }();\n\n var create$6 = function () {\n var buttons = {};\n var menuItems = {};\n var popups = {};\n var icons = {};\n var contextMenus = {};\n var contextToolbars = {};\n var sidebars = {};\n var add = function (collection, type) {\n return function (name, spec) {\n return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type });\n };\n };\n var addIcon = function (name, svgData) {\n return icons[name.toLowerCase()] = svgData;\n };\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: add(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addIcon: addIcon,\n getAll: function () {\n return {\n buttons: buttons,\n menuItems: menuItems,\n icons: icons,\n popups: popups,\n contextMenus: contextMenus,\n contextToolbars: contextToolbars,\n sidebars: sidebars\n };\n }\n };\n };\n\n var registry = function () {\n var bridge = create$6();\n return {\n addAutocompleter: bridge.addAutocompleter,\n addButton: bridge.addButton,\n addContextForm: bridge.addContextForm,\n addContextMenu: bridge.addContextMenu,\n addContextToolbar: bridge.addContextToolbar,\n addIcon: bridge.addIcon,\n addMenuButton: bridge.addMenuButton,\n addMenuItem: bridge.addMenuItem,\n addNestedMenuItem: bridge.addNestedMenuItem,\n addSidebar: bridge.addSidebar,\n addSplitButton: bridge.addSplitButton,\n addToggleButton: bridge.addToggleButton,\n addGroupToolbarButton: bridge.addGroupToolbarButton,\n addToggleMenuItem: bridge.addToggleMenuItem,\n getAll: bridge.getAll\n };\n };\n\n var each$h = Tools.each, trim$4 = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var URI = function () {\n function URI(url, settings) {\n url = trim$4(url);\n this.settings = settings || {};\n var baseUri = this.settings.base_uri;\n var self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory;\n if (this.settings.base_uri && this.settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n var match = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n var urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$h(queryParts, function (v, i) {\n var part = urlMatch[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n }\n URI.parseDataUri = function (uri) {\n var type;\n var uriComponents = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriComponents[1]\n };\n };\n URI.getDocumentBaseUrl = function (loc) {\n var baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = loc.href;\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n };\n URI.prototype.setPath = function (path) {\n var pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n this.source = '';\n this.getURI();\n };\n URI.prototype.toRelative = function (uri) {\n var output;\n if (uri === './') {\n return uri;\n }\n var relativeUri = new URI(uri, { base_uri: this });\n if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n return relativeUri.getURI();\n }\n var tu = this.getURI(), uu = relativeUri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n output = this.toRelPath(this.path, relativeUri.path);\n if (relativeUri.query) {\n output += '?' + relativeUri.query;\n }\n if (relativeUri.anchor) {\n output += '#' + relativeUri.anchor;\n }\n return output;\n };\n URI.prototype.toAbsolute = function (uri, noHost) {\n var absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n };\n URI.prototype.isSameOrigin = function (uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n var defaultPort = DEFAULT_PORTS[this.protocol];\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n };\n URI.prototype.toRelPath = function (base, path) {\n var breakPoint = 0, out = '', i, l;\n var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n var items = path.split('/');\n if (normalizedBase.length >= items.length) {\n for (i = 0, l = normalizedBase.length; i < l; i++) {\n if (i >= items.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (normalizedBase.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n };\n URI.prototype.toAbsPath = function (base, path) {\n var i, nb = 0, o = [], outPath;\n var tr = /\\/$/.test(path) ? '/' : '';\n var normalizedBase = base.split('/');\n var normalizedPath = path.split('/');\n each$h(normalizedBase, function (k) {\n if (k) {\n o.push(k);\n }\n });\n normalizedBase = o;\n for (i = normalizedPath.length - 1, o = []; i >= 0; i--) {\n if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n continue;\n }\n if (normalizedPath[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(normalizedPath[i]);\n }\n i = normalizedBase.length - nb;\n if (i <= 0) {\n outPath = reverse(o).join('/');\n } else {\n outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n };\n URI.prototype.getURI = function (noProtoHost) {\n if (noProtoHost === void 0) {\n noProtoHost = false;\n }\n var s;\n if (!this.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (this.protocol) {\n s += this.protocol + '://';\n } else {\n s += '//';\n }\n if (this.userInfo) {\n s += this.userInfo + '@';\n }\n if (this.host) {\n s += this.host;\n }\n if (this.port) {\n s += ':' + this.port;\n }\n }\n if (this.path) {\n s += this.path;\n }\n if (this.query) {\n s += '?' + this.query;\n }\n if (this.anchor) {\n s += '#' + this.anchor;\n }\n this.source = s;\n }\n return this.source;\n };\n return URI;\n }();\n\n var DOM$9 = DOMUtils.DOM;\n var extend$3 = Tools.extend, each$i = Tools.each;\n var resolve$3 = Tools.resolve;\n var ie$1 = Env.ie;\n var Editor = function () {\n function Editor(id, settings, editorManager) {\n var _this = this;\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend$3(this, EditorObservable);\n this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings);\n if (this.settings.suffix) {\n editorManager.suffix = this.settings.suffix;\n }\n this.suffix = editorManager.suffix;\n if (this.settings.base_url) {\n editorManager._setBaseUrl(this.settings.base_url);\n }\n this.baseUri = editorManager.baseURI;\n if (this.settings.referrer_policy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n }\n AddOnManager.languageLoad = this.settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n this.id = id;\n this.setDirty(false);\n this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = !!this.settings.inline;\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n if (this.settings.cache_suffix) {\n Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n enable: noop,\n disable: noop,\n isDisabled: never\n };\n var self = this;\n var modeInstance = create$5(self);\n this.mode = modeInstance;\n this.setMode = modeInstance.set;\n editorManager.fire('SetupEditor', { editor: this });\n this.execCallback('setup', this);\n this.$ = DomQuery.overrideDefaults(function () {\n return {\n context: _this.inline ? _this.getBody() : _this.getDoc(),\n element: _this.getBody()\n };\n });\n }\n Editor.prototype.render = function () {\n render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n focus$1(this, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return hasFocus$1(this);\n };\n Editor.prototype.execCallback = function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve$3(scope) : 0;\n callback = resolve$3(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, x);\n };\n Editor.prototype.translate = function (text) {\n return I18n.translate(text);\n };\n Editor.prototype.getParam = function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n };\n Editor.prototype.hasPlugin = function (name, loaded) {\n var hasPlugin = contains(getPlugins(this).split(/[ ,]/), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n };\n Editor.prototype.nodeChanged = function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n };\n Editor.prototype.addCommand = function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n };\n Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n };\n Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n };\n Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n };\n Editor.prototype.execCommand = function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n };\n Editor.prototype.queryCommandState = function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n };\n Editor.prototype.queryCommandValue = function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n };\n Editor.prototype.queryCommandSupported = function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n };\n Editor.prototype.show = function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = 'true';\n } else {\n DOM$9.show(self.getContainer());\n DOM$9.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n };\n Editor.prototype.hide = function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$1 && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = 'false';\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$9.hide(self.getContainer());\n DOM$9.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n };\n Editor.prototype.isHidden = function () {\n return !!this.hidden;\n };\n Editor.prototype.setProgressState = function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n };\n Editor.prototype.load = function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n var value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n html = self.setContent(value, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n };\n Editor.prototype.save = function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$9.getParent(self.id, 'form')) {\n each$i(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n };\n Editor.prototype.setContent = function (content, args) {\n return setContent$2(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent$2(this, args);\n };\n Editor.prototype.insertContent = function (content, args) {\n if (args) {\n content = extend$3({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n };\n Editor.prototype.resetContent = function (initialContent) {\n if (initialContent === undefined) {\n setContent$2(this, this.startContent, { format: 'raw' });\n } else {\n setContent$2(this, initialContent);\n }\n this.undoManager.reset();\n this.setDirty(false);\n this.nodeChanged();\n };\n Editor.prototype.isDirty = function () {\n return !this.isNotDirty;\n };\n Editor.prototype.setDirty = function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n };\n Editor.prototype.getContainer = function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$9.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n };\n Editor.prototype.getContentAreaContainer = function () {\n return this.contentAreaContainer;\n };\n Editor.prototype.getElement = function () {\n if (!this.targetElm) {\n this.targetElm = DOM$9.get(this.id);\n }\n return this.targetElm;\n };\n Editor.prototype.getWin = function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n };\n Editor.prototype.getDoc = function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n };\n Editor.prototype.getBody = function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n };\n Editor.prototype.convertURL = function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n };\n Editor.prototype.addVisual = function (elm) {\n addVisual$1(this, elm);\n };\n Editor.prototype.remove = function () {\n remove$7(this);\n };\n Editor.prototype.destroy = function (automatic) {\n destroy(this, automatic);\n };\n Editor.prototype.uploadImages = function (callback) {\n return this.editorUpload.uploadImages(callback);\n };\n Editor.prototype._scanForImages = function () {\n return this.editorUpload.scanForImages();\n };\n Editor.prototype.addButton = function () {\n throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead');\n };\n Editor.prototype.addSidebar = function () {\n throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead');\n };\n Editor.prototype.addMenuItem = function () {\n throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead');\n };\n Editor.prototype.addContextToolbar = function () {\n throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead');\n };\n return Editor;\n }();\n\n var DOM$a = DOMUtils.DOM;\n var explode$4 = Tools.explode, each$j = Tools.each, extend$4 = Tools.extend;\n var instanceCounter = 0, boundGlobalEvents = false;\n var beforeUnloadDelegate;\n var legacyEditors = [];\n var editors = [];\n var isValidLegacyKey = function (id) {\n return id !== 'length';\n };\n var globalEventDelegate = function (e) {\n var type = e.type;\n each$j(EditorManager.get(), function (editor) {\n switch (type) {\n case 'scroll':\n editor.fire('ScrollWindow', e);\n break;\n case 'resize':\n editor.fire('ResizeWindow', e);\n break;\n }\n });\n };\n var toggleGlobalEvents = function (state) {\n if (state !== boundGlobalEvents) {\n if (state) {\n DomQuery(window).on('resize scroll', globalEventDelegate);\n } else {\n DomQuery(window).off('resize scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n var removeEditorFromList = function (targetEditor) {\n var oldEditors = editors;\n delete legacyEditors[targetEditor.id];\n for (var i = 0; i < legacyEditors.length; i++) {\n if (legacyEditors[i] === targetEditor) {\n legacyEditors.splice(i, 1);\n break;\n }\n }\n editors = filter(editors, function (editor) {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n var purgeDestroyedEditor = function (editor) {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n editor = null;\n }\n return editor;\n };\n var isQuirksMode = document.compatMode !== 'CSS1Compat';\n var EditorManager = __assign(__assign({}, Observable), {\n baseURI: null,\n baseURL: null,\n defaultSettings: {},\n documentBaseURL: null,\n suffix: null,\n $: DomQuery,\n majorVersion: '5',\n minorVersion: '7.0',\n releaseDate: '2021-02-10',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && document.currentScript) {\n var src = document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n setup$2(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n var suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$1(pluginBaseUrls, function (pluginBaseUrl, pluginName) {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init: function (settings) {\n var self = this;\n var result;\n var invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = get$1(elm, 'name').filter(function (name) {\n return !DOM$a.get(name);\n }).getOrThunk(DOM$a.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM$a.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var targets = [];\n if (Env.browser.isIE() && Env.browser.version.major < 11) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n return [];\n } else if (isQuirksMode) {\n initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n return [];\n }\n if (settings.types) {\n each$j(settings.types, function (type) {\n targets = targets.concat(DOM$a.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$a.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n var l = settings.elements || '';\n if (l.length > 0) {\n each$j(explode$4(l), function (id) {\n var elm = DOM$a.get(id);\n if (elm) {\n targets.push(elm);\n } else {\n each$j(document.forms, function (f) {\n each$j(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM$a.setAttrib(e, 'id', id);\n targets.push(e);\n }\n });\n });\n }\n });\n }\n break;\n case 'textareas':\n case 'specific_textareas':\n each$j(DOM$a.select('textarea'), function (elm) {\n if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n return;\n }\n if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n targets.push(elm);\n }\n });\n break;\n }\n return targets;\n };\n var provideResults = function (editors) {\n result = editors;\n };\n var initEditors = function () {\n var initCount = 0;\n var editors = [];\n var targets;\n var createEditor = function (id, settings, targetElm) {\n var editor = new Editor(id, settings, self);\n editors.push(editor);\n editor.on('init', function () {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM$a.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$j(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM$a.is(elm, type.selector)) {\n createEditor(createId(elm), extend$4({}, settings, type), elm);\n return false;\n }\n return true;\n });\n });\n return;\n }\n Tools.each(targets, function (elm) {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, function (elm) {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each$j(targets, function (elm) {\n if (isInvalidInlineTarget(settings, elm)) {\n initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM$a.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find(editors, function (editor) {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add: function (editor) {\n var self = this;\n var existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function (e) {\n var event = self.fire('BeforeUnload');\n if (event.returnValue) {\n e.preventDefault();\n e.returnValue = event.returnValue;\n return event.returnValue;\n }\n };\n window.addEventListener('beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each$j(DOM$a.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n window.removeEventListener('beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', false, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$j(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl: function (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n });\n EditorManager.setup();\n\n var min = Math.min, max = Math.max, round$1 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x = targetRect.x;\n var y = targetRect.y;\n var w = rect.w;\n var h = rect.h;\n var targetW = targetRect.w;\n var targetH = targetRect.h;\n var relChars = (rel || '').split('');\n if (relChars[0] === 'b') {\n y += targetH;\n }\n if (relChars[1] === 'r') {\n x += targetW;\n }\n if (relChars[0] === 'c') {\n y += round$1(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round$1(targetW / 2);\n }\n if (relChars[3] === 'b') {\n y -= h;\n }\n if (relChars[4] === 'r') {\n x -= w;\n }\n if (relChars[3] === 'c') {\n y -= round$1(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round$1(w / 2);\n }\n return create$7(x, y, w, h);\n };\n var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n var pos, i;\n for (i = 0; i < rels.length; i++) {\n pos = relativePosition(rect, targetRect, rels[i]);\n if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n return rels[i];\n }\n }\n return null;\n };\n var inflate = function (rect, w, h) {\n return create$7(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1 = max(rect.x, cropRect.x);\n var y1 = max(rect.y, cropRect.y);\n var x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n var y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$7(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp$1 = function (rect, clampRect, fixedSize) {\n var x1 = rect.x;\n var y1 = rect.y;\n var x2 = rect.x + rect.w;\n var y2 = rect.y + rect.h;\n var cx2 = clampRect.x + clampRect.w;\n var cy2 = clampRect.y + clampRect.h;\n var underflowX1 = max(0, clampRect.x - x1);\n var underflowY1 = max(0, clampRect.y - y1);\n var overflowX2 = max(0, x2 - cx2);\n var overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$7(x1, y1, x2 - x1, y2 - y1);\n };\n var create$7 = function (x, y, w, h) {\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var fromClientRect = function (clientRect) {\n return create$7(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n var Rect = {\n inflate: inflate,\n relativePosition: relativePosition,\n findBestRelativePosition: findBestRelativePosition,\n intersect: intersect,\n clamp: clamp$1,\n create: create$7,\n fromClientRect: fromClientRect\n };\n\n var awaiter = function (resolveCb, rejectCb, timeout) {\n if (timeout === void 0) {\n timeout = 1000;\n }\n var done = false;\n var timer = null;\n var complete = function (completer) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done) {\n done = true;\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n completer.apply(null, args);\n }\n };\n };\n var resolve = complete(resolveCb);\n var reject = complete(rejectCb);\n var start = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done && timer === null) {\n timer = setTimeout(function () {\n return reject.apply(null, args);\n }, timeout);\n }\n };\n return {\n start: start,\n resolve: resolve,\n reject: reject\n };\n };\n var create$8 = function () {\n var tasks = {};\n var resultFns = {};\n var load = function (id, url) {\n var loadErrMsg = 'Script at URL \"' + url + '\" failed to load';\n var runErrMsg = 'Script at URL \"' + url + '\" did not call `tinymce.Resource.add(\\'' + id + '\\', data)` within 1 second';\n if (tasks[id] !== undefined) {\n return tasks[id];\n } else {\n var task = new promiseObj(function (resolve, reject) {\n var waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url, function () {\n return waiter.start(runErrMsg);\n }, function () {\n return waiter.reject(loadErrMsg);\n });\n });\n tasks[id] = task;\n return task;\n }\n };\n var add = function (id, data) {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = promiseObj.resolve(data);\n };\n return {\n load: load,\n add: add\n };\n };\n var Resource = create$8();\n\n var each$k = Tools.each, extend$5 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (props) {\n var self = this;\n var _super = self.prototype;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n self._super = _super[name];\n var ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n var prototype = new self();\n initializing = false;\n if (props.Mixins) {\n each$k(props.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n props[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n props.Mixins = _super.Mixins.concat(props.Mixins);\n }\n }\n if (props.Methods) {\n each$k(props.Methods.split(','), function (name) {\n props[name] = dummy;\n });\n }\n if (props.Properties) {\n each$k(props.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n props[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (props.Statics) {\n each$k(props.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (props.Defaults && _super.Defaults) {\n props.Defaults = extend$5({}, _super.Defaults, props.Defaults);\n }\n each$1(props, function (member, name) {\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n });\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min$1 = Math.min, max$1 = Math.max, round$2 = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var minRGB = min$1(r, min$1(g, b));\n var maxRGB = max$1(r, max$1(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n var 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 {\n h: round$2(h),\n s: round$2(s * 100),\n v: round$2(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max$1(0, min$1(saturation, 1));\n brightness = max$1(0, min$1(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$2(255 * brightness);\n return;\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var 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$2(255 * (r + match));\n g = round$2(255 * (g + match));\n b = round$2(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (obj) {\n var data = JSON.stringify(obj);\n if (!isString(data)) {\n return data;\n }\n return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n var hexCode = match.charCodeAt(0).toString(16);\n return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n });\n };\n var JSONUtils = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = __assign(__assign({}, Observable), {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n Delay.setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async !== false;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = new XMLHttpRequest();\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n Delay.setTimeout(ready, 10);\n }\n });\n\n var extend$6 = Tools.extend;\n var JSONRequest = function () {\n function JSONRequest(settings) {\n this.settings = extend$6({}, settings);\n this.count = 0;\n }\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype.send = function (args) {\n var ecb = args.error, scb = args.success;\n var xhrArgs = extend$6(this.settings, args);\n xhrArgs.success = function (c, x) {\n c = JSONUtils.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x);\n } else {\n scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result);\n }\n };\n xhrArgs.error = function (ty, x) {\n if (ecb) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x);\n }\n };\n xhrArgs.data = JSONUtils.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n xhrArgs.content_type = 'application/json';\n XHR.send(xhrArgs);\n };\n return JSONRequest;\n }();\n\n var create$9 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n var test = '__storage_test__';\n localStorage = window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (e) {\n localStorage = create$9();\n }\n var LocalStorage = localStorage;\n\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: EventDispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSONUtils,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color,\n ImageUploader: ImageUploader\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: DomTreeWalker,\n TextSeeker: TextSeeker,\n DOMUtils: DOMUtils,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader: StyleSheetLoader,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: AstNode,\n Schema: Schema,\n SaxParser: SaxParser,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: PluginManager,\n ThemeManager: ThemeManager,\n IconManager: IconManager,\n Resource: Resource,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n var tinymce = Tools.extend(EditorManager, publicApi);\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce);\n exportToModuleLoaders(tinymce);\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var identity = function (x) {\n return x;\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var zeroWidth = '\\uFEFF';\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n\n var 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 var regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: '[-\\'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]',\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\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\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: punctuationStr\n };\n var characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n var SETS = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n var EMPTY_STRING = '';\n var PUNCTUATION = new RegExp('^' + regExps.punctuation + '$');\n var WHITESPACE = /^\\s+$/;\n\n var SETS$1 = SETS;\n var OTHER = characterIndices.OTHER;\n var getType = function (char) {\n var type = OTHER;\n var setsLength = SETS$1.length;\n for (var j = 0; j < setsLength; ++j) {\n var set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (characters) {\n var memoized = memoize(getType);\n return map(characters, memoized);\n };\n\n var isWordBoundary = function (map, index) {\n var type = map[index];\n var nextType = map[index + 1];\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n return false;\n }\n var nextNextType = map[index + 2];\n if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n return false;\n }\n var prevType = map[index - 1];\n if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n return false;\n }\n if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n return false;\n }\n if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.EXTEND || type === characterIndices.FORMAT || prevType === characterIndices.EXTEND || prevType === characterIndices.FORMAT || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) {\n return false;\n }\n if (type === characterIndices.CR && nextType === characterIndices.LF) {\n return false;\n }\n if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n return true;\n }\n if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n return true;\n }\n if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n return false;\n }\n if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n return false;\n }\n if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n return false;\n }\n if (type === characterIndices.AT) {\n return false;\n }\n return true;\n };\n\n var EMPTY_STRING$1 = EMPTY_STRING;\n var WHITESPACE$1 = WHITESPACE;\n var PUNCTUATION$1 = PUNCTUATION;\n var isProtocol = function (str) {\n return str === 'http' || str === 'https';\n };\n var findWordEnd = function (characters, startIndex) {\n var i;\n for (i = startIndex; i < characters.length; i++) {\n if (WHITESPACE$1.test(characters[i])) {\n break;\n }\n }\n return i;\n };\n var findUrlEnd = function (characters, startIndex) {\n var endIndex = findWordEnd(characters, startIndex + 1);\n var peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING$1);\n return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n };\n var findWords = function (chars, sChars, characterMap, options) {\n var words = [];\n var word = [];\n for (var i = 0; i < characterMap.length; ++i) {\n word.push(chars[i]);\n if (isWordBoundary(characterMap, i)) {\n var ch = sChars[i];\n if ((options.includeWhitespace || !WHITESPACE$1.test(ch)) && (options.includePunctuation || !PUNCTUATION$1.test(ch))) {\n var startOfWord = i - word.length + 1;\n var endOfWord = i + 1;\n var str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING$1);\n if (isProtocol(str)) {\n var endOfUrl = findUrlEnd(sChars, i);\n var url = chars.slice(endOfWord, endOfUrl);\n Array.prototype.push.apply(word, url);\n i = endOfUrl;\n }\n words.push(word);\n }\n word = [];\n }\n }\n return words;\n };\n var getDefaultOptions = function () {\n return {\n includeWhitespace: false,\n includePunctuation: false\n };\n };\n var getWords = function (chars, extract, options) {\n options = __assign(__assign({}, getDefaultOptions()), options);\n var filteredChars = [];\n var extractedChars = [];\n for (var i = 0; i < chars.length; i++) {\n var ch = extract(chars[i]);\n if (ch !== zeroWidth) {\n filteredChars.push(chars[i]);\n extractedChars.push(ch);\n }\n }\n var characterMap = classify(extractedChars);\n return findWords(filteredChars, extractedChars, characterMap, options);\n };\n\n var getWords$1 = getWords;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var isNewline = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName];\n };\n var textBlocks = [];\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += removeZwsp(node.data);\n } else if (isNewline(node) && txt.length) {\n textBlocks.push(txt);\n txt = '';\n }\n }\n if (txt.length) {\n textBlocks.push(txt);\n }\n return textBlocks;\n };\n\n var strLen = function (str) {\n return str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n };\n var countWords = function (node, schema) {\n var text = getText(node, schema).join('\\n');\n return getWords$1(text.split(''), identity).length;\n };\n var countCharacters = function (node, schema) {\n var text = getText(node, schema).join('');\n return strLen(text);\n };\n var countCharactersWithoutSpaces = function (node, schema) {\n var text = getText(node, schema).join('').replace(/\\s/g, '');\n return strLen(text);\n };\n\n var createBodyCounter = function (editor, count) {\n return function () {\n return count(editor.getBody(), editor.schema);\n };\n };\n var createSelectionCounter = function (editor, count) {\n return function () {\n return count(editor.selection.getRng().cloneContents(), editor.schema);\n };\n };\n var createBodyWordCounter = function (editor) {\n return createBodyCounter(editor, countWords);\n };\n var get = function (editor) {\n return {\n body: {\n getWordCount: createBodyWordCounter(editor),\n getCharacterCount: createBodyCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n },\n selection: {\n getWordCount: createSelectionCounter(editor, countWords),\n getCharacterCount: createSelectionCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n },\n getCount: createBodyWordCounter(editor)\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireWordCountUpdate = function (editor, api) {\n editor.fire('wordCountUpdate', {\n wordCount: {\n words: api.body.getWordCount(),\n characters: api.body.getCharacterCount(),\n charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n }\n });\n };\n\n var updateCount = function (editor, api) {\n fireWordCountUpdate(editor, api);\n };\n var setup = function (editor, api, delay) {\n var debouncedUpdate = global$2.debounce(function () {\n return updateCount(editor, api);\n }, delay);\n editor.on('init', function () {\n updateCount(editor, api);\n global$2.setEditorTimeout(editor, function () {\n editor.on('SetContent BeforeAddUndo Undo Redo keyup', debouncedUpdate);\n }, 0);\n });\n };\n\n var open = function (editor, api) {\n editor.windowManager.open({\n title: 'Word Count',\n body: {\n type: 'panel',\n items: [{\n type: 'table',\n header: [\n 'Count',\n 'Document',\n 'Selection'\n ],\n cells: [\n [\n 'Words',\n String(api.body.getWordCount()),\n String(api.selection.getWordCount())\n ],\n [\n 'Characters (no spaces)',\n String(api.body.getCharacterCountWithoutSpaces()),\n String(api.selection.getCharacterCountWithoutSpaces())\n ],\n [\n 'Characters',\n String(api.body.getCharacterCount()),\n String(api.selection.getCharacterCount())\n ]\n ]\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }]\n });\n };\n\n var register = function (editor, api) {\n editor.ui.registry.addButton('wordcount', {\n tooltip: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n editor.ui.registry.addMenuItem('wordcount', {\n text: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n };\n\n function Plugin (delay) {\n if (delay === void 0) {\n delay = 300;\n }\n global.add('wordcount', function (editor) {\n var api = get(editor);\n register(editor, api);\n setup(editor, api, delay);\n return api;\n });\n }\n\n Plugin();\n\n}());\n","module.exports = {\n indexOf: function(arr, item) {\n var i, j;\n if (Array.prototype.indexOf) {\n return arr.indexOf(item);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n },\n forEach: function(arr, fn, scope) {\n var i, j;\n if (Array.prototype.forEach) {\n return arr.forEach(fn, scope);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n fn.call(scope, arr[i], i, arr);\n }\n },\n trim: function(str) {\n if (String.prototype.trim) {\n return str.trim();\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n },\n spaceIndex: function(str) {\n var reg = /\\s|\\n|\\t/;\n var match = reg.exec(str);\n return match ? match.index : -1;\n }\n};\n","// Exports the \"default\" icons for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/icons/default')\n// ES2015:\n// import 'tinymce/icons/default'\nrequire('./icons.js');","// Exports the \"nonbreaking\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/nonbreaking')\n// ES2015:\n// import 'tinymce/plugins/nonbreaking'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n\n var open = function (editor) {\n var editorContent = getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\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: { code: editorContent },\n onSubmit: function (api) {\n setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n open(editor);\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction: function () {\n return open(editor);\n }\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction: function () {\n return open(editor);\n }\n });\n };\n\n function Plugin () {\n global.add('code', function (editor) {\n register(editor);\n register$1(editor);\n return {};\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.7.0 (2021-02-10)\n */\n(function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (fullscreenState) {\n return {\n isFullscreen: function () {\n return fullscreenState.get() !== null;\n }\n };\n };\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var revocable = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n set: set\n };\n };\n var unbindable = function () {\n return revocable(function (s) {\n return s.unbind();\n });\n };\n var value = function () {\n var subject = Cell(Optional.none());\n var clear = function () {\n return subject.set(Optional.none());\n };\n var set = function (s) {\n return subject.set(Optional.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var on = function (f) {\n return subject.get().each(f);\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var get$1 = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$1(xs, 0);\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var is = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var 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 var siblings = function (element) {\n var filterSelf = function (elements) {\n return filter(elements, function (x) {\n return !eq(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var getBody = function (doc) {\n var 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 var rawSet = function (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 var set = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var get$2 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var remove = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var internalSet = function (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 var setAll = function (element, css) {\n var dom = element.dom;\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$3 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = always;\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var get$4 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n\n var get$5 = function (_win) {\n var win = _win === undefined ? window : _win;\n return Optional.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$4(SugarElement.fromDom(doc));\n return get$5(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n });\n };\n var bind$3 = function (name, callback, _win) {\n return get$5(_win).map(function (visualViewport) {\n var handler = function (e) {\n return callback(fromRawEvent(e));\n };\n visualViewport.addEventListener(name, handler);\n return {\n unbind: function () {\n return visualViewport.removeEventListener(name, handler);\n }\n };\n }).getOrThunk(function () {\n return { unbind: noop };\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireFullscreenStateChanged = function (editor, state) {\n editor.fire('FullscreenStateChanged', { state: state });\n };\n\n var getFullscreenNative = function (editor) {\n return editor.getParam('fullscreen_native', false, 'boolean');\n };\n\n var getFullscreenRoot = function (editor) {\n var elem = SugarElement.fromDom(editor.getElement());\n return getShadowRoot(elem).map(getShadowHost).getOrThunk(function () {\n return getBody(owner(elem));\n });\n };\n var getFullscreenElement = function (root) {\n if (root.fullscreenElement !== undefined) {\n return root.fullscreenElement;\n } else if (root.msFullscreenElement !== undefined) {\n return root.msFullscreenElement;\n } else if (root.webkitFullscreenElement !== undefined) {\n return root.webkitFullscreenElement;\n } else {\n return null;\n }\n };\n var getFullscreenchangeEventName = function () {\n if (document.fullscreenElement !== undefined) {\n return 'fullscreenchange';\n } else if (document.msFullscreenElement !== undefined) {\n return 'MSFullscreenChange';\n } else if (document.webkitFullscreenElement !== undefined) {\n return 'webkitfullscreenchange';\n } else {\n return 'fullscreenchange';\n }\n };\n var requestFullscreen = function (sugarElem) {\n var elem = sugarElem.dom;\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.webkitRequestFullScreen) {\n elem.webkitRequestFullScreen();\n }\n };\n var exitFullscreen = function (sugarDoc) {\n var doc = sugarDoc.dom;\n if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else if (doc.webkitCancelFullScreen) {\n doc.webkitCancelFullScreen();\n }\n };\n var isFullscreenElement = function (elem) {\n return elem.dom === getFullscreenElement(owner(elem).dom);\n };\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var siblings$1 = function (scope, predicate) {\n return filter(siblings(scope), predicate);\n };\n\n var all$1 = function (selector) {\n return all(selector);\n };\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var siblings$2 = function (scope, selector) {\n return siblings$1(scope, function (e) {\n return is(e, selector);\n });\n };\n\n var attr = 'data-ephox-mobile-fullscreen-style';\n var siblingStyles = 'display:none!important;';\n var ancestorPosition = 'position:absolute!important;';\n var ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';\n var bgFallback = 'background-color:rgb(255,255,255)!important;';\n var isAndroid = global$2.os.isAndroid();\n var matchColor = function (editorBody) {\n var color = get$3(editorBody, 'background-color');\n return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;\n };\n var clobberStyles = function (dom, container, editorBody) {\n var gatherSiblings = function (element) {\n return siblings$2(element, '*:not(.tox-silver-sink)');\n };\n var clobber = function (clobberStyle) {\n return function (element) {\n var styles = get$2(element, 'style');\n var backup = styles === undefined ? 'no-styles' : styles.trim();\n if (backup === clobberStyle) {\n return;\n } else {\n set(element, attr, backup);\n setAll(element, dom.parseStyle(clobberStyle));\n }\n };\n };\n var ancestors = ancestors$1(container, '*');\n var siblings = bind(ancestors, gatherSiblings);\n var bgColor = matchColor(editorBody);\n each(siblings, clobber(siblingStyles));\n each(ancestors, clobber(ancestorPosition + ancestorStyles + bgColor));\n var containerStyles = isAndroid === true ? '' : ancestorPosition;\n clobber(containerStyles + ancestorStyles + bgColor)(container);\n };\n var restoreStyles = function (dom) {\n var clobberedEls = all$1('[' + attr + ']');\n each(clobberedEls, function (element) {\n var restore = get$2(element, attr);\n if (restore !== 'no-styles') {\n setAll(element, dom.parseStyle(restore));\n } else {\n remove(element, 'style');\n }\n remove(element, attr);\n });\n };\n\n var DOM = global$1.DOM;\n var getScrollPos = function () {\n var vp = getBounds(window);\n return {\n x: vp.x,\n y: vp.y\n };\n };\n var setScrollPos = function (pos) {\n window.scrollTo(pos.x, pos.y);\n };\n var viewportUpdate = get$5().fold(function () {\n return {\n bind: noop,\n unbind: noop\n };\n }, function (visualViewport) {\n var editorContainer = value();\n var resizeBinder = unbindable();\n var scrollBinder = unbindable();\n var refreshScroll = function () {\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n };\n var refreshVisualViewport = function () {\n window.requestAnimationFrame(function () {\n editorContainer.on(function (container) {\n return setAll(container, {\n top: visualViewport.offsetTop + 'px',\n left: visualViewport.offsetLeft + 'px',\n height: visualViewport.height + 'px',\n width: visualViewport.width + 'px'\n });\n });\n });\n };\n var update = global$3.throttle(function () {\n refreshScroll();\n refreshVisualViewport();\n }, 50);\n var bind = function (element) {\n editorContainer.set(element);\n update();\n resizeBinder.set(bind$3('resize', update));\n scrollBinder.set(bind$3('scroll', update));\n };\n var unbind = function () {\n editorContainer.on(function () {\n resizeBinder.clear();\n scrollBinder.clear();\n });\n editorContainer.clear();\n };\n return {\n bind: bind,\n unbind: unbind\n };\n });\n var toggleFullscreen = function (editor, fullscreenState) {\n var body = document.body;\n var documentElement = document.documentElement;\n var editorContainer = editor.getContainer();\n var editorContainerS = SugarElement.fromDom(editorContainer);\n var fullscreenRoot = getFullscreenRoot(editor);\n var fullscreenInfo = fullscreenState.get();\n var editorBody = SugarElement.fromDom(editor.getBody());\n var isTouch = global$2.deviceType.isTouch();\n var editorContainerStyle = editorContainer.style;\n var iframe = editor.iframeElement;\n var iframeStyle = iframe.style;\n var handleClasses = function (handler) {\n handler(body, 'tox-fullscreen');\n handler(documentElement, 'tox-fullscreen');\n handler(editorContainer, 'tox-fullscreen');\n getShadowRoot(editorContainerS).map(function (root) {\n return getShadowHost(root).dom;\n }).each(function (host) {\n handler(host, 'tox-fullscreen');\n handler(host, 'tox-shadowhost');\n });\n };\n var cleanup = function () {\n if (isTouch) {\n restoreStyles(editor.dom);\n }\n handleClasses(DOM.removeClass);\n viewportUpdate.unbind();\n Optional.from(fullscreenState.get()).each(function (info) {\n return info.fullscreenChangeHandler.unbind();\n });\n };\n if (!fullscreenInfo) {\n var fullscreenChangeHandler = bind$2(owner(fullscreenRoot), getFullscreenchangeEventName(), function (_evt) {\n if (getFullscreenNative(editor)) {\n if (!isFullscreenElement(fullscreenRoot) && fullscreenState.get() !== null) {\n toggleFullscreen(editor, fullscreenState);\n }\n }\n });\n var newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n containerTop: editorContainerStyle.top,\n containerLeft: editorContainerStyle.left,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height,\n fullscreenChangeHandler: fullscreenChangeHandler\n };\n if (isTouch) {\n clobberStyles(editor.dom, editorContainerS, editorBody);\n }\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n handleClasses(DOM.addClass);\n viewportUpdate.bind(editorContainerS);\n editor.on('remove', cleanup);\n fullscreenState.set(newFullScreenInfo);\n if (getFullscreenNative(editor)) {\n requestFullscreen(fullscreenRoot);\n }\n fireFullscreenStateChanged(editor, true);\n } else {\n fullscreenInfo.fullscreenChangeHandler.unbind();\n if (getFullscreenNative(editor) && isFullscreenElement(fullscreenRoot)) {\n exitFullscreen(owner(fullscreenRoot));\n }\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n editorContainerStyle.top = fullscreenInfo.containerTop;\n editorContainerStyle.left = fullscreenInfo.containerLeft;\n setScrollPos(fullscreenInfo.scrollPos);\n fullscreenState.set(null);\n fireFullscreenStateChanged(editor, false);\n cleanup();\n editor.off('remove', cleanup);\n }\n };\n\n var register = function (editor, fullscreenState) {\n editor.addCommand('mceFullScreen', function () {\n toggleFullscreen(editor, fullscreenState);\n });\n };\n\n var makeSetupHandler = function (editor, fullscreenState) {\n return function (api) {\n api.setActive(fullscreenState.get() !== null);\n var editorEventCallback = function (e) {\n return api.setActive(e.state);\n };\n editor.on('FullscreenStateChanged', editorEventCallback);\n return function () {\n return editor.off('FullscreenStateChanged', editorEventCallback);\n };\n };\n };\n var register$1 = function (editor, fullscreenState) {\n editor.ui.registry.addToggleMenuItem('fullscreen', {\n text: 'Fullscreen',\n icon: 'fullscreen',\n shortcut: 'Meta+Shift+F',\n onAction: function () {\n return editor.execCommand('mceFullScreen');\n },\n onSetup: makeSetupHandler(editor, fullscreenState)\n });\n editor.ui.registry.addToggleButton('fullscreen', {\n tooltip: 'Fullscreen',\n icon: 'fullscreen',\n onAction: function () {\n return editor.execCommand('mceFullScreen');\n },\n onSetup: makeSetupHandler(editor, fullscreenState)\n });\n };\n\n function Plugin () {\n global.add('fullscreen', function (editor) {\n var fullscreenState = Cell(null);\n if (editor.inline) {\n return get(fullscreenState);\n }\n register(editor, fullscreenState);\n register$1(editor, fullscreenState);\n editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');\n return get(fullscreenState);\n });\n }\n\n Plugin();\n\n}());\n","tinymce.IconManager.add('default', {\n icons: {\n 'accessibility-check': '',\n 'action-next': '',\n 'action-prev': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut-column': '',\n 'cut-row': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate-column': '',\n 'duplicate-row': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'export': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'line-height': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-column-after': '',\n 'paste-column-before': '',\n 'paste-row-after': '',\n 'paste-row-before': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'settings': '',\n 'sharpen': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'toc': '',\n 'translate': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'user': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': '',\n }\n});","/* global tinymce:true */\r\n/* global $:true */\r\n/* eslint-disable */\r\n(function ()\r\n{\r\n var pluginManager = tinymce.util.Tools.resolve('tinymce.PluginManager');\r\n\r\n pluginManager.add('floatingtoolbar', function(editor)\r\n {\r\n function move(editor, scroll, focus)\r\n {\r\n var container = $(editor.editorContainer);\r\n var toolbar = container.find('.tox-editor-header');\r\n var containerRect = container.get(0).getBoundingClientRect();\r\n var toolbarRect = toolbar.get(0).getBoundingClientRect();\r\n var scrollRect = scroll.get(0).getBoundingClientRect();\r\n\r\n var minWidth = editor.settings.floatingtoolbar_minwidth || 0;\r\n var minHeight = editor.settings.floatingtoolbar_minheight || 0;\r\n var top = $(window).width() > minWidth && $(window).height() > minHeight ? editor.settings.floatingtoolbar_top == 'auto' ? scrollRect.top : editor.settings.floatingtoolbar_top : 0;\r\n var bottom = $(window).width() > minWidth && $(window).height() > minHeight ? editor.settings.floatingtoolbar_bottom : 0;\r\n\r\n if (focus && (containerRect.top < top) && (containerRect.top + containerRect.height - top - toolbarRect.height - bottom > 0))\r\n {\r\n container.css({\r\n 'padding-top': toolbarRect.height\r\n });\r\n toolbar.css({\r\n 'position': 'fixed',\r\n 'z-index': 1020,\r\n 'box-shadow': '#666666 0px 0px 2px',\r\n 'width': containerRect.width - 2,\r\n 'top': `${top}px`\r\n });\r\n }\r\n else\r\n {\r\n container.css({\r\n 'padding-top': '0px'\r\n });\r\n toolbar.css({\r\n 'position': 'static',\r\n 'box-shadow': 'none',\r\n 'width': 'auto',\r\n 'top': '0px'\r\n });\r\n }\r\n }\r\n\r\n editor.on('init',function()\r\n {\r\n editor.settings.floatingtoolbar_top = editor.settings.floatingtoolbar_top || 'auto';\r\n editor.settings.floatingtoolbar_bottom = editor.settings.floatingtoolbar_bottom || 300;\r\n editor.settings.floatingtoolbar_selectors = editor.settings.floatingtoolbar_selectors || [window];\r\n });\r\n\r\n editor.on('focus',function()\r\n {\r\n $.each(editor.settings.floatingtoolbar_selectors, function(i, selector)\r\n {\r\n var scroll = $(selector);\r\n\r\n scroll.on('scroll.editor resize.editor', function()\r\n {\r\n move(editor, scroll, true);\r\n });\r\n\r\n move(editor, scroll, true);\r\n });\r\n });\r\n\r\n editor.on('blur',function()\r\n {\r\n $.each(editor.settings.floatingtoolbar_selectors, function(i, selector)\r\n {\r\n var scroll = $(selector);\r\n\r\n scroll.off('scroll.editor resize.editor');\r\n\r\n move(editor, scroll, false);\r\n });\r\n });\r\n });\r\n})();\r\n","// Exports the \"autosave\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autosave')\n// ES2015:\n// import 'tinymce/plugins/autosave'\nrequire('./plugin.js');"],"sourceRoot":""}