{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/TinyMCE.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/tinymce/plugins/importcss/plugin.js","webpack:///./node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/tinymce/plugins/preview/plugin.js","webpack:///./node_modules/tinymce/plugins/print/index.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./src/components/Editor.vue?5ae4","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/Utils.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/ScriptLoader.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/components/EditorPropTypes.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/components/Editor.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/index.js","webpack:///src/components/Editor.vue","webpack:///./src/components/Editor.vue?d346","webpack:///./src/components/Editor.vue","webpack:///./node_modules/tinymce/plugins/print/plugin.js","webpack:///./node_modules/tinymce/plugins/directionality/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/icons/default/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/plugin.js","webpack:///./node_modules/tinymce/plugins/importcss/index.js","webpack:///./node_modules/tinymce/icons/default/icons.js","webpack:///./node_modules/tinymce/plugins/autosave/index.js"],"names":["typeOf","x","t","Array","prototype","isPrototypeOf","constructor","name","String","isType","type","value","isSimpleType","eq","a","isString","isObject","isArray","isBoolean","isUndefined","undefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","i","len","length","noop","noarg","f","compose","fa","fb","args","_i","arguments","apply","compose1","fbc","fab","constant","identity","curry","fn","initialArgs","restArgs","all","concat","not","die","msg","Error","never","always","global$1","tinymce","util","Tools","resolve","__assign","Object","assign","s","n","p","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","k","j","jl","SimpleResultType","none","NONE","o","isNone","thunk","id","me","fold","_s","is","isSome","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","or","orThunk","map","each","bind","exists","forall","filter","equals","equals_","toArray","toString","some","constant_a","self","v","elementEq","b","from","Optional","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","fixedToolbarContainerTarget","isToolbarPersist","fixedContainerTarget","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","toUpperCase","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","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","setIconFill","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","_splitButtonApi","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","isValid","onSubmit","colorpicker","windowManager","alert","details","initialData","buttons","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","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","hsvColour","fromRgb","minRGB","maxRGB","hexToHsv","hsvToHex","fieldsUpdate","sliderUpdate","paletteUpdate","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","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","rgb","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","grdWhite","createLinearGradient","addColorStop","grdBlack","setPaletteHue","setPaletteThumb","_detail","_slider","saturationBrightnessPaletteSketcher","setHue","_apis","setThumb","makeFactory","rgbForm","onInvalidHex","sbPalette","hueSliderToDegrees","hueDegreesToSlider","paletteRgba","paletteHue","memSlider","memPalette","memRgb","updatePalette","_hex","palette","updateFields","updateSlider","updatePaletteThumb","updateState","runUpdates","updates","onPaletteUpdate","oldHue","newHsv","newHex","onSliderUpdate","oldRgb","oldHsv","onFieldsUpdate","colourPickerSketcher","self$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","ceilWithPrecision","precision","mul","upper","rotate","angle","applyRotate","degrees","rad","PI","sin","cos","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","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","setIconStroke","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","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","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","commonMenuItem","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","isHidden$1","renderElementPath","getDataPath","newPathElements","_btn","divider","newAcc","updatePath","parents","newPath","parent_1","isDefaultPrevented","isPropagationStopped","getDimensions","resizeType","originalHeight","originalWidth","Both","resize$3","dim","getResizeType","None","Vertical","keyboardHandler","renderResizeHandler","_target","renderWordCount","replaceCountText","words","characters","currentVal","wordCount","renderStatusbar","renderBranding","linkHtml","getTextComponents","getComponents","resizeHandler","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","submit","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","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","getGlobal","getTinymce","groupBy","wasType","isNotEmpty","isEmpty","lastChild","shallowAs","mutate","matchNodeName","matchNodeNames","regex","isTextNode","isListNode","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","isEmpty$1","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","grep","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","parser","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","nodeChangeHandler","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","updateList$1","setStyles","setAttrib","parseAlphabeticBase26","chars","charValue","composeAlphabeticBase26","quotient","fromCharCode","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","listStyleType","parseDetail","currentList","getAttrib","queryListCommandState","registerDialog","setupTabKey","metaKeyPressed","listProperties","addContextMenu","Plugin","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","rangeEqualsDelimiterOrSpace","rangeString","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","rngText","autoLinkPattern","defaultLinkTarget","autoUrlDetectState","shouldMergeClasses","shouldImportExclusive","getSelectorConverter","getSelectorFilter","getCssGroups","shouldAppend","getFileFilter","getSkin","ungroupedOrder","groupOrder","addItemToGroup","groupTitle","addItem","toFormats","removeCacheSuffix","cacheSuffix","isSkinContentCss","skinUrlBase","contentSkinUrlPart","compileFilter","isCssImportRule","styleSheet","isCssPageRule","selectorText","getSelectors","fileFilter","contentCSSUrls","imported","imports","cssRules","cssRule","styleSheets","defaultConvertSelectorToFormat","elementName","inlineSelectorElements","class","getGroupsBySelector","compileUserDefinedGroups","isExclusiveMode","isUniqueSelector","globallyUniqueSelectors","markUniqueSelector","convertSelectorToFormat","plugin","selectorConverter","selector_converter","selectorFilter","processSelector","plugins","importcss","uniqueId","selectorGroups","customTabs","addTab","currentCustomTabs","dialogOpener","getHelpTabs","getForcedPlugins","tab$1","shortcutList","shortcutText","tablePanel","premiumType","openSourceType","urls","slug","tab$2","availablePlugins","premiumPlugins","premiumPluginList","makeLink","maybeUrlize","getMetadata","getPluginKeys","forced_plugins","pluginLister","pluginKeys","pluginLis","pluginsString","installedPlugins","htmlPanel","tab$3","getVersion","majorVersion","minorVersion","changeLogLink","parseHelpTabsSetting","tabsFromSettings","newTabs","getNamesFromTabs","parseCustomTabs","nav","foundTabs","dialogTabs","getContentStyle","shouldUseContentCssCors","getBodyClassByHash","bodyClass","getBodyClass","getBodyIdByHash","bodyId","getBodyId","getPreviewHtml","headHtml","contentStyle","getURI","cors","isMetaKeyPressed","preventClicksOnLinksScript","directionality","dirAttr","previewHtml","dataApi","applyListFormat","styleValue","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","styleValueToText","isWithinList","tableCellIndex","iconStyle","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","isDirty","no_events","restoreDraft","startStoreDraft","interval","setEditorInterval","restoreLastDraft","editorManager","autosave","returnValue","makeSetupHandler","editorEventCallback","startsWith","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","inSelection","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","clean","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","paste","fromDom$1","nodes","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","clipboard","generators","pasteRows","extractSelected","serializeElements","serializer","serialize","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","startIndex","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","defaultValue","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","replacement","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","addVisual","insertTableWithDataValidation","errorMsg","checkInput","headerRows","headerColumns","getClipboardElements","getClipboard","setClipboardElements","setClipboard","elmsOpt","insertTable","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","matchNode","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","serializeStyle","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","Clipboard","clearClipboard","clearRows","clearColumns","cellFormats","tablecellbackgroundcolor","backgroundColor","remove_similar","tablecellbordercolor","borderColor","tablecellborderstyle","borderStyle","tablecellborderwidth","none$2","CellLocation","detect$5","selectNodeContents","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","forward","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","guess","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","DESCRIPTORS","isForced","redefine","classof","inheritIfRequired","toPrimitive","fails","getOwnPropertyNames","getOwnPropertyDescriptor","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","argument","third","radix","maxCode","digits","it","NumberWrapper","dummy","isNull","assumeExternalTargets","externalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","allowUnsafeLinkTarget","useQuickLink","sanitizeList","extractValue","sanitizeWith","extracter","sanitize","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","createLink","linkImageFigure","createHTML","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","convertURL","linkList","send","optItems","noneItem","LinkListOptions","getRels","isTargetBlank_1","enforceSafe","safeRelExtractor","sanitizer","RelOptions","fallbacks","getTargets","TargetOptions","nonEmptyAttr","extractFromAnchor","onlyText","linkClass","collect","linkNode","links","optNode","flags","titleEnabled","DialogInfo","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","appendClickRemove","createEvent","initMouseEvent","getLink","getSelectedLink","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","scrollIntoView","openDialog","gotoSelectedLink","setupGotoLinks","toggler","toggleActiveState","toggleEnabledState","toggleUnlinkState","hasLinks$1","addShortcut","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","addContextForm","hasDimensions","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","hasUploadUrl","hasUploadHandler","showAccessibilityOptions","isAutomaticUploadsEnabled","parseIntAndGetMax","val1","val2","getImageSize","onload","onerror","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","imgElm","selectImage","isPlaceholderImage","getHspace","marginLeft","marginRight","getVspace","marginTop","marginBottom","hasCaption","updateAttrib","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","attrValue","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","isImage","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","updateAlt","normalized","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","getDialogContainerType","useColumns","makeTab$1","MainTab","makeTab$2","UploadTab","prevImage","prevAlt","fromImageData","images","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","blobUri","finalize","updateSrcAndSwitchTab","dataUrl","blobInfo","createBlobCache","uploadImage","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","submitHandler","editorUpload","uploadImagesAuto","blobCache","filename","normalizeCss$1","stylesArg","upload","Dialog","hasImageClass","toggleContentEditableState","toggleContentEditable","addNodeFilter","selectorChangedWithUnbind","_vm","_h","$createElement","_self","staticRenderFns","validEvents","isValidKey","bindHandlers","initEvent","forEach","bindModelHandlers","currentContent","modelEvents","$props","normalizedEvents","$watch","prevVal","$emit","initEditor","$listeners","uuid","now","isTextarea","normalizePluginArray","mergePlugins","initPlugins","inputPlugins","injectScriptTag","scriptTag","scriptLoaded","editorProps","apiKey","cloudChannel","Boolean","scriptState","renderInline","renderIframe","initialise","finalInit","elementId","inlineEditor","Editor","created","watch","mounted","$el","beforeDestroy","TinyMceEditor","language_url","language","skin_url","branding","paste_data_images","file_picker_types","file_picker_callback","methods","print","setDir","curDir","blocks","getNodeChangeHandler","isEquatableType","compareFn","contramap","eqa","tripleEq","eqString","eqArray","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","typeOf$1","bifilter","equal","isArray$1","indexOf$1","reduce","iteratee","accumulator","removeFromStart","numChars","removeLeading","lTrim","rTrim","platform$1","webkit","fileApi","windowsPhone","Env","gecko","iOS","transparentSrc","caretAfter","documentMode","ceFalse","experimentalShadowDom","canHaveCSP","desktop","whiteSpaceRegExp","delim","sp","scn","de","cn","createNS","onCreate","exts","ext","walk","_addCacheSuffix","hasOwn","toArray$1","recurse","filterSelf","prevSiblings","nextSiblings","childNodesCount","getHead","getStyleContainer","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","getPrototypeOf","lowercasedNames","matchStyleValues","cssValue","computed","attrName","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","debounce","Delay","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","_setReferrerPolicy","referrerPolicy","addStyle","removeStyle","styleContainer","getOrCreateState","passed","failed","urlWithSuffix","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","ownerNode","linkElem","contentCssCors","loadF","loadAll","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","textNode","endsWithCaretContainer","splitText","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","getElementsByTagName","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","isNamedAnchor","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","entity","namedEntities","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","decode","Entities","mapCache","dummyObj","makeMap$2","each$3","extend$1","explode$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","attributesOrder","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","patternElements","customElementsMap","specialElements","createLookupTable","extendWith","schemaItems","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","validElements","ei","ai","al","attrData","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","valid_children","extended_valid_elements","dd","dt","th","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getShortEndedElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","getWhiteSpaceElements","getSpecialElements","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","str2","allow_script_urls","allow_svg_data_urls","lastIndex","serializeStyles","styleList","i_1","styleMap","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","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","hasClass","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","attrHooks","cssHooks","DomQueryConstructor","inArray$1","whiteSpaceRegExp$2","trim$3","each$4","hook","removeAttr","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","$elm","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","getContentEditableParent","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","pluginUrl","loadDependencies","addOnUrl","deps","newUrl","urlString","PluginManager","ThemeManager","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","_registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","identifyParserNode","spans","persistent","TextWalker","TextSeeker","isBlockBoundary","newOffset","forwards","clone$2","isEqual","rect1","rect2","isValidOverflow","overflowY","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","getContentSecurityPolicy","shouldPutBrInPre","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","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","getFormats","getPreviewStyles","canFormatEmptyLines","getCustomUiSelector","getThemeUrl","isInline$1","hasHiddenInput","shouldPatchSubmit","isEncodingXml","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","hasForcedRootBlock","getCustomUndoRedoLevels","shouldDisableNodeChange","hasContentCssCors","getPlugins","getExternalPlugins","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","isElement$4","isText$6","removeNode","trimCount","trimmedText","deleteZwspChars","deleteData","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","rootBlock","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","getParentBlock","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","innerNode","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","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","hasBlockChildren","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","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","PAGE_UP","PAGE_DOWN","END","HOME","modifierPressed","isContentEditableFalse$6","ControlSelection","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","elementSelectionAttr","editableDoc","rootDocument","resizeHandles","nw","ne","sw","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTargets","firstElementChild","createGhostElement","setSizeProp","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","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","getCaretRangeFromPoint","documentFocusInHandler","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","createMarker","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","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","getEndpointElement","real","getStart$2","skipEmptyTextNodes","getNode$1","commonAncestorContainer","endElm","select$1","processRanges","typeLookup","walk$2","isEmptyTextNode$1","AstNode","selfAttrs","cloneAttrs","selfAttr","shortEnded","refNode","extractBase64DataUris","dataImageUri","uris","imageId","restoreDataUris","parseDataUri","decodeURIComponent","safeSvgDataUrlElements","isValidPrefixAttrName","blockSvgDataUris","allowSvgDataUrls","allowed","isInvalidUri","allow_html_data_urls","findEndTagIndex","shortEndedElements","tokenRegExp","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","regExp","attrString","SaxParser","fix_self_closing","comment","cdata","pi","doctype","parseInternal","base64Extract","endRegExp","attrList","textData","isInternalElement","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","anyAttributesRequired","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processText","processComment","allow_conditional_comments","processAttr","processMalformedComment","startTag","parseAttribute","val3","attrRule","trimRegExp","fillAttrsMap","unescape","attrRegExp","selfClosing","self_closing_elements","removeInternalElements","remove_internals","fixSelfClosing","processHtml","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","trimHtml","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","bogusAllRegExp","getTempAttrs","trimExternal","trimEmptyContents","emptyRegExp","getContentFromBody","getInner","getContentInternal","each$7","ElementUtils","attribs","compareObjects","obj1","obj2","makeMap$3","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","HtmlSerializer","writer","8","7","10","11","sortedAttrs","nonInheritableStyles","Set","nonInheritableStylesArr","shorthandStyleProps","getStyleProps","isNonInheritableStyle","hasInheritableStyles","getLonghandStyleProps","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","parentValue","nodeStyleProp","propExists","longhandProps","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","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","lastPos","normalizeNbsps","normalizeNbspsInEditor","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","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","deleteContents","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","styleConflict","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","nextRng","getContentEditableFalseParent","parentEditableFalseElm","findNextCaretRng","deleteSelectedContent","insertHtmlAtCaret","bookmarkHtml","caretElement","parserArgs","_selectionOverrides","showBlockCaretContainer","findMatchingNodes","nodeFilters","attributeFilters","attrMatches","name_2","filter$3","defaultFormat","isTreeNode","moveSelection","setEditorHtml","setContentString","forcedRootBlockName","padd","isRootContent","setContentTree","getNodeFilters","getAttributeFilters","setContentInternal","sibling$2","ancestor$3","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","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","postProcess","hasPreSibling","pre","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","forcedRootBlock","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","forced_root_block","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","isCollapsibleWhitespace","getInnerText","bin","shouldTrim","getContextNodeName","parentBlockOpt","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","lastLevel","bm","customUndoRedoLevels","setDirty","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","getRtcSetup","rtcPlugin","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","prevText","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","domParser","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","getByData","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","addAttributeFilter","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","currentNode","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","preProcess","oldDoc","impl","shouldFireEvent","hasEventListeners","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","save","is_removing","unbindAllNativeEvents","automatic","destroyed","_beforeUnload","theme","hasOwnProperty$2","deep$1","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","sectionSettings","hasSection","isSectionTheme","getSectionConfig","getDefaultSettings","documentBaseUrl","baseDefaults","toolbar_mode","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_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","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","defaultDeviceSettings","mobile","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","notificationManager","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","BlobCache","mimeToExt","mime","mimes","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","isValidDataUriImage","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize","lineheight","lineHeight","fontsize_class","blockquote","subscript","superscript","_fmt","_itemName","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","selectedNode","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","VDirection","walk$3","getBreakType","currentPos","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","walkerFn","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","moveToLineEndPoint","setCaretPosition","setSelected","renderCaretLocation","findLocation$1","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","_inline","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$1","linePoint","outsideLoc","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","isContentEditableFalse$9","moveToCeFalseHorizontally","moveToCeFalseVertically","exitPreBlock","getVisualCaretPosition$1","getHorizontalRange","getVerticalRange","moveH","newRange","moveV","moveToLineEndPoint$2","isCefPosition","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlockAttrs","moveV$1","defaultPatterns","matchesEvent","match$1","moveH$1","moveV$2","moveToLineEndPoint$3","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","isMatch","getAction$1","insert$3","handleEnterKeyEvent","executeKeydownOverride$2","setup$f","browser$4","setupIeInput","keypressThrotter","setup$g","isComposing","platform$2","executeKeyupAction","isPageUpDown","setNodeChangeBlocker","blocked","setup$h","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection$1","insertSpaceOrNbspAtSelection","executeKeydownOverride$3","setup$i","registerKeyboardOverrides","setup$j","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","currentPath","preventSummaryToggle","filterDetails","setup$k","isTextBlockNode","normalizeSelection$1","setup$l","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$m","renderFocusCaret","setup$n","isContentEditableTrue$4","isContentEditableFalse$b","getContentEditableRoot$1","SelectionOverrides","fakeCaret","realSelectionId","isFakeSelectionElement","isFakeSelectionTargetElement","isNearFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeElementSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","setElementSelection","fakeCaretInfo","normalizeShortEndedElementSelection","isPasteBin","isRangeInCaretContainer","clipboardData","realSelectionElement","clearData","outerText","isWithinCaretContainer","setupOffscreenSelection","targetClone","origTargetClone","$realSelectionContainer","selectElement","nodeElm","afterNode","Quirks","isGecko","isWebKit","mceInternalUrlPrefix","mceInternalDataType","setEditorCommandState","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","queryCommandSupported","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","Range","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","template","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","setupRtc","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","bindPendingEventDelegates","execCallback","getStyleSheetLoader","makeStylesheetLoadingPromises","framedFonts","loadContentCss","removeCss","preInit","browser_spellcheck","gecko_spellcheck","spellcheck","protect","startContent","contentCssText_1","content_style","initContentBody","skipWrite","orgVisibility","iframeHTML","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","loadingRtc","setProgressState","_rtcMode","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","getIframeHtml","createIframe","isDomainRelaxed","boxInfo","hidden","DOM$6","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","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","resetContent","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","setContentEditable","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","charCode","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","cmdFunc","normalizeCommandFunc","createShortcut","addAutocompleter","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","loadedCSS","isNotDirty","documentBaseURL","base_url","_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","releaseDate","i18n","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","invalidInlineTargets","isInvalidInlineTarget","createId","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","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","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","fullscreenState","isFullscreen","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","containerHeight","containerTop","containerLeft","_evt","newFullScreenInfo"],"mappings":"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AGpCkyE,GAAW52F,QAAQC,KAAKC,MAAMC,QAAQ,6BAEtC02F,GAAc,wBAClB,SAASC,GAAYr8D,QACP,IAARA,IACFA,EAAM,IAER,IAAIs8D,EAAgBH,GAASrb,QAAQsb,IACjCG,EAAe35F,EAAS05F,GAAiBhpF,KAAKkpF,MAAMF,GAAiB,GACrEG,EAAQ,SAAUxmE,GACpB,IAAIymE,EAAO18D,EAAM/J,EAAKvyB,OACtB,OAAOg5F,EAAO,EAAIzmE,EAAK5sB,MAAM,EAAG22B,GAAO/J,GAErC0mE,EAAQF,EAAMF,GACd9hE,EAAM,SAAU/rB,GAClBpI,EAAQq2F,EAAOjuF,GAAKvG,KAAKunB,GACzBitE,EAAMC,QAAQluF,GACViuF,EAAMj5F,OAASs8B,GACjB28D,EAAME,MAERV,GAASW,QAAQV,GAAa9oF,KAAKC,UAAUopF,KAE3CjtE,EAAS,SAAUqtE,GACrBJ,EAAMK,OAAOD,EAAK,IAEhB1oF,EAAQ,WACV,OAAOsoF,EAAMtzF,MAAM,IAErB,MAAO,CACLoxB,IAAKA,EACLpmB,MAAOA,GAIX,IA8vBI4oF,GA9vBAC,GAAa,aACbC,GAAgB,CAClB,CACE56F,KAAM26F,GACNtgF,KAAM,cACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,eACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,YACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,eACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,aACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,QACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,SACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,MACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,SACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,OACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,iBACNpa,MAAO,WAET,CACED,KAAM26F,GACNtgF,KAAM,SACNpa,MAAO,WAET,CACED,KAAM26F,GACNtg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F,GAAMygF,MAAK,SAAU5sD,GAC/C,OAAOmiG,GAASxC,GAAUrwH,QAAQ83F,GAASpnE,EAAMonE,EAAOq6B,iBAIxDsB,GAAoB,SAAU/iG,GAChC,OAAO6iG,GAAS7iG,IAGdgjG,GAAU,SAAU52H,EAAOqwC,EAAK7S,GAClC,IAAIq5F,EAA+B,kBAAV72H,EAAqBo9B,WAAWp9B,GAASA,EAMlE,OALI62H,EAAcr5F,EAChBq5F,EAAcr5F,EACLq5F,EAAcxmF,IACvBwmF,EAAcxmF,GAETwmF,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,IAEItsH,EAFA61F,EAAM,GACN02B,EAAM,IAAI33H,MAAM,IAEXwB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAIqD,EAAI,EAAGA,EAAI,EAAGA,IACrBo8F,EAAIp8F,GAAK6yH,EAAQ7yH,EAAQ,EAAJrD,GAEvB,IAASqD,EAAI,EAAGA,EAAI,EAAGA,IAAK,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AAM,oBAER,CACEsM,IAAK,eACLtM,KAAM,iBAER,CACEsM,IAAK,OACLtM,KAAM,QAER,CACEsM,IAAK,QACLtM,KAAM,SAER,CACEsM,IAAK,QACLtM,KAAM,SAER,CACEsM,IAAK,cACLtM,KAAM,eAER,CACEsM,IAAK,cACLtM,KAAM,eAER,CACEsM,IAAK,YACLtM,KAAM,cAER,CACEsM,IAAK,QACLtM,KAAM,SAER,CACEsM,IAAK,UACLtM,KAAM,WAER,CACEsM,IAAK,QACLtM,KAAM,SAER,CACEsM,IAAK,OACLtM,KAAM,QAER,CACEsM,IAAK,gBACLtM,KAAM,sBAER,CACEsM,IAAK,eACLtM,KAAM,iBAER,CACEsM,IAAK,WACLtM,KAAM,aAER,CACEsM,IAAK,QACLtM,KAAM,SAER,CACEsM,IAAK,WACLtM,KAAM,YAER,CACEsM,IAAK,YACLtM,KAAM,cAER,CACEsM,IAAK,cACLtM,KAAM,gBAER,CACEsM,IAAK,MACLtM,KAAM,qBAER,CACEsM,IAAK,eACLtM,KAAM,iBAER,CACEsM,IAAK,cACLtM,KAAM,qBAER,CACEsM,IAAK,YACLtM,KAAM,cAER,CACEsM,IAAK,UACLtM,KAAM,wBACNG,KAAMsgN,GAER,CACEn0M,IAAK,gBACLtM,KAAM,kBACNG,KAAMsgN,GAER,CACEn0M,IAAK,aACLtM,KAAM,cACNG,KAAMsgN,GAER,CACEn0M,IAAK,YACLtM,KAAM,cACNG,KAAMsgN,GAER,CACEn0M,IAAK,sBACLtM,KAAM,qBACNG,KAAMsgN,GAER,CACEn0M,IAAK,cACLtM,KAAM,yBACNG,KAAMsgN,GAER,CACEn0M,IAAK,cACLtM,KAAM,gBACNG,KAAMsgN,GAER,CACEn0M,IAAK,WACLtM,KAAM,YACNG,KAAMsgN,GAER,CACEn0M,IAAK,aACLtM,KAAM,wBACNG,KAAMsgN,GAER,CACEn0M,IAAK,YACLtM,KAAM,aACNG,KAAMsgN,GAER,CACEn0M,IAAK,aACLtM,KAAM,eACNG,KAAMsgN,GAER,CACEn0M,IAAK,eACLtM,KAAM,iBACNG,KAAMsgN,GAER,CACEn0M,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","file":"js/admin-manage-archive-list~admin-manage-article-list~admin-manage-article-save~page.74a9422c.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.8.1 (2021-05-20)\n */\n(function () {\n 'use strict';\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 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 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 fixedToolbarContainerTarget = function (editor) {\n return editor.getParam('fixed_toolbar_container_target');\n };\n var isToolbarPersist = function (editor) {\n return editor.getParam('toolbar_persist', false, 'boolean');\n };\n var fixedContainerTarget = function (editor) {\n if (!editor.inline) {\n return Optional.none();\n }\n var selector = fixedContainerSelector(editor);\n if (selector.length > 0) {\n return descendant$1(body(), selector);\n }\n var element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerTarget(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerTarget(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).toUpperCase();\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 id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(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 isValid = false;\n var onSubmit = function (api) {\n var data = api.getData();\n var hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n var onAction = function (_api, details) {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n var initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onAction: onAction,\n onSubmit: onSubmit,\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 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 setValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n var changeValue = function (slider, newValue) {\n setValue(slider, newValue);\n var thumb = getThumb(slider);\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 setValue: setValue,\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 setValue: function (apis, slider, value) {\n apis.setValue(slider, value);\n },\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 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 hexToHsv = function (hex) {\n return fromRgb(fromHex(hex));\n };\n var hsvToHex = function (hsv) {\n return fromRgba(fromHsv(hsv));\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 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 emitWith(form, fieldsUpdate, { hex: hex });\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 setPaletteHue = function (slider, hue) {\n var canvas = slider.components()[0].element.dom;\n var hsv = hsvColour(hue, 100, 100);\n var rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n var setPaletteThumb = function (slider, hex) {\n var hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\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 setHue: function (_apis, slider, hue) {\n setPaletteHue(slider, hue);\n },\n setThumb: function (_apis, slider, hex) {\n setPaletteThumb(slider, hex);\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 hueSliderToDegrees = function (hue) {\n return (100 - hue) / 100 * 360;\n };\n var hueDegreesToSlider = function (hue) {\n return 100 - hue / 360 * 100;\n };\n var state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n var memSlider = record(sliderFactory(translate, getClass));\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, _hex, hue) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setHue(palette, hue);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var updateSlider = function (anyInSystem, _hex, hue) {\n memSlider.getOpt(anyInSystem).each(function (slider) {\n Slider.setValue(slider, { y: hueDegreesToSlider(hue) });\n });\n };\n var updatePaletteThumb = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setThumb(palette, hex);\n });\n };\n var updateState = function (hex, hue) {\n var rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n var runUpdates = function (anyInSystem, hex, hue, updates) {\n updateState(hex, hue);\n each(updates, function (update) {\n update(anyInSystem, hex, hue);\n });\n };\n var onPaletteUpdate = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event.value;\n var oldHue = state.paletteHue.get();\n var newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n var onSliderUpdate = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var hue = hueSliderToDegrees(simulatedEvent.event.value.y);\n var oldRgb = state.paletteRgba.get();\n var oldHsv = fromRgb(oldRgb);\n var newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n var onFieldsUpdate = function () {\n var updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return function (form, simulatedEvent) {\n var hex = simulatedEvent.event.hex;\n var hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run(fieldsUpdate, onFieldsUpdate()),\n run(paletteUpdate, onPaletteUpdate()),\n run(sliderUpdate, onSliderUpdate())\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 ceilWithPrecision = function (num, precision) {\n if (precision === void 0) {\n precision = 2;\n }\n var mul = Math.pow(10, precision);\n var upper = Math.round(num * mul);\n return Math.ceil(upper / mul);\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 degrees = angle < 0 ? 360 + angle : angle;\n var rad = degrees * Math.PI / 180;\n var width = image.width;\n var height = image.height;\n var sin = Math.sin(rad);\n var cos = Math.cos(rad);\n var newWidth = ceilWithPrecision(Math.abs(width * cos) + Math.abs(height * sin));\n var newHeight = ceilWithPrecision(Math.abs(width * sin) + Math.abs(height * cos));\n var canvas = create$5(newWidth, newHeight);\n var context = get2dContext(canvas);\n context.translate(newWidth / 2, newHeight / 2);\n context.rotate(rad);\n context.drawImage(image, -width / 2, -height / 2);\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 if (comp.getSystem().isConnected()) {\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 },\n isActive: function () {\n return descendant$1(comp.element, 'span').exists(function (button) {\n if (comp.getSystem().isConnected()) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n } else {\n return false;\n }\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 { getComponent: constant(comp) };\n };\n var onSetup = function (api) {\n var updateText = function () {\n var comp = api.getComponent();\n if (comp.getSystem().isConnected()) {\n spec.updateText(comp);\n }\n };\n updateText();\n editor.on('NodeChange', updateText);\n return function () {\n editor.off('NodeChange', updateText);\n };\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 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 updateText: updateSelectMenuIcon,\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 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 updateText: updateSelectMenuText,\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 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 updateText: updateSelectMenuText,\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 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 updateText: updateSelectMenuText,\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 return {\n tooltip: 'Formats',\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n updateText: updateSelectMenuText,\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 var commonMenuItem = function (item) {\n return {\n text: item.text,\n icon: item.icon,\n disabled: item.disabled,\n shortcut: item.shortcut\n };\n };\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 __assign(__assign({ type: 'nestedmenuitem' }, commonMenuItem(item)), {\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 __assign(__assign({ type: 'menuitem' }, commonMenuItem(item)), { onAction: noarg(item.onAction) });\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 return get$1(contextMenus, name.toLowerCase()).map(function (menu) {\n var items = menu.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 }).getOrThunk(function () {\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 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 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 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 keyboardHandler = function (editor, resizeType, x, y) {\n var scale = 20;\n var delta = SugarPosition(x * scale, y * scale);\n resize$3(editor, delta, resizeType);\n return Optional.some(true);\n };\n var renderResizeHandler = function (editor, providersBackstage) {\n var resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n return Optional.some({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: { title: providersBackstage.translate('Resize') },\n innerHtml: get$e('resize-handle', providersBackstage.icons)\n },\n behaviours: derive$1([\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (_comp, _target, delta) {\n return resize$3(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: function () {\n return keyboardHandler(editor, resizeType, -1, 0);\n },\n onRight: function () {\n return keyboardHandler(editor, resizeType, 1, 0);\n },\n onUp: function () {\n return keyboardHandler(editor, resizeType, 0, -1);\n },\n onDown: function () {\n return keyboardHandler(editor, resizeType, 0, 1);\n }\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ])\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 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 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 resizeHandler = renderResizeHandler(editor, providersBackstage);\n return components.concat(resizeHandler.toArray());\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n 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, .tox-statusbar__resize-handle'\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 \"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 \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","// Exports the \"help\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/help')\n// ES2015:\n// import 'tinymce/plugins/help'\nrequire('./plugin.js');","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar getGlobal = function () { return (typeof window !== 'undefined' ? window : global); };\nvar getTinymce = function () {\n var global = getGlobal();\n return global && global.tinymce ? global.tinymce : null;\n};\nexport { getTinymce };\n","/**\n * 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.8.1 (2021-05-20)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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 isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\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 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 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 var isEmpty = function (s) {\n return !isNotEmpty(s);\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$1 = 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$1(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM.remove(li);\n if (isEmpty$1(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 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 var detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n 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$1(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$1(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$1(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$1(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$1(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 updateList$1 = function (editor, update) {\n var parentList = getParentList(editor);\n editor.undoManager.transact(function () {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each$1(update.attrs, function (v, k) {\n return editor.dom.setAttrib(parentList, k, v);\n });\n }\n });\n };\n\n var parseAlphabeticBase26 = function (str) {\n var chars = reverse(trim(str).split(''));\n var values = map(chars, function (char, i) {\n var charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, function (sum, v) {\n return sum + v;\n }, 0);\n };\n var composeAlphabeticBase26 = function (value) {\n value--;\n if (value < 0) {\n return '';\n } else {\n var remainder = value % 26;\n var quotient = Math.floor(value / 26);\n var rest = composeAlphabeticBase26(quotient);\n var char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n var isUppercase = function (str) {\n return /^[A-Z]+$/.test(str);\n };\n var isLowercase = function (str) {\n return /^[a-z]+$/.test(str);\n };\n var isNumeric = function (str) {\n return /^[0-9]+$/.test(str);\n };\n var deduceListType = function (start) {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n var parseStartValue = function (start) {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start: start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n var parseDetail = function (detail) {\n var start = parseInt(detail.start, 10);\n if (detail.listStyleType.is('upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (detail.listStyleType.is('lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n var open = function (editor) {\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: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.some(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var data = api.getData();\n parseStartValue(data.start).each(function (detail) {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = getParentList(editor);\n return parentList && parentList.nodeName === listName;\n };\n };\n var registerDialog = function (editor) {\n editor.addCommand('mceListProps', function () {\n open(editor);\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 registerDialog(editor);\n editor.addCommand('mceListUpdate', function (ui, detail) {\n if (isObject(detail)) {\n updateList$1(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n 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 editor.execCommand('mceListProps');\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 } else {\n registerDialog(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.8.1 (2021-05-20)\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","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","/**\n * 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.8.1 (2021-05-20)\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.EditorManager');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var shouldMergeClasses = function (editor) {\n return editor.getParam('importcss_merge_classes');\n };\n var shouldImportExclusive = function (editor) {\n return editor.getParam('importcss_exclusive');\n };\n var getSelectorConverter = function (editor) {\n return editor.getParam('importcss_selector_converter');\n };\n var getSelectorFilter = function (editor) {\n return editor.getParam('importcss_selector_filter');\n };\n var getCssGroups = function (editor) {\n return editor.getParam('importcss_groups');\n };\n var shouldAppend = function (editor) {\n return editor.getParam('importcss_append');\n };\n var getFileFilter = function (editor) {\n return editor.getParam('importcss_file_filter');\n };\n var getSkin = function (editor) {\n var skin = editor.getParam('skin');\n return skin !== false ? skin || 'oxide' : false;\n };\n var getSkinUrl = function (editor) {\n return editor.getParam('skin_url');\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 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 generate = function () {\n var ungroupedOrder = [];\n var groupOrder = [];\n var groups = {};\n var addItemToGroup = function (groupTitle, itemInfo) {\n if (groups[groupTitle]) {\n groups[groupTitle].push(itemInfo);\n } else {\n groupOrder.push(groupTitle);\n groups[groupTitle] = [itemInfo];\n }\n };\n var addItem = function (itemInfo) {\n ungroupedOrder.push(itemInfo);\n };\n var toFormats = function () {\n var groupItems = bind(groupOrder, function (g) {\n var items = groups[g];\n return items.length === 0 ? [] : [{\n title: g,\n items: items\n }];\n });\n return groupItems.concat(ungroupedOrder);\n };\n return {\n addItemToGroup: addItemToGroup,\n addItem: addItem,\n toFormats: toFormats\n };\n };\n\n var removeCacheSuffix = function (url) {\n var cacheSuffix = global$3.cacheSuffix;\n if (typeof url === 'string') {\n url = url.replace('?' + cacheSuffix, '').replace('&' + cacheSuffix, '');\n }\n return url;\n };\n var isSkinContentCss = function (editor, href) {\n var skin = getSkin(editor);\n if (skin) {\n var skinUrlBase = getSkinUrl(editor);\n var skinUrl = skinUrlBase ? editor.documentBaseURI.toAbsolute(skinUrlBase) : global$2.baseURL + '/skins/ui/' + skin;\n var contentSkinUrlPart = global$2.baseURL + '/skins/content/';\n return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css' || href.indexOf(contentSkinUrlPart) !== -1;\n }\n return false;\n };\n var compileFilter = function (filter) {\n if (typeof filter === 'string') {\n return function (value) {\n return value.indexOf(filter) !== -1;\n };\n } else if (filter instanceof RegExp) {\n return function (value) {\n return filter.test(value);\n };\n }\n return filter;\n };\n var isCssImportRule = function (rule) {\n return rule.styleSheet;\n };\n var isCssPageRule = function (rule) {\n return rule.selectorText;\n };\n var getSelectors = function (editor, doc, fileFilter) {\n var selectors = [], contentCSSUrls = {};\n var append = function (styleSheet, imported) {\n var href = styleSheet.href, rules;\n href = removeCacheSuffix(href);\n if (!href || !fileFilter(href, imported) || isSkinContentCss(editor, href)) {\n return;\n }\n global$4.each(styleSheet.imports, function (styleSheet) {\n append(styleSheet, true);\n });\n try {\n rules = styleSheet.cssRules || styleSheet.rules;\n } catch (e) {\n }\n global$4.each(rules, function (cssRule) {\n if (isCssImportRule(cssRule)) {\n append(cssRule.styleSheet, true);\n } else if (isCssPageRule(cssRule)) {\n global$4.each(cssRule.selectorText.split(','), function (selector) {\n selectors.push(global$4.trim(selector));\n });\n }\n });\n };\n global$4.each(editor.contentCSS, function (url) {\n contentCSSUrls[url] = true;\n });\n if (!fileFilter) {\n fileFilter = function (href, imported) {\n return imported || contentCSSUrls[href];\n };\n }\n try {\n global$4.each(doc.styleSheets, function (styleSheet) {\n append(styleSheet);\n });\n } catch (e) {\n }\n return selectors;\n };\n var defaultConvertSelectorToFormat = function (editor, selectorText) {\n var format;\n var selector = /^(?:([a-z0-9\\-_]+))?(\\.[a-z0-9_\\-\\.]+)$/i.exec(selectorText);\n if (!selector) {\n return;\n }\n var elementName = selector[1];\n var classes = selector[2].substr(1).split('.').join(' ');\n var inlineSelectorElements = global$4.makeMap('a,img');\n if (selector[1]) {\n format = { title: selectorText };\n if (editor.schema.getTextBlockElements()[elementName]) {\n format.block = elementName;\n } else if (editor.schema.getBlockElements()[elementName] || inlineSelectorElements[elementName.toLowerCase()]) {\n format.selector = elementName;\n } else {\n format.inline = elementName;\n }\n } else if (selector[2]) {\n format = {\n inline: 'span',\n title: selectorText.substr(1),\n classes: classes\n };\n }\n if (shouldMergeClasses(editor) !== false) {\n format.classes = classes;\n } else {\n format.attributes = { class: classes };\n }\n return format;\n };\n var getGroupsBySelector = function (groups, selector) {\n return global$4.grep(groups, function (group) {\n return !group.filter || group.filter(selector);\n });\n };\n var compileUserDefinedGroups = function (groups) {\n return global$4.map(groups, function (group) {\n return global$4.extend({}, group, {\n original: group,\n selectors: {},\n filter: compileFilter(group.filter),\n item: {\n text: group.title,\n menu: []\n }\n });\n });\n };\n var isExclusiveMode = function (editor, group) {\n return group === null || shouldImportExclusive(editor) !== false;\n };\n var isUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n return !(isExclusiveMode(editor, group) ? selector in globallyUniqueSelectors : selector in group.selectors);\n };\n var markUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n if (isExclusiveMode(editor, group)) {\n globallyUniqueSelectors[selector] = true;\n } else {\n group.selectors[selector] = true;\n }\n };\n var convertSelectorToFormat = function (editor, plugin, selector, group) {\n var selectorConverter;\n if (group && group.selector_converter) {\n selectorConverter = group.selector_converter;\n } else if (getSelectorConverter(editor)) {\n selectorConverter = getSelectorConverter(editor);\n } else {\n selectorConverter = function () {\n return defaultConvertSelectorToFormat(editor, selector);\n };\n }\n return selectorConverter.call(plugin, selector, group);\n };\n var setup = function (editor) {\n editor.on('init', function (_e) {\n var model = generate();\n var globallyUniqueSelectors = {};\n var selectorFilter = compileFilter(getSelectorFilter(editor));\n var groups = compileUserDefinedGroups(getCssGroups(editor));\n var processSelector = function (selector, group) {\n if (isUniqueSelector(editor, selector, group, globallyUniqueSelectors)) {\n markUniqueSelector(editor, selector, group, globallyUniqueSelectors);\n var format = convertSelectorToFormat(editor, editor.plugins.importcss, selector, group);\n if (format) {\n var formatName = format.name || global$1.DOM.uniqueId();\n editor.formatter.register(formatName, format);\n return global$4.extend({}, {\n title: format.title,\n format: formatName\n });\n }\n }\n return null;\n };\n global$4.each(getSelectors(editor, editor.getDoc(), compileFilter(getFileFilter(editor))), function (selector) {\n if (selector.indexOf('.mce-') === -1) {\n if (!selectorFilter || selectorFilter(selector)) {\n var selectorGroups = getGroupsBySelector(groups, selector);\n if (selectorGroups.length > 0) {\n global$4.each(selectorGroups, function (group) {\n var menuItem = processSelector(selector, group);\n if (menuItem) {\n model.addItemToGroup(group.title, menuItem);\n }\n });\n } else {\n var menuItem = processSelector(selector, null);\n if (menuItem) {\n model.addItem(menuItem);\n }\n }\n }\n }\n });\n var items = model.toFormats();\n editor.fire('addStyleModifications', {\n items: items,\n replace: !shouldAppend(editor)\n });\n });\n };\n\n var get = function (editor) {\n var convertSelectorToFormat = function (selectorText) {\n return defaultConvertSelectorToFormat(editor, selectorText);\n };\n return { convertSelectorToFormat: convertSelectorToFormat };\n };\n\n function Plugin () {\n global.add('importcss', function (editor) {\n setup(editor);\n return get(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.8.1 (2021-05-20)\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 (customTabs) {\n var addTab = function (spec) {\n var currentCustomTabs = customTabs.get();\n currentCustomTabs[spec.name] = spec;\n customTabs.set(currentCustomTabs);\n };\n return { addTab: addTab };\n };\n\n var register = function (editor, dialogOpener) {\n editor.addCommand('mceHelp', dialogOpener);\n };\n\n var register$1 = function (editor, dialogOpener) {\n editor.ui.registry.addButton('help', {\n icon: 'help',\n tooltip: 'Help',\n onAction: dialogOpener\n });\n editor.ui.registry.addMenuItem('help', {\n text: 'Help',\n icon: 'help',\n shortcut: 'Alt+0',\n onAction: dialogOpener\n });\n };\n\n 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 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 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 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 keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\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\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\n var getHelpTabs = function (editor) {\n return Optional.from(editor.getParam('help_tabs'));\n };\n var getForcedPlugins = function (editor) {\n return editor.getParam('forced_plugins');\n };\n\n var description = '

Editor UI keyboard navigation

\\n\\n

Activating keyboard navigation

\\n\\n

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

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

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

\\n\\n

Moving between UI sections

\\n\\n

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

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

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

\\n\\n

Moving within UI sections

\\n\\n

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

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

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

\\n\\n

Executing buttons

\\n\\n

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

\\n\\n

Opening, navigating and closing menus

\\n\\n

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

\\n\\n

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

\\n\\n

Context toolbars and menus

\\n\\n

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

\\n\\n

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

\\n\\n

Dialog navigation

\\n\\n

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

\\n\\n

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

\\n\\n

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

';\n var tab = function () {\n var body = {\n type: 'htmlpanel',\n presets: 'document',\n html: description\n };\n return {\n name: 'keyboardnav',\n title: 'Keyboard Navigation',\n items: [body]\n };\n };\n\n var global$1 = 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$1.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$1.mac ? updated.join('').replace(/\\s/, '') : updated.join('+');\n };\n\n var shortcuts = [\n {\n shortcuts: ['Meta + B'],\n action: 'Bold'\n },\n {\n shortcuts: ['Meta + I'],\n action: 'Italic'\n },\n {\n shortcuts: ['Meta + U'],\n action: 'Underline'\n },\n {\n shortcuts: ['Meta + A'],\n action: 'Select all'\n },\n {\n shortcuts: [\n 'Meta + Y',\n 'Meta + Shift + Z'\n ],\n action: 'Redo'\n },\n {\n shortcuts: ['Meta + Z'],\n action: 'Undo'\n },\n {\n shortcuts: ['Access + 1'],\n action: 'Heading 1'\n },\n {\n shortcuts: ['Access + 2'],\n action: 'Heading 2'\n },\n {\n shortcuts: ['Access + 3'],\n action: 'Heading 3'\n },\n {\n shortcuts: ['Access + 4'],\n action: 'Heading 4'\n },\n {\n shortcuts: ['Access + 5'],\n action: 'Heading 5'\n },\n {\n shortcuts: ['Access + 6'],\n action: 'Heading 6'\n },\n {\n shortcuts: ['Access + 7'],\n action: 'Paragraph'\n },\n {\n shortcuts: ['Access + 8'],\n action: 'Div'\n },\n {\n shortcuts: ['Access + 9'],\n action: 'Address'\n },\n {\n shortcuts: ['Alt + 0'],\n action: 'Open help dialog'\n },\n {\n shortcuts: ['Alt + F9'],\n action: 'Focus to menubar'\n },\n {\n shortcuts: ['Alt + F10'],\n action: 'Focus to toolbar'\n },\n {\n shortcuts: ['Alt + F11'],\n action: 'Focus to element path'\n },\n {\n shortcuts: ['Ctrl + F9'],\n action: 'Focus to contextual toolbar'\n },\n {\n shortcuts: ['Shift + Enter'],\n action: 'Open popup menu for split buttons'\n },\n {\n shortcuts: ['Meta + K'],\n action: 'Insert link (if link plugin activated)'\n },\n {\n shortcuts: ['Meta + S'],\n action: 'Save (if save plugin activated)'\n },\n {\n shortcuts: ['Meta + F'],\n action: 'Find (if searchreplace plugin activated)'\n },\n {\n shortcuts: ['Meta + Shift + F'],\n action: 'Switch to or from fullscreen mode'\n }\n ];\n\n var tab$1 = function () {\n var shortcutList = map(shortcuts, function (shortcut) {\n var shortcutText = map(shortcut.shortcuts, convertText).join(' or ');\n return [\n shortcut.action,\n shortcutText\n ];\n });\n var tablePanel = {\n type: 'table',\n header: [\n 'Action',\n 'Shortcut'\n ],\n cells: shortcutList\n };\n return {\n name: 'shortcuts',\n title: 'Handy Shortcuts',\n items: [tablePanel]\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var premiumType = 'premium';\n var openSourceType = 'opensource';\n var urls = map([\n {\n key: 'advlist',\n name: 'Advanced List'\n },\n {\n key: 'anchor',\n name: 'Anchor'\n },\n {\n key: 'autolink',\n name: 'Autolink'\n },\n {\n key: 'autoresize',\n name: 'Autoresize'\n },\n {\n key: 'autosave',\n name: 'Autosave'\n },\n {\n key: 'bbcode',\n name: 'BBCode'\n },\n {\n key: 'charmap',\n name: 'Character Map'\n },\n {\n key: 'code',\n name: 'Code'\n },\n {\n key: 'codesample',\n name: 'Code Sample'\n },\n {\n key: 'colorpicker',\n name: 'Color Picker'\n },\n {\n key: 'directionality',\n name: 'Directionality'\n },\n {\n key: 'emoticons',\n name: 'Emoticons'\n },\n {\n key: 'fullpage',\n name: 'Full Page'\n },\n {\n key: 'fullscreen',\n name: 'Full Screen'\n },\n {\n key: 'help',\n name: 'Help'\n },\n {\n key: 'hr',\n name: 'Horizontal Rule'\n },\n {\n key: 'image',\n name: 'Image'\n },\n {\n key: 'imagetools',\n name: 'Image Tools'\n },\n {\n key: 'importcss',\n name: 'Import CSS'\n },\n {\n key: 'insertdatetime',\n name: 'Insert Date/Time'\n },\n {\n key: 'legacyoutput',\n name: 'Legacy Output'\n },\n {\n key: 'link',\n name: 'Link'\n },\n {\n key: 'lists',\n name: 'Lists'\n },\n {\n key: 'media',\n name: 'Media'\n },\n {\n key: 'nonbreaking',\n name: 'Nonbreaking'\n },\n {\n key: 'noneditable',\n name: 'Noneditable'\n },\n {\n key: 'pagebreak',\n name: 'Page Break'\n },\n {\n key: 'paste',\n name: 'Paste'\n },\n {\n key: 'preview',\n name: 'Preview'\n },\n {\n key: 'print',\n name: 'Print'\n },\n {\n key: 'save',\n name: 'Save'\n },\n {\n key: 'searchreplace',\n name: 'Search and Replace'\n },\n {\n key: 'spellchecker',\n name: 'Spell Checker'\n },\n {\n key: 'tabfocus',\n name: 'Tab Focus'\n },\n {\n key: 'table',\n name: 'Table'\n },\n {\n key: 'template',\n name: 'Template'\n },\n {\n key: 'textcolor',\n name: 'Text Color'\n },\n {\n key: 'textpattern',\n name: 'Text Pattern'\n },\n {\n key: 'toc',\n name: 'Table of Contents'\n },\n {\n key: 'visualblocks',\n name: 'Visual Blocks'\n },\n {\n key: 'visualchars',\n name: 'Visual Characters'\n },\n {\n key: 'wordcount',\n name: 'Word Count'\n },\n {\n key: 'advcode',\n name: 'Advanced Code Editor*',\n type: premiumType\n },\n {\n key: 'formatpainter',\n name: 'Format Painter*',\n type: premiumType\n },\n {\n key: 'powerpaste',\n name: 'PowerPaste*',\n type: premiumType\n },\n {\n key: 'tinydrive',\n name: 'Tiny Drive*',\n type: premiumType\n },\n {\n key: 'tinymcespellchecker',\n name: 'Spell Checker Pro*',\n type: premiumType\n },\n {\n key: 'a11ychecker',\n name: 'Accessibility Checker*',\n type: premiumType\n },\n {\n key: 'linkchecker',\n name: 'Link Checker*',\n type: premiumType\n },\n {\n key: 'mentions',\n name: 'Mentions*',\n type: premiumType\n },\n {\n key: 'mediaembed',\n name: 'Enhanced Media Embed*',\n type: premiumType\n },\n {\n key: 'checklist',\n name: 'Checklist*',\n type: premiumType\n },\n {\n key: 'casechange',\n name: 'Case Change*',\n type: premiumType\n },\n {\n key: 'permanentpen',\n name: 'Permanent Pen*',\n type: premiumType\n },\n {\n key: 'pageembed',\n name: 'Page Embed*',\n type: premiumType\n },\n {\n key: 'tinycomments',\n name: 'Tiny Comments*',\n type: premiumType,\n slug: 'comments'\n },\n {\n key: 'advtable',\n name: 'Advanced Tables*',\n type: premiumType\n },\n {\n key: 'autocorrect',\n name: 'Autocorrect*',\n type: premiumType\n },\n {\n key: 'export',\n name: 'Export*',\n type: premiumType\n }\n ], function (item) {\n return __assign(__assign({}, item), {\n type: item.type || openSourceType,\n slug: item.slug || item.key\n });\n });\n\n var tab$2 = function (editor) {\n var availablePlugins = function () {\n var premiumPlugins = [\n 'Accessibility Checker',\n 'Advanced Code Editor',\n 'Advanced Tables',\n 'Case Change',\n 'Checklist',\n 'Export',\n 'Tiny Comments',\n 'Tiny Drive',\n 'Enhanced Media Embed',\n 'Format Painter',\n 'Link Checker',\n 'Mentions',\n 'MoxieManager',\n 'Page Embed',\n 'Permanent Pen',\n 'PowerPaste',\n 'Spell Checker Pro'\n ];\n var premiumPluginList = map(premiumPlugins, function (plugin) {\n return '
  • ' + global$2.translate(plugin) + '
  • ';\n }).join('');\n return '
    ' + '

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

    ' + '' + '
    ';\n };\n var makeLink = function (p) {\n return '' + p.name + '';\n };\n var maybeUrlize = function (editor, key) {\n return find(urls, function (x) {\n return x.key === key;\n }).fold(function () {\n var getMetadata = editor.plugins[key].getMetadata;\n return typeof getMetadata === 'function' ? makeLink(getMetadata()) : key;\n }, function (x) {\n return makeLink({\n name: x.name,\n url: 'https://www.tiny.cloud/docs/plugins/' + x.type + '/' + x.slug\n });\n });\n };\n var getPluginKeys = function (editor) {\n var keys$1 = keys(editor.plugins);\n var forced_plugins = getForcedPlugins(editor);\n return forced_plugins === undefined ? keys$1 : filter(keys$1, function (k) {\n return !contains(forced_plugins, k);\n });\n };\n var pluginLister = function (editor) {\n var pluginKeys = getPluginKeys(editor);\n var pluginLis = map(pluginKeys, function (key) {\n return '
  • ' + maybeUrlize(editor, key) + '
  • ';\n });\n var count = pluginLis.length;\n var pluginsString = pluginLis.join('');\n var html = '

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

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

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

    ',\n presets: 'document'\n };\n return {\n name: 'versions',\n title: 'Version',\n items: [htmlPanel]\n };\n };\n\n var parseHelpTabsSetting = function (tabsFromSettings, tabs) {\n var newTabs = {};\n var names = map(tabsFromSettings, function (t) {\n if (typeof t === 'string') {\n if (has(tabs, t)) {\n newTabs[t] = tabs[t];\n }\n return t;\n } else {\n newTabs[t.name] = t;\n return t.name;\n }\n });\n return {\n tabs: newTabs,\n names: names\n };\n };\n var getNamesFromTabs = function (tabs) {\n var names = keys(tabs);\n var idx = names.indexOf('versions');\n if (idx !== -1) {\n names.splice(idx, 1);\n names.push('versions');\n }\n return {\n tabs: tabs,\n names: names\n };\n };\n var parseCustomTabs = function (editor, customTabs) {\n var _a;\n var shortcuts = tab$1();\n var nav = tab();\n var plugins = tab$2(editor);\n var versions = tab$3();\n var tabs = __assign((_a = {}, _a[shortcuts.name] = shortcuts, _a[nav.name] = nav, _a[plugins.name] = plugins, _a[versions.name] = versions, _a), customTabs.get());\n return getHelpTabs(editor).fold(function () {\n return getNamesFromTabs(tabs);\n }, function (tabsFromSettings) {\n return parseHelpTabsSetting(tabsFromSettings, tabs);\n });\n };\n var init = function (editor, customTabs) {\n return function () {\n var _a = parseCustomTabs(editor, customTabs), tabs = _a.tabs, names = _a.names;\n var foundTabs = map(names, function (name) {\n return get$1(tabs, name);\n });\n var dialogTabs = cat(foundTabs);\n var body = {\n type: 'tabpanel',\n tabs: dialogTabs\n };\n editor.windowManager.open({\n title: 'Help',\n size: 'medium',\n body: body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: {}\n });\n };\n };\n\n function Plugin () {\n global.add('help', function (editor) {\n var customTabs = Cell({});\n var api = get(customTabs);\n var dialogOpener = init(editor, customTabs);\n register$1(editor, dialogOpener);\n register(editor, dialogOpener);\n editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');\n return api;\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","// Exports the \"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 * 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.8.1 (2021-05-20)\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 global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\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 getBodyClassByHash = 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 getBodyClassByHash(editor);\n }\n };\n var getBodyIdByHash = function (editor) {\n var bodyId = editor.getParam('body_id', '', 'hash');\n return bodyId[editor.id] || bodyId;\n };\n var getBodyId = function (editor) {\n var bodyId = editor.getParam('body_id', 'tinymce', 'string');\n if (bodyId.indexOf('=') === -1) {\n return bodyId;\n } else {\n return getBodyIdByHash(editor);\n }\n };\n\n var getPreviewHtml = function (editor) {\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = getContentStyle(editor);\n headHtml += '';\n var cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global$2.each(editor.contentCSS, function (url) {\n headHtml += '';\n });\n if (contentStyle) {\n headHtml += '';\n }\n var bodyId = getBodyId(editor);\n var bodyClass = getBodyClass(editor);\n var isMetaKeyPressed = global$1.mac ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n var preventClicksOnLinksScript = ' ';\n var directionality = editor.getBody().dir;\n var dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n var previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';\n return previewHtml;\n };\n\n var open = function (editor) {\n var content = getPreviewHtml(editor);\n var dataApi = editor.windowManager.open({\n title: 'Preview',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n name: 'preview',\n type: 'iframe',\n sandboxed: true\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: { preview: content }\n });\n dataApi.focus('close');\n };\n\n var register = function (editor) {\n editor.addCommand('mcePreview', function () {\n open(editor);\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('preview', {\n icon: 'preview',\n tooltip: 'Preview',\n onAction: function () {\n return editor.execCommand('mcePreview');\n }\n });\n editor.ui.registry.addMenuItem('preview', {\n icon: 'preview',\n text: 'Preview',\n onAction: function () {\n return editor.execCommand('mcePreview');\n }\n });\n };\n\n function Plugin () {\n global.add('preview', function (editor) {\n register(editor);\n register$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"print\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/print')\n// ES2015:\n// import 'tinymce/plugins/print'\nrequire('./plugin.js');","// 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');","/**\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.8.1 (2021-05-20)\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.8.1 (2021-05-20)\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","/**\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.8.1 (2021-05-20)\n */\n(function () {\n 'use strict';\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 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 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, isRoot) {\n var startCellName = name(start);\n var startCell = startCellName === 'col' || startCellName === 'colgroup' ? getSelectionStartCellFallback(start) : start;\n return closest$1(startCell, selector, isRoot);\n };\n };\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getSelectionStartCellOrCaption = getSelectionStartFromSelector('th,td,caption');\n var getCellsFromSelection = function (start, selections, isRoot) {\n return getSelectionStartCell(start, isRoot).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: 'Horizontal align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n name: 'valign',\n type: 'listbox',\n label: 'Vertical align',\n items: [\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', editor.getBody());\n if (tableElm) {\n data = extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n } else {\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n } 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), getIsRoot(editor));\n };\n var getSelectionStartCell$1 = function (editor) {\n return getSelectionStartCell(getSelectionStart(editor), getIsRoot(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, isRoot);\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) {\n return go(editor, isRoot, next(cell));\n };\n var backward = function (editor, isRoot, cell) {\n return go(editor, isRoot, prev(cell));\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) {\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 editor.execCommand('mceTableInsertRowAfter');\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, cellSelection) {\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 var container = SugarElement.fromDom(event.shiftKey ? rng.startContainer : rng.endContainer);\n cell(container, isRoot_1).each(function (cell) {\n event.preventDefault();\n table(cell, isRoot_1).each(cellSelection.clear);\n editor.selection.collapse(event.shiftKey);\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell);\n rng.each(function (range) {\n editor.selection.setRng(range);\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), getIsRoot(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, cellSelection);\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","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\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.8.1 (2021-05-20)\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.8.1 (2021-05-20)\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 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 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 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 var getDialogContainerType = function (useColumns) {\n return useColumns ? {\n type: 'grid',\n columns: 2\n } : { type: 'panel' };\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 [__assign(__assign({}, getDialogContainerType(info.classList.isSome() && info.hasImageCaption)), {\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.message);\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TinyMceEditor',{attrs:{\"id\":\"input-editor\",\"value\":_vm.value,\"init\":_vm.options},on:{\"input\":_vm.update}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar validEvents = [\n 'onActivate',\n 'onAddUndo',\n 'onBeforeAddUndo',\n 'onBeforeExecCommand',\n 'onBeforeGetContent',\n 'onBeforeRenderUI',\n 'onBeforeSetContent',\n 'onBeforePaste',\n 'onBlur',\n 'onChange',\n 'onClearUndos',\n 'onClick',\n 'onContextMenu',\n 'onCopy',\n 'onCut',\n 'onDblclick',\n 'onDeactivate',\n 'onDirty',\n 'onDrag',\n 'onDragDrop',\n 'onDragEnd',\n 'onDragGesture',\n 'onDragOver',\n 'onDrop',\n 'onExecCommand',\n 'onFocus',\n 'onFocusIn',\n 'onFocusOut',\n 'onGetContent',\n 'onHide',\n 'onInit',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onLoadContent',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onNodeChange',\n 'onObjectResizeStart',\n 'onObjectResized',\n 'onObjectSelected',\n 'onPaste',\n 'onPostProcess',\n 'onPostRender',\n 'onPreProcess',\n 'onProgressState',\n 'onRedo',\n 'onRemove',\n 'onReset',\n 'onSaveContent',\n 'onSelectionChange',\n 'onSetAttrib',\n 'onSetContent',\n 'onShow',\n 'onSubmit',\n 'onUndo',\n 'onVisualAid'\n];\nvar isValidKey = function (key) { return validEvents.indexOf(key) !== -1; };\nexport var bindHandlers = function (initEvent, listeners, editor) {\n Object.keys(listeners)\n .filter(isValidKey)\n .forEach(function (key) {\n var handler = listeners[key];\n if (typeof handler === 'function') {\n if (key === 'onInit') {\n handler(initEvent, editor);\n }\n else {\n editor.on(key.substring(2), function (e) { return handler(e, editor); });\n }\n }\n });\n};\nexport var bindModelHandlers = function (ctx, editor) {\n var modelEvents = ctx.$props.modelEvents ? ctx.$props.modelEvents : null;\n var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;\n var currentContent;\n ctx.$watch('value', function (val, prevVal) {\n if (editor && typeof val === 'string' && val !== currentContent && val !== prevVal) {\n editor.setContent(val);\n currentContent = val;\n }\n });\n editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', function () {\n currentContent = editor.getContent();\n ctx.$emit('input', currentContent);\n });\n};\nexport var initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || initialValue);\n // checks if the v-model shorthand is used (which sets an v-on:input listener) and then binds either\n // specified the events or defaults to \"change keyup\" event and emits the editor content on that event\n if (ctx.$listeners.input) {\n bindModelHandlers(ctx, editor);\n }\n bindHandlers(initEvent, ctx.$listeners, editor);\n};\nvar unique = 0;\nexport var uuid = function (prefix) {\n var time = Date.now();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n};\nexport var isTextarea = function (element) {\n return element !== null && element.tagName.toLowerCase() === 'textarea';\n};\nvar normalizePluginArray = function (plugins) {\n if (typeof plugins === 'undefined' || plugins === '') {\n return [];\n }\n return Array.isArray(plugins) ? plugins : plugins.split(' ');\n};\nexport var mergePlugins = function (initPlugins, inputPlugins) {\n return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { uuid } from './Utils';\nvar injectScriptTag = function (scriptId, doc, url, callback) {\n var scriptTag = doc.createElement('script');\n scriptTag.type = 'application/javascript';\n scriptTag.id = scriptId;\n scriptTag.addEventListener('load', callback);\n scriptTag.src = url;\n if (doc.head) {\n doc.head.appendChild(scriptTag);\n }\n};\nexport var create = function () {\n return {\n listeners: [],\n scriptId: uuid('tiny-script'),\n scriptLoaded: false\n };\n};\nexport var load = function (state, doc, url, callback) {\n if (state.scriptLoaded) {\n callback();\n }\n else {\n state.listeners.push(callback);\n if (!doc.getElementById(state.scriptId)) {\n injectScriptTag(state.scriptId, doc, url, function () {\n state.listeners.forEach(function (fn) { return fn(); });\n state.scriptLoaded = true;\n });\n }\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport var editorProps = {\n apiKey: String,\n cloudChannel: String,\n id: String,\n init: Object,\n initialValue: String,\n inline: Boolean,\n modelEvents: [String, Array],\n plugins: [String, Array],\n tagName: String,\n toolbar: [String, Array],\n value: String,\n disabled: Boolean\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as ScriptLoader from '../ScriptLoader';\nimport { getTinymce } from '../TinyMCE';\nimport { initEditor, isTextarea, mergePlugins, uuid } from '../Utils';\nimport { editorProps } from './EditorPropTypes';\nvar scriptState = ScriptLoader.create();\nvar renderInline = function (h, id, tagName) {\n return h(tagName ? tagName : 'div', {\n attrs: { id: id }\n });\n};\nvar renderIframe = function (h, id) {\n return h('textarea', {\n attrs: { id: id },\n style: { visibility: 'hidden' }\n });\n};\nvar initialise = function (ctx) { return function () {\n var finalInit = __assign({}, ctx.$props.init, { readonly: ctx.$props.disabled, selector: \"#\" + ctx.elementId, plugins: mergePlugins(ctx.$props.init && ctx.$props.init.plugins, ctx.$props.plugins), toolbar: ctx.$props.toolbar || (ctx.$props.init && ctx.$props.init.toolbar), inline: ctx.inlineEditor, setup: function (editor) {\n ctx.editor = editor;\n editor.on('init', function (e) { return initEditor(e, ctx, editor); });\n if (ctx.$props.init && typeof ctx.$props.init.setup === 'function') {\n ctx.$props.init.setup(editor);\n }\n } });\n if (isTextarea(ctx.element)) {\n ctx.element.style.visibility = '';\n }\n getTinymce().init(finalInit);\n}; };\nexport var Editor = {\n props: editorProps,\n created: function () {\n this.elementId = this.$props.id || uuid('tiny-vue');\n this.inlineEditor = (this.$props.init && this.$props.init.inline) || this.$props.inline;\n },\n watch: {\n disabled: function () {\n this.editor.setMode(this.disabled ? 'readonly' : 'design');\n }\n },\n mounted: function () {\n this.element = this.$el;\n if (getTinymce() !== null) {\n initialise(this)();\n }\n else if (this.element && this.element.ownerDocument) {\n var doc = this.element.ownerDocument;\n var channel = this.$props.cloudChannel ? this.$props.cloudChannel : '5';\n var apiKey = this.$props.apiKey ? this.$props.apiKey : '';\n var url = \"https://cloud.tinymce.com/\" + channel + \"/tinymce.min.js?apiKey=\" + apiKey;\n ScriptLoader.load(scriptState, doc, url, initialise(this));\n }\n },\n beforeDestroy: function () {\n if (getTinymce() !== null) {\n getTinymce().remove(this.editor);\n }\n },\n render: function (h) {\n return this.inlineEditor ? renderInline(h, this.elementId, this.$props.tagName) : renderIframe(h, this.elementId);\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Editor } from './components/Editor';\nexport default Editor;\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Editor.vue?vue&type=template&id=c491a2f0&\"\nimport script from \"./Editor.vue?vue&type=script&lang=js&\"\nexport * from \"./Editor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * 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.8.1 (2021-05-20)\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 register = function (editor) {\n editor.addCommand('mcePrint', function () {\n if (global$1.browser.isIE()) {\n editor.getDoc().execCommand('print', false, null);\n } else {\n editor.getWin().print();\n }\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('print', {\n icon: 'print',\n tooltip: 'Print',\n onAction: function () {\n return editor.execCommand('mcePrint');\n }\n });\n editor.ui.registry.addMenuItem('print', {\n text: 'Print...',\n icon: 'print',\n onAction: function () {\n return editor.execCommand('mcePrint');\n }\n });\n };\n\n function Plugin () {\n global.add('print', function (editor) {\n register(editor);\n register$1(editor);\n editor.addShortcut('Meta+P', '', 'mcePrint');\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.8.1 (2021-05-20)\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 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 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 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.8.1 (2021-05-20)\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 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 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 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 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 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] = function () {\n };\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 var hasBlockChildren = function (dom, elm) {\n return exists(elm.childNodes, dom.isBlock);\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 PAGE_UP: 33,\n PAGE_DOWN: 34,\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$2 = 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 getResizeTargets = 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 [\n elm,\n elm.firstElementChild\n ];\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 setSizeProp = function (element, name, value) {\n if (isNonNullable(value)) {\n var targets = getResizeTargets(element);\n each(targets, function (target) {\n if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n dom.setStyle(target, name, value);\n } else {\n dom.setAttrib(target, name, '' + value);\n }\n });\n }\n };\n var setGhostElmSize = function (ghostElm, width, height) {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\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 if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n 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$2(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n var target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', { 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$2(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,action,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 nonInheritableStyles = new Set();\n (function () {\n var nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each(nonInheritableStylesArr, function (style) {\n nonInheritableStyles.add(style);\n });\n }());\n var shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n var getStyleProps = function (dom, node) {\n return keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n };\n var isNonInheritableStyle = function (style) {\n return nonInheritableStyles.has(style);\n };\n var hasInheritableStyles = function (dom, node) {\n return forall(getStyleProps(dom, node), function (style) {\n return !isNonInheritableStyle(style);\n });\n };\n var getLonghandStyleProps = function (styles) {\n return filter(styles, function (style) {\n return exists(shorthandStyleProps, function (prop) {\n return startsWith(style, prop);\n });\n });\n };\n var hasStyleConflict = function (dom, node, parentNode) {\n var nodeStyleProps = getStyleProps(dom, node);\n var parentNodeStyleProps = getStyleProps(dom, parentNode);\n var valueMismatch = function (prop) {\n var nodeValue = dom.getStyle(node, prop);\n var parentValue = dom.getStyle(parentNode, prop);\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, function (nodeStyleProp) {\n var propExists = function (props) {\n return exists(props, function (prop) {\n return prop === nodeStyleProp;\n });\n };\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n var longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\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();\n var elementUtils_1 = ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n var isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n if (isInline && hasInheritableStyles(dom, node)) {\n for (var parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root_1; parentNode = parentNode.parentNode) {\n var styleConflict = hasStyleConflict(dom, node, parentNode);\n if (styleConflict) {\n break;\n }\n if (elementUtils_1.compare(parentNode, node)) {\n dom.remove(node, true);\n break;\n }\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, replaceVars(classes[x], vars))) {\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 (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n if (name === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(name);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (name === 'class') {\n elm.removeAttribute('className');\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 var parentNode = node.parentNode;\n if (isText$1(node) && hasBlockChildren(dom, parentNode)) {\n removeFormat(ed, format, vars, parentNode, parentNode);\n }\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 (isText$1(node) && hasBlockChildren(dom, node.parentNode)) {\n applyNodeStyle(formatList, node.parentNode);\n }\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 getRtcSetup = function (editor) {\n return get$1(editor.plugins, 'rtc').bind(function (rtcPlugin) {\n return Optional.from(rtcPlugin.setup);\n });\n };\n var setup$5 = function (editor) {\n var editorCast = editor;\n return getRtcSetup(editor).fold(function () {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, function (setup) {\n return Optional.some(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', { notification: __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,audio,video',\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,audio,video',\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,audio,video',\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,small',\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 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 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 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 var moveToLineEndPoint$1 = function (editor, forward, caret) {\n if (isInlineBoundariesEnabled(editor)) {\n var linePoint = getLineEndPoint(editor, forward).getOrThunk(function () {\n var rng = editor.selection.getRng();\n return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n });\n return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(function (loc) {\n var outsideLoc = outside(loc);\n return renderCaret(caret, outsideLoc).exists(function (pos) {\n setCaretPosition(editor, pos);\n return true;\n });\n });\n } else {\n return false;\n }\n };\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 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$2 = 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$3 = 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, caret, evt) {\n execute([\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 {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$3, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$3, editor, false)\n },\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$1, editor, true, caret)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$1, editor, false, caret)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$f = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, caret, 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 platform$2 = detect$3();\n var executeKeyupAction = function (editor, caret, evt) {\n execute([\n {\n keyCode: VK.PAGE_UP,\n action: action(moveToLineEndPoint$1, editor, false, caret)\n },\n {\n keyCode: VK.PAGE_DOWN,\n action: action(moveToLineEndPoint$1, editor, true, caret)\n }\n ], evt);\n };\n var stopImmediatePropagation = function (e) {\n return e.stopImmediatePropagation();\n };\n var isPageUpDown = function (evt) {\n return evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n };\n var setNodeChangeBlocker = function (blocked, editor, block) {\n if (block && !blocked.get()) {\n editor.on('NodeChange', stopImmediatePropagation, true);\n } else if (!block && blocked.get()) {\n editor.off('NodeChange', stopImmediatePropagation);\n }\n blocked.set(block);\n };\n var setup$h = function (editor, caret) {\n if (platform$2.os.isOSX()) {\n return;\n }\n var blocked = Cell(false);\n editor.on('keydown', function (evt) {\n if (isPageUpDown(evt)) {\n setNodeChangeBlocker(blocked, editor, true);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupAction(editor, caret, evt);\n }\n if (isPageUpDown(evt) && blocked.get()) {\n setNodeChangeBlocker(blocked, editor, false);\n editor.nodeChanged();\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$i = 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$i(editor);\n setup$g(editor);\n setup$f(editor, caret);\n setup$h(editor, caret);\n return caret;\n };\n var setup$j = 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$k = 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$l = 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$m = 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$n = 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$m(editor);\n setup$n(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 && !isRtc(editor)) {\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 var setupRtc = function () {\n if (isWebKit) {\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n var setup = function () {\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 };\n if (isRtc(editor)) {\n setupRtc();\n } else {\n setup();\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) {\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 (!isRtc(editor)) {\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$k(editor);\n if (!isRtc(editor)) {\n setup$l(editor);\n }\n var caret = setup$j(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);\n }, function (loadingRtc) {\n editor.setProgressState(true);\n loadingRtc.then(function (_rtcMode) {\n editor.setProgressState(false);\n preInit(editor);\n }, function (err) {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n preInit(editor);\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.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\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: '8.1',\n releaseDate: '2021-05-20',\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","// 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');","/**\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.8.1 (2021-05-20)\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 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 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 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","// Exports the \"importcss\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/importcss')\n// ES2015:\n// import 'tinymce/plugins/importcss'\nrequire('./plugin.js');","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});","// 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":""}